JAWS-UG Meets Windows (JAWS Days 2017)

77
JAWS-UG Meets Windows ~Windows開発者およびインフラエンジニアのための Dev&Ops on AWS~ 2017年3月11日 アマゾン ウェブ サービス ジャパン株式会社 ソリューションアーキテクト 渡邉源太/福井厚

Transcript of JAWS-UG Meets Windows (JAWS Days 2017)

Page 1: JAWS-UG Meets Windows (JAWS Days 2017)

JAWS-UG Meets Windows~Windows開発者およびインフラエンジニアのためのDev&Ops on AWS~

2017年3月11日

アマゾン ウェブ サービス ジャパン株式会社

ソリューションアーキテクト

渡邉源太/福井厚

Page 2: JAWS-UG Meets Windows (JAWS Days 2017)

自己紹介

• 名前- 渡邉源太

• 所属- アマゾンウェブサービスジャパン株式会社

• 技術本部レディネスソリューション部

• ソリューションアーキテクト

• エンタープライズのお客様支援を経て、現在はAWSのエンタープライズアプリケーションを担当

Page 3: JAWS-UG Meets Windows (JAWS Days 2017)

自己紹介 名前

福井 厚(ふくい あつし)fatsushi@

所属

アマゾン ウェブ サービス ジャパン株式会社

技術統括本部エンタープライズ ソリューション部

ソリューション アーキテクト

前職

エンタープライズ アプリケーション開発コンサルタント

好きなAWSサービス

AWS Code シリーズ、AWS IoT、Lambda(C#)

Page 4: JAWS-UG Meets Windows (JAWS Days 2017)

Dev & Ops

Page 5: JAWS-UG Meets Windows (JAWS Days 2017)

DevOpsとは?

DevOps = このライフサイクル高速化の効率

開発者 顧客

releasetestbuild

plan monitor

デリバリーパイプライン

フィードバックループ

ソフトウェア開発のライフサイクル

Page 6: JAWS-UG Meets Windows (JAWS Days 2017)

DevOpsタスクとAWSサービスの位置付け

MonitorProvisionDeployTestBuildCode

Elastic Beanstalk

OpsWorks for Chef Automate OpsWorks Stacks

CloudWatch

CloudFormation

CodeDeploy

CodeCommit

Code Pipeline

Code Build

Page 7: JAWS-UG Meets Windows (JAWS Days 2017)

Infrastructure as code

7

codeversion control

code review

integrate

“インフラを全てソフトウェアで”

Page 8: JAWS-UG Meets Windows (JAWS Days 2017)

Infrastructure as Codeのメリット

• サーバーの台数が増えても構築に時間がかからない

• コード=手順書となるのでコードを常にメンテナンスしておけば良い

• 手順を抜かしたり手順を間違う心配がない

• 同じコードを動かせば同じサーバーが出来上がる

• コードで記述されているので再利用が容易である

• 他のプロジェクトでコードを使いまわすことで無駄を省ける

Page 9: JAWS-UG Meets Windows (JAWS Days 2017)

AWSでのInfrastructure as Code

Java Python (boto) PHP .NET Ruby Node.js

AWS Tools for Windows

PowerShell

AWS CLI

JavaScript

CloudFormation OpsWorks ElasticBeanstalk

Page 10: JAWS-UG Meets Windows (JAWS Days 2017)

CloudFormation

• AWS環境の Infrastructure as Code を実現

• What’s New: YAML対応 / ChangeSet

10

MonitorProvisionDeployTestBuildCode

作成 / 削除

AWS CloudFormationAWS リソースの

作成 / 削除

テンプレート スタック

- 作成するリソースの基本的な定義

- JSON テキストファイル

- AWS リソースの集合

AWS環境の設定管理&オーケストレーションサービス

Page 11: JAWS-UG Meets Windows (JAWS Days 2017)

自動化のためのコマンドラインツール

AWS Command Line Interface (CLI)

• “aws”という名前の単一コマンドでAWSサービスを操作可能

• プラットフォームや開発言語などが限定されないWindows, Linux, Mac, Unixなど

• S3用にはsyncなどの便利な機能あり

AWS Tools for Windows PowerShell

• “AWSPowerShell”モジュール内のコマンドレットから、ほとんどのAWSサービスを操作可能

• PowerShellの強力なシェル機能が利用できる

Page 12: JAWS-UG Meets Windows (JAWS Days 2017)

(参考)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/

Page 13: JAWS-UG Meets Windows (JAWS Days 2017)

Automation

Page 14: JAWS-UG Meets Windows (JAWS Days 2017)

AWSでも既存の運用が可能

• 既存の運用ルールをAWSに適用する事は可能

- WikiやExcelが悪という訳ではない

- ドキュメントへの情報記録、管理は必要になる

- 運用コストはあまり減らない

• 一部のツールは代替も可能

- CloudWatchでの監視、AWS Configでの変更管理、etc…

Page 15: JAWS-UG Meets Windows (JAWS Days 2017)

Amazon EC2 Systems Managerを使うことで

• 運用コストを減らしてビジネスに注力

• 運用の品質安定、標準化が可能

• オンプレミス、クラウドの管理を一元化

• セキュアなオペレーションを実現

Page 16: JAWS-UG Meets Windows (JAWS Days 2017)

Amazon EC2 Systems Manager

Amazon EC2、またはオンプレミスで実行されるWindows、Linuxに対してシステムの自動構成と継続的な管理を可能にする一連の機能

Amazon EC2

Amazon EC2Systems Manager

Page 17: JAWS-UG Meets Windows (JAWS Days 2017)

Run Command

リモートから任意のコマンド実行が可能

ソフトウェアのインストール、パッチング、アップデート

ユーザーの追加・削除、サービスの起動・停止、状態取得

JSONベースのドキュメントでコマンド、タスクを定義

定義済みのドキュメントも提供、コミュニティ版もあり

実行結果はS3に保存可能、実行状態に合わせてSNSを使って通知

SSH、RDPの接続ポートを閉じる事でセキュアに運用

管理作業をリモートから実行

17

Page 18: JAWS-UG Meets Windows (JAWS Days 2017)

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

Page 19: JAWS-UG Meets Windows (JAWS Days 2017)

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

Page 20: JAWS-UG Meets Windows (JAWS Days 2017)

Patch Manager

Patch Baselineを使ってカスタムパッチポリシーを定義

例:クリティカルなパッチが提供された場合には1日後に適用

パッチ適用は指定したMaintenance Window内で実施

実施されたパッチングの結果はレポートされる

インストールされたパッチ、スキップ、失敗したパッチ等

重要なアップデートやゼロデイ脆弱性への対応を自動化、時間を短縮

ベースラインを定義してWindowsのパッチを適用

20

Page 21: JAWS-UG Meets Windows (JAWS Days 2017)

Patch Manager

• Patch Baselineで適用する(しない)ルールを定義

• パッチが提供されてから待たせる日時を指定

• 対象OSバージョンを指定

21

Page 22: JAWS-UG Meets Windows (JAWS Days 2017)

Patch Manager

• 作成したBaselineをMaintenance Windowsで指定

- Targets → Register new targetsから設定

- インスタンス個別、タグ指定、Patch Groupで指定

Page 23: JAWS-UG Meets Windows (JAWS Days 2017)

Container

Page 24: JAWS-UG Meets Windows (JAWS Days 2017)

コンテナとは何か?

• OS仮想化

• プロセス隔離

• イメージ

• 自動化Server

Guest OS

Bins/Libs Bins/Libs

App2App1

Page 25: JAWS-UG Meets Windows (JAWS Days 2017)

コンテナを使用したDevOps

• コンテナにアプリ・ミドルウェア・設定が含まれる

• DevとOpsにおける環境の整合が不要

• 本番と同じ構成で開発およびテストが可能

• Opsはコンテナ稼働環境のみ管理すればよい

Build Test Production

Source

Application Image

Provision

Config

Page 26: JAWS-UG Meets Windows (JAWS Days 2017)

Windowsコンテナ

• Windows Serverコンテナ

- プロセスと名前空間の分離テクノロジを使用してアプリケーションを分離

- Windows Server 2016 Base with Containers AMIを用意

• Hyper-Vコンテナ

- 高度に最適化された仮想マシンで各コンテナを実行

- EC2上では実行できない

Page 27: JAWS-UG Meets Windows (JAWS Days 2017)

Windows Serverコンテナの実行

• Dockerのインストール

• Dockerコンテナの実行

Install-Module -Name DockerMsftProvider -Repository PSGallery -ForceInstall-Package -Name docker -ProviderName DockerMsftProviderRestart-Computer -Force

docker run microsoft/iis

Page 28: JAWS-UG Meets Windows (JAWS Days 2017)

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を指定している

Page 29: JAWS-UG Meets Windows (JAWS Days 2017)

Server

Guest OS

Bins/Libs Bins/Libs

App2App1

1台のサーバ上でDockerを扱うのは簡単

Page 30: JAWS-UG Meets Windows (JAWS Days 2017)

しかし、複数台のクラスタ上で管理するのは困難

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

Page 31: JAWS-UG Meets Windows (JAWS Days 2017)

Amazon EC2 Container Service

コンテナ管理をあらゆるスケールで

柔軟なコンテナの配置 AWSの基盤との連携

Page 32: JAWS-UG Meets Windows (JAWS Days 2017)

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

Page 33: JAWS-UG Meets Windows (JAWS Days 2017)

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イメージは比較的大きいためダウンロードにはより多くの時間とストレージ容量が必要

Page 34: JAWS-UG Meets Windows (JAWS Days 2017)

for Developer

Page 35: JAWS-UG Meets Windows (JAWS Days 2017)

• 他のシステムとの統合テスト

• ロードテスト• UIテスト• 侵入テスト

リリースプロセスの4つの主なフェーズ

ソース ビルド テスト 運用

• .javaファイルなどのソースコードをチェックイン

• 新しいコードのピアレビュー

• コードのコンパイル

• ユニットテスト• スタイルチェッ

カー• コードメトリック• コンテナイメージ

の作成

• 本番環境にデプロイ

Page 36: JAWS-UG Meets Windows (JAWS Days 2017)

リリースプロセスのレベル

ソース ビルド テスト 運用

継続的インテグレーション

継続的デリバリ

継続的デプロイメント

Page 37: JAWS-UG Meets Windows (JAWS Days 2017)

継続的デリバリのメリット

開発者の

生産性を改善

バグをすばやく

検出して対処

アップデートの

配信を高速化

ソフトウェアの

リリースプロセスを

自動化

Page 38: JAWS-UG Meets Windows (JAWS Days 2017)

継続的デリバリ

==

開発者がより幸せに!

https://www.flickr.com/photos/cannnela/4614340819/

Page 39: JAWS-UG Meets Windows (JAWS Days 2017)

AWS Code シリーズ

Source Build Test Production

ソフトウェアリリースフェーズ

Page 40: JAWS-UG Meets Windows (JAWS Days 2017)

Source Build Test Production

AWS CodeCommit

ソフトウェアリリースフェーズ

AWS Code シリーズ

Page 41: JAWS-UG Meets Windows (JAWS Days 2017)

Source Build Test Production

AWS CodeBuild

ソフトウェアリリースフェーズ

AWS Code シリーズ

Page 42: JAWS-UG Meets Windows (JAWS Days 2017)

Source Build Test Production

Third Party

Tooling

ソフトウェアリリースフェーズ

AWS Code シリーズ

Page 43: JAWS-UG Meets Windows (JAWS Days 2017)

Source Build Test Production

AWS CodeDeploy

ソフトウェアリリースフェーズ

AWS Code シリーズ

Page 44: JAWS-UG Meets Windows (JAWS Days 2017)

Source Build Test Production

EC2 On-Prem

AWS CodeDeploy

ソフトウェアリリースフェーズ

AWS Code シリーズ

Page 45: JAWS-UG Meets Windows (JAWS Days 2017)

Source Build Test Production

Third Party

Tooling

AWS CodeCommit AWS CodeBuild AWS CodeDeploy

AWS CodePipeline

ソフトウェアリリースフェーズ

AWS Code シリーズ

Page 46: JAWS-UG Meets Windows (JAWS Days 2017)

Storing your code

Page 47: JAWS-UG Meets Windows (JAWS Days 2017)

セキュア、スケーラブル、マネージドなGitソース管理

スターンダードなGit ツールが利用可能

Amazon S3のスケーラビリティ, 可用性, 堅牢なストレージを利用

顧客独自のキーによる保存暗号化

レポジトリサイズの上限なし

Post commit hooks で SNS/Lambdaを呼び出せる

AWS CodeCommit

Page 48: JAWS-UG Meets Windows (JAWS Days 2017)

クラウドにおけるソース管理

Secure Fully

managed

High

availability

Store

anything

Page 49: JAWS-UG Meets Windows (JAWS Days 2017)

AWS CodeCommit

git pull/push CodeCommit

GitオブジェクトはAmazon S3で管理

GitインデックスはAmazon

DynamoDBで管理

暗号化キーはAWS KMSで管理

SSH or HTTPS

Page 50: JAWS-UG Meets Windows (JAWS Days 2017)

Build & test your application

https://secure.flickr.com/photos/spenceyc/7481166880

Page 51: JAWS-UG Meets Windows (JAWS Days 2017)

完全なマネージドのビルドサービスでソースコードのコンパイル、実行、テスト、ソフトウェアパッケージの生成をサポート

継続的なスケールと同時複数ビルドの実行

Dockerイメージによってニーズにマッチするカスタムなビルド環境を構築可能

利用したコンピュータリソース/分のみの支払い

CodePipelineやJenkinsとの統合が可能

AWS CodeBuild

Page 52: JAWS-UG Meets Windows (JAWS Days 2017)

どのように動作するのか?

1. ソースコードのダウンロード

2. 一時的なコンテナ内でbuildspecで構成されたコマンドを実行(ビルドごとに新規に作成される)

3. マネジメント コンソールとCloudWatch Logs にビルドの出力結果が送信される

4. 生成されたアーティファクトをS3バケットにアップロード

Page 53: JAWS-UG Meets Windows (JAWS Days 2017)

Deploying your applications

https://secure.flickr.com/photos/simononly/15386966677

Page 54: JAWS-UG Meets Windows (JAWS Days 2017)

あらゆるインスタンスに対するコードのデプロイメントを自動化

アプリケーションの複雑なアップデートに対処

アプリケーションのデプロイ中のダウンタイムを回避

言語やオペレーティングシステムに依存せずに、Amazon EC2やオンプレミスサーバーにデプロイ

サードパーティツールやAWSとの統合

AWS CodeDeploy

Page 55: JAWS-UG Meets Windows (JAWS Days 2017)

*Gray events are non-scriptable

Lifecycle Hooks

Page 56: JAWS-UG Meets Windows (JAWS Days 2017)

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の例

Page 57: JAWS-UG Meets Windows (JAWS Days 2017)

v2 v2 v2 v2 v2 v2

1つずつ

半分ずつ

すべて一度に

v2 v2 v2 v1 v1 v1

v2 v1 v1 v1 v1 v1 エージェント

開発デプロイグループ

または本番デプロイグループ

デプロイの作業量とグループの選択

エージェント

エージェント エージェント エージェント

エージェント エージェント エージェント

Page 58: JAWS-UG Meets Windows (JAWS Days 2017)

Orchestrating build and deploy with a pipeline

https://www.flickr.com/photos/seattlemunicipalarchives/12504672623/

Page 59: JAWS-UG Meets Windows (JAWS Days 2017)

アプリケーションのすばやく信頼できるアップデートを可能にする継続的デリバリサービス

ソフトウェアリリースプロセスのモデル化と見える化

コードが変更されるたびにコードをビルド、テスト、デプロイ

サードパーティツールやAWSとの統合

AWS CodePipeline

Page 60: JAWS-UG Meets Windows (JAWS Days 2017)

Source

SourceGitHub

Build

JenkinsOnEC2Jenkins

Deploy

JavaAppElastic Beanstalk

パイプラインステージ

アクション

トランジション

CodePipeline

MyApplication

Page 61: JAWS-UG Meets Windows (JAWS Days 2017)

8. ビルドアーティファクトを取得

EC2インスタンス

CodePipeline

Source

SourceGitHub

Build

JenkinsOnEC2Jenkins

Deploy

JavaAppElastic Beanstalk

ソースアーティファクト

S3

ビルドアーティファクト

S3

5. ソースアーティファクトを取得

1. 変更を取得

6. ビルドアーティファクトを格納

3. ジョブをポーリング

4. ジョブを承認

7. 成功を通知

9. ビルドアーティファクトをデプロイ Elastic Beanstalk

Webコンテナ

Javaアプリ

MyApplication

Page 62: JAWS-UG Meets Windows (JAWS Days 2017)

AWS サービス統合

Source Invoke Logic Deploy

AWS Elastic Beanstalk

Amazon S3 AWS CodeDeployAWS Lambda

AWS CodeBuildAWS CodeCommit

AWS OpsWorks

AWS CloudFormation

Page 63: JAWS-UG Meets Windows (JAWS Days 2017)
Page 64: JAWS-UG Meets Windows (JAWS Days 2017)

AWS Lambda for C#とは

• .NET Core で動作

- Win32 API や COMコンポーネントは呼べません

• Visual Studio に統合された環境を利用できます

- AWS Tools for Visual Studio 最新版をインストールしてください

• dotnet CLIベースの開発も可能です

- Mac や Linux 上で開発できます

64

Page 65: JAWS-UG Meets Windows (JAWS Days 2017)

Lambda関数ハンドラ(C#)

• クラスの静的またはインスタンス メソッドとして定義可能

• Contextオブジェクトを利用する場合は、メソッド パラメータとしてILambdaContext型を指定

65

returnType handler-name(inputType input, ILambdaContext context)

{ ... }

Page 66: JAWS-UG Meets Windows (JAWS Days 2017)

C# Lambdaの作成

• C#のメソッドをLambda関数として実行するためには、AWS Lambdaに対してハンドラ文字列を渡す必要がある

- ”アセンブリ::タイプ::メソッド”

66

Page 67: JAWS-UG Meets Windows (JAWS Days 2017)

AWS Lambda C# Project Template

67

Page 68: JAWS-UG Meets Windows (JAWS Days 2017)

AWS Labmda C# Blue Print

68

Page 69: JAWS-UG Meets Windows (JAWS Days 2017)

Publish to AWS Lambda

69

Page 70: JAWS-UG Meets Windows (JAWS Days 2017)

Publish to AWS Lambda

70

Page 71: JAWS-UG Meets Windows (JAWS Days 2017)

ローカル環境でLambda C#コードのデバッグ

71

Page 72: JAWS-UG Meets Windows (JAWS Days 2017)

Demo

72

Page 73: JAWS-UG Meets Windows (JAWS Days 2017)

Let‘s develop Serverless Application!!

73

Page 74: JAWS-UG Meets Windows (JAWS Days 2017)

AWS CodePipeline, AWS CodeBuild, Amazon ECR, AWS CloudFormationを利用したAmazon ECSへの継続的デプロイメント

http://amzn.to/2l1PMyh

Page 75: JAWS-UG Meets Windows (JAWS Days 2017)

Dev ♥ Ops

Page 76: JAWS-UG Meets Windows (JAWS Days 2017)

AWS – Windows Users Meetup

https://awswinuser.connpass.com/

Page 77: JAWS-UG Meets Windows (JAWS Days 2017)

77