JAWS-UG Meets Windows (JAWS Days 2017)
-
Upload
amazon-web-services-japan -
Category
Internet
-
view
995 -
download
4
Transcript of JAWS-UG Meets Windows (JAWS Days 2017)
JAWS-UG Meets Windows~Windows開発者およびインフラエンジニアのためのDev&Ops on AWS~
2017年3月11日
アマゾン ウェブ サービス ジャパン株式会社
ソリューションアーキテクト
渡邉源太/福井厚
自己紹介
• 名前- 渡邉源太
• 所属- アマゾンウェブサービスジャパン株式会社
• 技術本部レディネスソリューション部
• ソリューションアーキテクト
• エンタープライズのお客様支援を経て、現在はAWSのエンタープライズアプリケーションを担当
自己紹介 名前
福井 厚(ふくい あつし)fatsushi@
所属
アマゾン ウェブ サービス ジャパン株式会社
技術統括本部エンタープライズ ソリューション部
ソリューション アーキテクト
前職
エンタープライズ アプリケーション開発コンサルタント
好きなAWSサービス
AWS Code シリーズ、AWS IoT、Lambda(C#)
Dev & Ops
DevOpsとは?
DevOps = このライフサイクル高速化の効率
開発者 顧客
releasetestbuild
plan monitor
デリバリーパイプライン
フィードバックループ
ソフトウェア開発のライフサイクル
DevOpsタスクとAWSサービスの位置付け
MonitorProvisionDeployTestBuildCode
Elastic Beanstalk
OpsWorks for Chef Automate OpsWorks Stacks
CloudWatch
CloudFormation
CodeDeploy
CodeCommit
Code Pipeline
Code Build
Infrastructure as code
7
codeversion control
code review
integrate
“インフラを全てソフトウェアで”
Infrastructure as Codeのメリット
• サーバーの台数が増えても構築に時間がかからない
• コード=手順書となるのでコードを常にメンテナンスしておけば良い
• 手順を抜かしたり手順を間違う心配がない
• 同じコードを動かせば同じサーバーが出来上がる
• コードで記述されているので再利用が容易である
• 他のプロジェクトでコードを使いまわすことで無駄を省ける
AWSでのInfrastructure as Code
Java Python (boto) PHP .NET Ruby Node.js
AWS Tools for Windows
PowerShell
AWS CLI
JavaScript
CloudFormation OpsWorks ElasticBeanstalk
CloudFormation
• AWS環境の Infrastructure as Code を実現
• What’s New: YAML対応 / ChangeSet
10
MonitorProvisionDeployTestBuildCode
作成 / 削除
AWS CloudFormationAWS リソースの
作成 / 削除
テンプレート スタック
- 作成するリソースの基本的な定義
- JSON テキストファイル
- AWS リソースの集合
AWS環境の設定管理&オーケストレーションサービス
自動化のためのコマンドラインツール
AWS Command Line Interface (CLI)
• “aws”という名前の単一コマンドでAWSサービスを操作可能
• プラットフォームや開発言語などが限定されないWindows, Linux, Mac, Unixなど
• S3用にはsyncなどの便利な機能あり
AWS Tools for Windows PowerShell
• “AWSPowerShell”モジュール内のコマンドレットから、ほとんどのAWSサービスを操作可能
• PowerShellの強力なシェル機能が利用できる
(参考)Pro PowerShell for Amazon Web Services: DevOps for the AWS Cloud
• Create, manage, and terminate Windows servers in the cloud
• Manage storage options including backup and recovery
• Configure a virtual network including subnets and route tables
• Secure your servers using security groups and access control lists
• Use Auto Scaling to respond to changing conditions
• Deploy SQL Server using Relational Database Service
• Use Simple Storage Service (S3) to reliably store and archive data
• Control access to resources using Identity and Access Management (IAM)
https://www.amazon.co.jp/Pro-PowerShell-Amazon-Web-Services-ebook/dp/B00HG2CQ3O/
Automation
AWSでも既存の運用が可能
• 既存の運用ルールをAWSに適用する事は可能
- WikiやExcelが悪という訳ではない
- ドキュメントへの情報記録、管理は必要になる
- 運用コストはあまり減らない
• 一部のツールは代替も可能
- CloudWatchでの監視、AWS Configでの変更管理、etc…
Amazon EC2 Systems Managerを使うことで
• 運用コストを減らしてビジネスに注力
• 運用の品質安定、標準化が可能
• オンプレミス、クラウドの管理を一元化
• セキュアなオペレーションを実現
Amazon EC2 Systems Manager
Amazon EC2、またはオンプレミスで実行されるWindows、Linuxに対してシステムの自動構成と継続的な管理を可能にする一連の機能
Amazon EC2
Amazon EC2Systems Manager
Run Command
リモートから任意のコマンド実行が可能
ソフトウェアのインストール、パッチング、アップデート
ユーザーの追加・削除、サービスの起動・停止、状態取得
JSONベースのドキュメントでコマンド、タスクを定義
定義済みのドキュメントも提供、コミュニティ版もあり
実行結果はS3に保存可能、実行状態に合わせてSNSを使って通知
SSH、RDPの接続ポートを閉じる事でセキュアに運用
管理作業をリモートから実行
17
Run Commandによるドメイン参加
• 指定したインスタンスのドメインへの参加
• コマンド実行のステータス確認
$domainJoinCommand=Send-SSMCommand -InstanceId i-xxxxxxxx -DocumentName AWS-JoinDirectoryServiceDomain -Parameter @{directoryId= 'd-xxxxxxxxx'; directoryName = 'corp.example.com'}
Get-SSMCommand -CommandId $domainJoinCommand.CommandId -Details $true
Nano ServerへのIISのインストール
• パラメータの指定とコマンドの実行
• コマンド実行のステータス確認
$commands = @(‘Install-PackageProvider –Name NuGet –ForceSave-Module –Path “$env:ProgramFiles¥WindowsPowerShell¥Modules” –Name NanoServerPackage –MinimumVersion 1.0.0.0Import-PackageProvider NanoServerPackageInstall-NanoServerPackage –Name Microsoft-NanoServer-IIS-PackageStart-Service W3SVC ‘) $runPSCommand=Send-SSMCommand -InstanceId i-xxxxxxxx -DocumentNameAWS-RunPowerShellScript -Parameter @{‘commands’ = $commands}
Get-SSMCommand -CommandId $runPSCommand.CommandId
Patch Manager
Patch Baselineを使ってカスタムパッチポリシーを定義
例:クリティカルなパッチが提供された場合には1日後に適用
パッチ適用は指定したMaintenance Window内で実施
実施されたパッチングの結果はレポートされる
インストールされたパッチ、スキップ、失敗したパッチ等
重要なアップデートやゼロデイ脆弱性への対応を自動化、時間を短縮
ベースラインを定義してWindowsのパッチを適用
20
Patch Manager
• Patch Baselineで適用する(しない)ルールを定義
• パッチが提供されてから待たせる日時を指定
• 対象OSバージョンを指定
21
Patch Manager
• 作成したBaselineをMaintenance Windowsで指定
- Targets → Register new targetsから設定
- インスタンス個別、タグ指定、Patch Groupで指定
Container
コンテナとは何か?
• OS仮想化
• プロセス隔離
• イメージ
• 自動化Server
Guest OS
Bins/Libs Bins/Libs
App2App1
コンテナを使用したDevOps
• コンテナにアプリ・ミドルウェア・設定が含まれる
• DevとOpsにおける環境の整合が不要
• 本番と同じ構成で開発およびテストが可能
• Opsはコンテナ稼働環境のみ管理すればよい
Build Test Production
Source
Application Image
Provision
Config
Windowsコンテナ
• Windows Serverコンテナ
- プロセスと名前空間の分離テクノロジを使用してアプリケーションを分離
- Windows Server 2016 Base with Containers AMIを用意
• Hyper-Vコンテナ
- 高度に最適化された仮想マシンで各コンテナを実行
- EC2上では実行できない
Windows Serverコンテナの実行
• Dockerのインストール
• Dockerコンテナの実行
Install-Module -Name DockerMsftProvider -Repository PSGallery -ForceInstall-Package -Name docker -ProviderName DockerMsftProviderRestart-Computer -Force
docker run microsoft/iis
Windows Server 2016 インスタンスでの Docker コンテナの競合
• Windows Server 2016インスタンスでDockerを実行するためには、”Microsoft Windows Server 2016 Base with Container” AMIを使用する必要がある
• EC2のインターナルCIDR(172.31.0.0/16)とDocker用のCIDR(172.16.0.0/12)がコンフリクトするのをふせぐためdaemon.jsonで172.17.0.0/16を指定している
Server
Guest OS
Bins/Libs Bins/Libs
App2App1
1台のサーバ上でDockerを扱うのは簡単
しかし、複数台のクラスタ上で管理するのは困難
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
AZ 1 AZ 2
AZ 3
Amazon EC2 Container Service
コンテナ管理をあらゆるスケールで
柔軟なコンテナの配置 AWSの基盤との連携
Docker
Task
Container Instance
Amazon
ECS
Container
ECS Agent
ELB
Internet
ELB
User / Scheduler
API
Cluster Management Engine
Task
Container
Docker
Task
Container Instance
Container
ECS Agent
Task
Container
Docker
Task
Container Instance
Container
ECS Agent
Task
Container
AZ 1 AZ 2
Key/Value Store
Agent Communication Service
Amazon ECS – Windowsコンテナ(Beta)
• Amazon EC2 Container Service (ECS)でWindowsコンテナをパブリックベータとしてサポート
- Amazon ECS Container AgentをGitHub上に公開( https://github.com/aws/amazon-ecs-agent )
- Windowsコンテナを実行するためのCloudFormationテンプレートも提供
• 注意点
- Linuxコンテナクラスタとの混在はできない
- タスクのためのIAMロールに追加の設定が必要
- Windows ServerのDockerイメージは比較的大きいためダウンロードにはより多くの時間とストレージ容量が必要
for Developer
• 他のシステムとの統合テスト
• ロードテスト• UIテスト• 侵入テスト
リリースプロセスの4つの主なフェーズ
ソース ビルド テスト 運用
• .javaファイルなどのソースコードをチェックイン
• 新しいコードのピアレビュー
• コードのコンパイル
• ユニットテスト• スタイルチェッ
カー• コードメトリック• コンテナイメージ
の作成
• 本番環境にデプロイ
リリースプロセスのレベル
ソース ビルド テスト 運用
継続的インテグレーション
継続的デリバリ
継続的デプロイメント
継続的デリバリのメリット
開発者の
生産性を改善
バグをすばやく
検出して対処
アップデートの
配信を高速化
ソフトウェアの
リリースプロセスを
自動化
継続的デリバリ
==
開発者がより幸せに!
https://www.flickr.com/photos/cannnela/4614340819/
AWS Code シリーズ
Source Build Test Production
ソフトウェアリリースフェーズ
Source Build Test Production
AWS CodeCommit
ソフトウェアリリースフェーズ
AWS Code シリーズ
Source Build Test Production
AWS CodeBuild
ソフトウェアリリースフェーズ
AWS Code シリーズ
Source Build Test Production
Third Party
Tooling
ソフトウェアリリースフェーズ
AWS Code シリーズ
Source Build Test Production
AWS CodeDeploy
ソフトウェアリリースフェーズ
AWS Code シリーズ
Source Build Test Production
EC2 On-Prem
AWS CodeDeploy
ソフトウェアリリースフェーズ
AWS Code シリーズ
Source Build Test Production
Third Party
Tooling
AWS CodeCommit AWS CodeBuild AWS CodeDeploy
AWS CodePipeline
ソフトウェアリリースフェーズ
AWS Code シリーズ
Storing your code
セキュア、スケーラブル、マネージドなGitソース管理
スターンダードなGit ツールが利用可能
Amazon S3のスケーラビリティ, 可用性, 堅牢なストレージを利用
顧客独自のキーによる保存暗号化
レポジトリサイズの上限なし
Post commit hooks で SNS/Lambdaを呼び出せる
AWS CodeCommit
クラウドにおけるソース管理
Secure Fully
managed
High
availability
Store
anything
AWS CodeCommit
git pull/push CodeCommit
GitオブジェクトはAmazon S3で管理
GitインデックスはAmazon
DynamoDBで管理
暗号化キーはAWS KMSで管理
SSH or HTTPS
Build & test your application
https://secure.flickr.com/photos/spenceyc/7481166880
完全なマネージドのビルドサービスでソースコードのコンパイル、実行、テスト、ソフトウェアパッケージの生成をサポート
継続的なスケールと同時複数ビルドの実行
Dockerイメージによってニーズにマッチするカスタムなビルド環境を構築可能
利用したコンピュータリソース/分のみの支払い
CodePipelineやJenkinsとの統合が可能
AWS CodeBuild
どのように動作するのか?
1. ソースコードのダウンロード
2. 一時的なコンテナ内でbuildspecで構成されたコマンドを実行(ビルドごとに新規に作成される)
3. マネジメント コンソールとCloudWatch Logs にビルドの出力結果が送信される
4. 生成されたアーティファクトをS3バケットにアップロード
Deploying your applications
https://secure.flickr.com/photos/simononly/15386966677
あらゆるインスタンスに対するコードのデプロイメントを自動化
アプリケーションの複雑なアップデートに対処
アプリケーションのデプロイ中のダウンタイムを回避
言語やオペレーティングシステムに依存せずに、Amazon EC2やオンプレミスサーバーにデプロイ
サードパーティツールやAWSとの統合
AWS CodeDeploy
*Gray events are non-scriptable
Lifecycle Hooks
version: 0.0os: linuxfiles:
- source: /destination: /var/www/html
permissions:- object: /var/www/html
pattern: “*.html”owner: rootgroup: rootmode: 755
hooks:ApplicationStop:
- location: scripts/deregister_from_elb.shBeforeInstall:
- location: scripts/install_dependencies.shApplicationStart:
- location: scripts/start_httpd.shValidateService:
- location: scripts/test_site.sh- location: scripts/register_with_elb.sh
• ELBへのインスタンスの追加と削除
• 依存パッケージのインストール• Apacheの起動• デプロイの成功を確認• 他にも!
• アプリケーションファイルと設定ファイルをそれぞれのディレクトリに送信
• 特定のディレクトリとファイルのアクセス許可を設定
appspec.ymlの例
v2 v2 v2 v2 v2 v2
1つずつ
半分ずつ
すべて一度に
v2 v2 v2 v1 v1 v1
v2 v1 v1 v1 v1 v1 エージェント
開発デプロイグループ
または本番デプロイグループ
デプロイの作業量とグループの選択
エージェント
エージェント エージェント エージェント
エージェント エージェント エージェント
Orchestrating build and deploy with a pipeline
https://www.flickr.com/photos/seattlemunicipalarchives/12504672623/
アプリケーションのすばやく信頼できるアップデートを可能にする継続的デリバリサービス
ソフトウェアリリースプロセスのモデル化と見える化
コードが変更されるたびにコードをビルド、テスト、デプロイ
サードパーティツールやAWSとの統合
AWS CodePipeline
Source
SourceGitHub
Build
JenkinsOnEC2Jenkins
Deploy
JavaAppElastic Beanstalk
パイプラインステージ
アクション
トランジション
CodePipeline
MyApplication
8. ビルドアーティファクトを取得
EC2インスタンス
CodePipeline
Source
SourceGitHub
Build
JenkinsOnEC2Jenkins
Deploy
JavaAppElastic Beanstalk
ソースアーティファクト
S3
ビルドアーティファクト
S3
5. ソースアーティファクトを取得
1. 変更を取得
6. ビルドアーティファクトを格納
3. ジョブをポーリング
4. ジョブを承認
7. 成功を通知
9. ビルドアーティファクトをデプロイ Elastic Beanstalk
Webコンテナ
Javaアプリ
MyApplication
AWS サービス統合
Source Invoke Logic Deploy
AWS Elastic Beanstalk
Amazon S3 AWS CodeDeployAWS Lambda
AWS CodeBuildAWS CodeCommit
AWS OpsWorks
AWS CloudFormation
AWS Lambda for C#とは
• .NET Core で動作
- Win32 API や COMコンポーネントは呼べません
• Visual Studio に統合された環境を利用できます
- AWS Tools for Visual Studio 最新版をインストールしてください
• dotnet CLIベースの開発も可能です
- Mac や Linux 上で開発できます
64
Lambda関数ハンドラ(C#)
• クラスの静的またはインスタンス メソッドとして定義可能
• Contextオブジェクトを利用する場合は、メソッド パラメータとしてILambdaContext型を指定
65
returnType handler-name(inputType input, ILambdaContext context)
{ ... }
C# Lambdaの作成
• C#のメソッドをLambda関数として実行するためには、AWS Lambdaに対してハンドラ文字列を渡す必要がある
- ”アセンブリ::タイプ::メソッド”
66
AWS Lambda C# Project Template
67
AWS Labmda C# Blue Print
68
Publish to AWS Lambda
69
Publish to AWS Lambda
70
ローカル環境でLambda C#コードのデバッグ
71
Demo
72
Let‘s develop Serverless Application!!
73
AWS CodePipeline, AWS CodeBuild, Amazon ECR, AWS CloudFormationを利用したAmazon ECSへの継続的デプロイメント
http://amzn.to/2l1PMyh
Dev ♥ Ops
AWS – Windows Users Meetup
https://awswinuser.connpass.com/
77