© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
アマゾン ウェブ サービス ジャパン株式会社 技術本部エンタープライズ ソリューション部 2016-06-03
Windows 開発者のための
継続的デプロイ on AWS
ソリューション アーキテクト 福井 厚でAWS Summitに参加しよう!
公式アカウント
@awscloud_jp
をフォローしたお客様に
フリクションボールペン
をプレゼント!自己紹介
名前:福井 厚(fatushi@) 所属:アマゾン ウェブ サービス ジャパン株式会社 技術本部エンタープライズ ソリューション部 ソリューション アーキテクト 経歴: メーカーサポート、ソフトハウス、SIベンダー(国産、外資)、開発系コンサルティング ファームを経て2015年7 月 よりアマゾン ウェブ サービス ジャパン株式会社でソリューション アーキテクトとして活動。2008年8月、Microsoft Certified Architect for Solutions Certification (MCA) に認定される。 マイクロソフトMVPアワード受賞歴11回(2015年7月にMVP 終了)
C#を愛し、.NETが大好きなエンジニアとして .NET開発者向けにAWSを普及する活動を実施中。 好きなAWSサービス: AWS IoT、CodeCommit、CodeDeploy、CodePipeline、AWS SDK for .NET
アジェンダ
本セッションの目的と対象者 Windows 開発者のための AWS 導入手順 開発環境構築構築 実行環境構築構築(テスト環境、本番環境) 継続的デプロイの実施 まとめ本セッションの目的と対象者
目的 • AWS を Windows 開発環境及び実行環境として、より容易に導入、活用 して頂くために、Windows プラットフォームを対象として AWS 環境の 構築および継続的デプロイの実施方法についての理解を助けることを目的 としています。 対象者 • 開発環境及び実行環境として AWS を活用したいと考えている Windows プラットフォームを対象とする開発者、運用担当者、アーキテクトの方Windows 開発者のための
AWS 導入手順
これだけでOK!AWS 導入手順
• アカウント取得 • 開発環境 セットアップ 開発環境構築 • 実行環境設計 • 実行環境構築 実行環境構築 •パイプライン設 計 •デプロイの実施 継続的デプロイ の実施開発環境構築
• アカウント取得 • 開発環境 セットアップ 開発環境構築 • 実行環境設計 • 実行環境構築 実行環境構築 •パイプライン設 計 •デプロイの実施 継続的デプロイ の実施開発環境構築の目的
AWS 環境を利用するアプリケーションの開発・構築を 容易にするために開発環境を構築
AWS Tools for Visual Studio がおすすめ!
AWS SDK for .NET を単体でインストールすることも可能
AWS Tools for Windows Powershell をインストールすることで
まずは AWS アカウントを取得
https://aws.amazon.com/jp/register-flow/
AWS Tools for Visual Studio の
セットアップ
https://aws.amazon.com/jp/visualstudio/ ダウンロードの ボタンをクリック してインストール アカウント取得 開発環境セット アップAWS Tools for Visual Studio
Visual Studio にインテグレート
Visual Studio 環境から AWS の各種リソースを操作可能
AWS SDK for .NET もインストールされる
AWS Sample Projects を提供
AWS Console Project AWS Empty Project AWS Web Project
AWS Tools for Visual Studio
AWS SDK for .NET を利用したコーディング例
アカウント取得 開発環境セット アップ
IAmazonEC2 ec2 = new AmazonEC2Client();
DescribeInstancesRequest ec2Request = new DescribeInstancesRequest(); try {
DescribeInstancesResponse ec2Response =
ec2.DescribeInstances(ec2Request); foreach (var reservation in ec2Response.Reservations)
foreach (var instance in reservation.Instances) {
Console.WriteLine("private IP address: {0}",
instance.PrivateIpAddress); }
}
catch (AmazonEC2Exception ex){
Console.WriteLine(ex.Message); }
AWS Lambda Function Project (Node.js)
Node.js for Visual Studio を事前にインストールしておく必要が ある (http://nodejstools.codeplex.com/)
AWS Tools for Visual Studio
その他プロジェクト
AWS Tools for Visual Studio
その他プロジェクト
AWS CloudFormation Project
アカウント取得 開発環境セット アップ
AWS Explorer Visual Studio にインテグレート 以下の各サービスの参照、操作を提供 Amazon CloudFront Amazon DynamoDB Amazon EC2 Amazon RDS Amazon S3 Amazon SimpleDB Amazon SNS Amazon SQS Amazon VPC AWS CloudFormation AWS Elastic Beanstalk
AWS Identity and Access Management AWS Lambda
Demo:
実行環境構築
• アカウント取得 • 開発環境 セットアップ 開発環境構築 • 実行環境設計 • 実行環境構築 実行環境構築 •パイプライン設 計 •デプロイの実施 継続的デプロイ の実施実行環境を設計する
アプリケーションの実行環境を設計
検証環境、本番環境用に VPC を構築 ポイント:検証環境と本番環境を同等な構成にする クラウドでは必要な時だけインスタンスを起動することでコ ストを節約できるため、本番環境と同等の構成で検証する 実行環境設計 実行環境構築ロードバランサ + マルチAZを利用したWebアプリ ケーションの構成例
Availability Zone A Availability Zone B
VPC CIDR: 10.0.0.0 /16 PrivateSubnet: 10.0.100.0/24 Public Subnet: 10.0.1.0/24 PrivateSubnet: 10.0.101.0/24 Webサーバ データベースサーバ Public Subnet: 10.0.0.0/24 PrivateSubnet: 10.0.50.0/24 PrivateSubnet: 10.0.51.0/24
参考:Amazon EC2 –
Windowsインスタンス
Amazon EC2で実行可能なWindowsイメージ 以下のバージョンのWindowsが利用可能 • Windows Server 2012 R2 • Windows Server 2012 • Windows Server 2008 R2 • Windows Server 2008 • Windows Server 2003 R2 Windowsのバージョンに応じたSQL Server導入済みイメージもご用意• SQL Server Express Edition(無料) • SQL Server Web Edition(時間課金)
• SQL Server Standard Edition(時間課金)
参考:インスタンスへ RDP ログオン
必要なもの • インスタンス起動時に作成したキー ペア名に対応する秘密鍵ファイル • インスタンスに割当てたPublic IPア ドレス RDPログオン方法 • 接続先ホスト:インスタンスに割当 てた Public IP アドレス • ログインユーザ名: Administrator • 接続方法:パスワード方式 (秘密鍵ファイルにより復号)参考:Amazon RDS
構築 • 数クリック or APIでDBサーバを操作 • 初期費用無し、時間単位の従量課金 親和性 • 6種類のエンジンをサポート • 既存アプリケーションの変更不要 運用 • 可用性向上のための機能 • モニタリング、バックアップ、パッチ、スケー リング機能を提供 セキュリテイ • VPC、セキュリティグループ、暗号化等に対応 実行環境設計 実行環境構築実行環境を構築する
作業内容 利用するツール 設計に従って必要であれば事前に VPC、サブネット、セ キュリティ グループ、ルート テーブルなどを構築 マネージメント コンソール 必要であれば データベース インスタンスを構築 マネージメント コンソール アプリケーションのデプロイ環境を構築 AWS Elastic Beanstalk実行環境を構築する
実行環境設計 実行環境構築 作業内容 利用するツール 設計に従って必要であれば事前に VPC、サブネット、セ キュリティ グループ、ルート テーブルなどを構築 マネージメント コンソール 必要であれば データベース インスタンスを構築 マネージメント コンソール アプリケーションのデプロイ環境を構築 AWS Elastic BeanstalkAWS Elastic Beanstalk の活用
開発環境、検証環境、本番環境の構築 Elastic Beanstalk のマネージメント コンソールの「新しいアプ リケーションの作成」で Windows 上の IIS (ウェブサーバー) 環境を構築可能 RDS SQL Server の構築も可能Visual Studio からElastic Beanstalk の環境へアプリケーション のデプロイが可能
Demo:
Publish to AWS from
Visual Studio
Visual Studio からデプロイ
新しいアプリケーション環境を作成
アプリケーション名と環境名を指定し、URLを確認
Visual Studio からデプロイ
コンテナ タイプ、インスタンス タイプ、キーペアを指定 VPC の指定、ローリング デプロイの指定が可能 シングル インスタンス環境を選択した場合、オートス ケールグループは作成 されるが構成されない RDS を選択することも 可能。RDS へのアクセス 用セキュリティ グループ が設定されるVisual Studio からデプロイ
VPC を選択し、ELB 用、EC2 インスタンス用のサブネッ トを選択する(事前に作成しておく必要がある) ELB 用のサブネットはパブリック、EC2 インスタンス用 サブネットはプライベート サブネットを指定 実行環境設計 実行環境構築Visual Studio からデプロイ
ローリング デプロイの設定(割合、台数指定)
環境構成情報のアップデート時にサービスを維持する台 数を指定可能
Visual Studio からデプロイ
アプリケーションとリソース モニタ サービスへ許可する 権限のロールを指定
Visual Studio からデプロイ
アプリケーションのオプションを指定
ビルド構成、ランタイム バージョン、App Path など Key、Value を指定すると web.config に設定される
Visual Studio からデプロイ
AWS へパブリッシュ
AWS CodeDeploy 構成ファイルを生成可能、AWS Deployment Tool(AWSDeploy.exe) でデプロイ可能
継続的デプロイの実施
• アカウント取得 • 開発環境 セットアップ 開発環境構築 • 実行環境設計 • 実行環境構築 実行環境構築 •パイプライン設 計 •デプロイの実施 継続的デプロイ の実施継続的デプロイの目的
自動化することのメリット 手作業によるミスを防ぐ 自動化による高速化でリリース スピードも向上 エラーを早期に発見 常に動作するアプリケーション 自動化は一度始めたら戻りたくない パイプライン設計 デプロイの実施継続的デプロイのための設計
目的に合わせてパイプラインを設計する AWS CodePipeline AWS CodeDeploy Amazon S3 GitHub Beta Stagesource Stage Deploy Stage
Amazon S3 AWS CodeDeploy テスト環境 本番環境
AWS CodeCommit/AWS CodePipeline/AWS CodeDeployの位置づけ Monitor Provision Deploy Test Build Code Elastic Beanstalk OpsWorks Cloud Watch Cloud Formation Code Deploy Code Commit Code Pipeline パイプライン設計 デプロイの実施
デプロイに特化したサービス
指定したグループに、指定したファイルを、指定した割合ずつ TagやAuto Scaling Groupでグループ指定
エージェントを入れれば利用可能
Pull型のデプロイ、EC2以外でも Linux & Windows対応
関連する処理をフックで実行可能
GitHub、S3 と連携して継続的デプロイを実現可能
AWS CodePipeline
ソース/ビルド/テスト/デプロイのプロセスを管理 AWS のサービスやサードパーティとの連携 GitHub、CodeCommit、S3 をソース リポジトリとして利用可 能 ビルド サーバーとして Jenkins、Solano CI と連携可能 パイプラインのバックアップ 見やすいUI デプロイ プロバイダとして OpsWorks と連携 New!AWS CodePipeline
カスタマイズ可能なワークフローエンジン パートナーやカスタムのシステムと連携 ビジュアルエディターと可視化されたステータス 継続的デリバリー、リリース自動化 Build 1) ビルド 2) Unitテスト 1) デプロイ 2) UIテストSource Beta Production
1) デプロイ 2) 負荷テスト Gamma 1) カナリア デプロイ 2) リージョン1 デプロイ 3) リージョン2 デプロイ パイプライン設計 デプロイの実施
開発のスタイルにあったワークフローを
自由に
フルマネージドなソース バージョン管理サービス Git 互換でGit 対応ツールが利用可能 データは S3 に保存され容量無制限 IAM による認証 現時点では Visual Studio 未対応 パイプライン設計 デプロイの実施
参考:AWS CodeCommit
継続的デプロイの実施
続的デプロイの設定手順 作業内容 利用するツール デプロイ先 EC2 インスタンスの作成と設定 マネジメント コンソール PowerShell AWS SDK Elastic Beanstalk CloudFormation ソース管理リポジトリの設定 GitHub CodeCommit S3 デプロイ手順の設定 CodeDeploy パイプラインの設定 CodePipeline継続的デプロイの実施
続的デプロイの設定手順 パイプライン設計 デプロイの実施 作業内容 利用するツール デプロイ先 EC2 インスタンスの作成と設定 マネジメント コンソール PowerShell AWS SDK Elastic Beanstalk CloudFormation ソース管理リポジトリの設定 GitHub CodeCommit S3 デプロイ手順の設定 CodeDeploy パイプラインの設定 CodePipelineAWS CodeDeploy の設定
デプロイ対象のインスタンスにエージェントをインス トール
<powershell>
New-Item -Path c:¥temp -ItemType "directory" -Force
Read-S3Object -BucketName aws-codedeploy-us-east-1/latest ` -Key codedeploy-agent.msi `
-File c:¥temp¥codedeploy-agent.msi
Start-Process -Wait -FilePath c:¥temp¥codedeploy-agent.msi ` -WindowStyle Hidden
</powershell>
テスト環境
AppSpec File (appspec.yml)
デプロイ パス、カスタム権限、ステージごとの実行スクリプ トを指定可能 version: 0.0 os: windows files: - source: ¥ destination: C:¥inetpub¥wwwroot hooks: ApplicationStop: - location: .¥RemoveApp.ps1 timeout: 30 ApplicationStart: - location: .¥InstallApp.ps1 timeout: 300 ValidateService: -location: .¥ValidateInstall.ps1 timeout: 300 パイプライン設計 デプロイの実施 files どのファイルをどこに配置するか指定 hooks 以下の黄色のEventで実行する処理を指定AWS CodeDeploy の設定
デプロイするアプリケーションを作成
継続的デプロイの実施
続的デプロイの設定手順 パイプライン設計 デプロイの実施 作業内容 利用するツール デプロイ先 EC2 インスタンスの作成と設定 マネジメント コンソール PowerShell AWS SDK Elastic Beanstalk CloudFormation ソース管理リポジトリの設定 GitHub CodeCommit S3 デプロイ手順の設定 CodeDeploy パイプラインの設定 CodePipelineAWS CodePipeline の設定
AWS CodePipeline の設定
ソース リポジトリを選択 GitHub を選択した場合、 認可後にレポジトリと ブランチを選択 パイプライン設計 デプロイの実施AWS CodePipeline の設定
ビルド プロバイダとデプロイメント プロバイダの選択 AWS CodeDeploy を選択した場合は、アプリケーショ ン名とデプロイメント グループを選択
AWS CodePipeline の設定
AWS サービス ロールを作成、ロールの許可をクリック
確認後、パイプラインの作成をクリックするとパイプラ インが作成され実行を開始
エラー発生時の確認
パイプライン設計 デプロイの実施 パイプライン実行中にエラーが発生した場合は、パイプ ラインの実行を停止 Details をクリックすると 実行の詳細へのリンクを表示 するダイアログが表示されるエラー発生時の確認
デプロイ ステータス を表示 イベントの表示リンク をクリックすると イベントの内容が表示 されるAWS Codepipeline デモ
エラー発生でパイプランを停止する エラーの発生したイベントの確認
Demo:
まとめ
Windows 開発者のための AWS 導入手順は3つのステッ プ 開発環境の構築 実行環境の構築 継続的デプロイの実施 AWS が提供するサービス、ツールを上手く利用するこ とで早く簡単に環境構築が可能に 自動化によって継続的デプロイ on AWS を!参考資料
【.NET Developer Blog】ASP.NET Core の探索 パー ト1: GitHub からデプロイする
http://aws.typepad.com/sajp/2016/05/aspnet-core-part1.html
【.NET Developer Blog】ASP.NET Core の探索 パー ト2: 継続的デリバリ
http://aws.typepad.com/sajp/2016/05/aspnet-core-part2.html
AWS Black Belt Online Seminarのご案内
AWSJ の Tech メンバーがAWSに関する様々な事を日本語で紹 介・解説する無料のオンラインセミナー
AWSについてもっと勉強したい方にオススメ!
VPC、サブネットなどの構築
VPCウィザードを開始
VPC、サブネットなどの構築
VPC、サブネットなどの構築
必要な追加のサブネットを作成
VPC、サブネットなどの構築
CloudFormationの活用
CloudFormer で既存環境から CloudFormation Template を取 得
テンプレートを編集して CloudFormation で新たな環境の構 築を自動化
提供されているサンプル テンプレートの活用
Windows Feature and Role サンプル テンプレート Windows Active Directory サンプル テンプレート
AWS Tools for Windows Powershell から実行することも可能 AWS SDK for .NET を利用したC#プログラミングによる環境 構築も可能
CloudFormer インスタンスの作成
CloudFormation で CloudFormer のインスタンスを作成
Choose a template で CloudFormer を選択すると
Specify an Amazon S3 template URL にテンプレートのURLが表示される
その状態で Specify an Amazon S3
CloudFormer インスタンスの作成
実行環境設計 実行環境構築 Stack名を入力し、CloudFormer インスタンスにログインするため のパスワードとユーザー名を入力 し、Nextをクリック オプションでタグと値を入力CloudFormer インスタンスの作成
CloudFormer インスタンスの作成
実行環境設計 実行環境構築EC2 マネジメント コンソールで起動したインスタンス のDNS名(またはIPアドレス)を確認
ブラウザで CloudFormer を開く
CloudFormation Template の取得
実行環境設計 実行環境構築Template Description を入力して Continue をクリック コピー元となるVPCを選択
CloudFormation Template の取得
サブネットとインターネット ゲートウェイを確認 サマリー画面まで進める
CloudFormation Template の取得
実行環境設計 実行環境構築自動生成された CloudFormation Template を S3 に保存 保存したファイルをダウンロードしてVPC、サブネット のアドレスと名前を編集する
CloudFormation stack の 作成と実行
CloudFormation で Create stack を選択し、先程編集した CloudFormation Template を選択
CloudFormation stack の 作成と実行
実行環境設計 実行環境構築RDS Server for SQL Server を構築
RDS Server for SQL Server を構築
実行環境設計 実行環境構築RDS Server for SQL Server を構築
RDS スナップショットを取得
実行環境設計 実行環境構築AWS Command Line Interface (CLI)
•“aws”という名前の単一コマンドでAWSサービスを操作可能 •プラットフォームや開発言語などが限定されない
Windows, Linux, Mac, Unixなど •S3用にはsyncなどの便利な機能あり
AWS Tools for Windows PowerShell
• “AWSPowerShell”モジュール内のコマンドレットから、 ほとんどのAWSサービスを操作可能
スナップショットから RDS を復元
実行環境設計 実行環境構築AWS Tools for WIndows Powershell で自動化
Restore-RDSDBInstanceFromDBSnapshot ` -DBInstanceIdentifier "aspnetdemotest" ` -DBSnapshotIdentifier "aspnetdemoprod-snapshot" ` -AutoMinorVersionUpgrade $TRUE ` -AvailabilityZone "ap-northeast-1a" ` -DBInstanceClass "db.m4.large" ` -DBSubnetGroupName "aspnet45demotest-dbsubnet" ` -PubliclyAccessible $TRUE ` -StorageType "gp2"