45
1 JAWS-UG アーキテクチャ専⾨⽀部 ハイブリッド分科会 #7 AWS Development Tools 紹介 アマゾン ウェブ サービス ジャパン株式会社 テクニカルトレーナー ⼤村幸敬 2016/07/20(7/22追記)

20160720 aws development-tools-and_hybrid_cdp

Embed Size (px)

Citation preview

1

JAWS-UG アーキテクチャ専⾨⽀部 ハイブリッド分科会 #7

AWS Development Tools 紹介

アマゾン ウェブ サービス ジャパン株式会社テクニカルトレーナー ⼤村幸敬

2016/07/20(7/22追記)

2

Caution

• この資料はハイブリッドCDP検討のためのディスカッションペーパーです

• 各サービス2015年10⽉時点の情報に2016年7⽉22⽇時点までのアップデートを加えて紹介しています

3

Agenda

• AWS Development & Operation Tools Updates– Code Commit / Code Deploy / Code Pipeline– Run Command

4

AWS Development Tools ?

5

DevOpsにおける開発サイクル

DevOps = ライフサイクルを高速化する効率の良さ

開発者 顧客

releasetestbuild

plan monitor

デリバリのパイプライン

フィードバックループ

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

6

デリバリパイプラインのセットアップ

1) ソフトウェアのデプロイを⾃動化

2) リリースプロセスを⾃動化

deploy deploy deploy deploy

development test staging production

release: source > build > test > staging > production

7

デリバリパイプラインのセットアップ

1) ソフトウェアのバージョン管理AWS CodeCommit

2) ソフトウェアのデプロイを⾃動化AWS CodeDeploy

3) リリースプロセスを⾃動化AWS CodePipeline

8

デプロイとビルド・プロビジョニングの違い

• ビルド– ソースコードから配布すべ

き成果物を⽣成する• プロビジョニング

– サーバにソフトウェアをインストール&設定

• オーケストレーション– DBやLBとのつなぎ込み

• デプロイ– アセットの更新をサーバに

反映

ソースコード

ビルドex. mvn, bundle

プロビジョニングex. chef, puppet

オーケストレーション

デプロイ

Apache, NginxRuby, JDKConfig, etc.

WEB LB

DB

Amazon Linux

9

AWS CodeCommit/AWS CodePipeline/AWS CodeDeployの位置づけ

MonitorProvisionDeployTestBuildCode

Elastic Beanstalk

OpsWorks

CloudWatch

CloudFormation

CodeDeploy

CodeCommit

CodePipeline

10

AWS CodeCommit

11

AWS CodeCommit

• Availability Zoneを跨ぎデータを冗⻑化• データは暗号化されて保存• IAMとの統合• リポジトリのサイズは無制限

git push AWS CodeCommit

GitのオブジェクトはAmazon S3

GitのインデックスはAmazon DynamoDB

暗号化鍵はAWS KMS

SSH or HTTPS

安全、スケーラブル、マネージドな、Gitソース管理

12

AWS CodeCommitの特徴

• AWSのフルマネージド– Git⽤のインスタンスを⽴ててGitを管理する必要がない– リポジトリのサイズは無制限。各ファイルは2GBまで

• 普通のGitリポジトリとして使える– 既存のリポジトリからの移⾏が容易

• AWS KMSを使って保存データは暗号化される• アクセス権をIAMでコントロールできる

– ssh公開鍵無しにAWS CLIと連携した認証も可能

13

よくある課題

• 可⽤性・冗⻑性– バージョン管理システムがダウンすると開発作業が進め

られない• 耐久性

– リポジトリが消失するとソースコードの安定版が消失• リポジトリサイズ

– 開発が⻑期にわたるとリポジトリが⼤きくなり、ディスクサイズが⾜りなくなる

• パフォーマンス– 開発規模が⼤きくなるとバージョン管理システム⾃体の

パフォーマンスが劣化

14

よくある課題をAWS CodeCommitで解決

• 可⽤性・冗⻑性→AWSのマネージドサービスで可⽤性や冗⻑性を確保

• 耐久性→データはS3に配置されるため⾼い耐久性を誇る

• リポジトリサイズ→リポジトリサイズは無制限

• パフォーマンス→パフォーマンスはスケーラブル

15

新機能:AWS CodeCommitで通知機能が利⽤可能に

– コードのプッシュ、ブランチ/タグの作成や削除に対して起動するトリガーを設定可能に

– トリガーによってSNSトピックの送信やAWS Lambdaファンクションを起動できる

– トリガーの数はリポジトリあたり最⼤10個まで

16

CodeCommit Pros/Cons for Hybrid Env.

• Pros– オンプレミス環境から利⽤可能– プライベートリポジトリとして利⽤可能

• Cons– N.Virginiaのみ利⽤可能– GitHubにあるような PullRequest 機能はない

17

AWS CodePipeline

18

デプロイメントパイプラインとは

• ソースコードからビルドやテストなどのステージを⾃動化したプロセス

• プロセスは開発チームやサービスそれぞれで異なる• スムーズなデプロイメントには⽋かせない

ソースコード

ビルド テストステージデプロイ

本番デプロイ

UAT

デプロイメントパイプライン

19

AWS CodePipeline

• カスタマイズ可能なワークフローエンジン• パートナーやカスタムのシステムと連携• ビジュアルエディターと可視化されたステータス

継続的デリバリー、リリース自動化を、Amazonの様に

Build1) ビルド2) Unitテスト

1) デプロイ2) UIテスト

Source Beta Production1) デプロイ2) 負荷テスト

Gamma1) カナリア デプロイ2) リージョン1 デプロイ3) リージョン2 デプロイ

20

よくある課題

• デプロイメントパイプラインの設定が複雑– デプロイ職⼈が⽣まれてしまう。

• 標準化されないデプロイメントパイプライン– デプロイメントパイプラインを他プロジェクトで再現できない

• デプロイメントパイプラインのバックアップ– 消失するとデプロイできなくなる

21

よくある課題をAWS CodePipelineで解決

• デプロイメントパイプラインの設定が複雑→⾒やすいUIで設定できる。もちろんCLIでも。

• 標準化されないデプロイメントパイプライン→CodePipelineなら標準化も簡単

• デプロイメントパイプラインのバックアップ→マネージドサービスで消失の可能性は低い

22

Custom Actionによる他システム連携

開発者がコミット

CodePipeline S3

カスタムアクションリソース

カスタムジョブワーカー カスタムビルドアクション

1. エージェントでポーリング2. ジョブの詳細

4. ビルドの実⾏

3. ジョブのAck

5. ジョブの成功

23

CodePipelineのLambda連携をサポート

• Integrate AWS Lambda Functions into Pipelines– CodePipelineの ActionとしてLambda Functionを設定可能– Lambda Functionの中で、テストの実施やサードパーティツー

ルとの連携など汎⽤的な処理実施可能に

24

AWS CodePipeline が AWS CodeCommitと連携

• AWS CodeCommit をソースプロバイダとして利⽤可能に• パイプラインのソース ステージで、CodeCommitのリポジト

リやブランチを選択可能

• AWS CodeCommit と連携することで、セキュアでマネージドなDevOps環境を構築可能

https://aws.amazon.com/about-aws/whats-new/2016/04/aws-codepipeline-adds-integration-with-aws-codecommit/

25

AWS CodePipeline が Failed Actionのリトライに対応

• 失敗した処理を再実⾏可能

http://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/pipelines-actions-retry.html

26

AWS CodePipeline が ⼿動承認に対応

• AWS Pipelineの各ステージに⼿動承認の機能を追加できるようになりました。これによりパイプラインが次の段階に進む前に、適切なアクセスを持つユーザーがコード変更を承認することができます。

• パイプラインがアクティブ状態の場合、⼿動承認を設定する段階に来ると実⾏が停⽌します。パイプラインが承認をリクエストしてから 7 ⽇以内に、AWS Identity and Access Management (IAM) のアクセスを持つユーザーがそのアクションを承認した場合に限り、パイプラインの実⾏が再開します。

https://aws.amazon.com/jp/about-aws/whats-new/2016/07/aws-codepipeline-adds-manual-approval-actions/

27

AWS CodePipeline Pros/Cons to Hybrid Env.

• Pros– オンプレミス環境から利⽤可能– オンプレミス環境上のテストサーバやデプロイ環境が利⽤可能

• Cons– N.Virginia, Oregon, Irelandのみ利⽤可能– 5分以上を要する処理はテストサーバやテスト環境を別途⽤意する

必要がある(5分以内ならLambdaによる実⾏が可能)

28

AWS CodeDeploy

29

デプロイとは?

• アプリケーションやアセットの更新をサーバに反映させること

• 実際には、更新されたファイル群を対象のサーバ群に配布する

Availability Zone Availability Zone

v2

30

よくあるデプロイ⼿法と課題

• Push型 – デプロイ元からデプロイ先へ– FTP, rsync, git pull– Capistrano, Fabric

• 課題– ⾃動化できていない

• ⼈間がサーバにログインしてコマンドを⼿動で実⾏している– デプロイサーバの負荷、シングルポイント– 新規サーバ構築時にデプロイ対象がわからない– 複数⼈でデプロイがぶつからない様に管理するのが⾯倒

31

デプロイの効率化・安定化

• 質の⾼いリリースのためには、必要不可⽋• 効率的で安定している仕組みがあるなら、それ

を使わない⼿はない

AWS CodeDeployが選択肢

32

AWS CodeDeploy

• 1台も数千台も同じやり⽅で• 開発環境もステージング環境もプロダクションも同じやり⽅で• ダウンタイム無くデプロイ• 中央でデプロイをコントロール・モニタリング

Staging

AWS CodeDeployv1, v2, v3

Production

Dev

自動デプロイのコーディネートを、Amazonの様に

Applicationrevisions

Deployment groups

33

AWS CodeDeploy概要• デプロイに特化したサービス

– 指定したグループに、指定したファイルを、指定した割合ずつ

– TagやAuto Scaling Groupでグループ指定

• エージェントを⼊れれば利⽤可能– Pull型のデプロイ、EC2以外でも– Linux & Windows対応

• 関連する処理をフックで実⾏可能– アプリ再起動なども⾃動化できる

Staging Production

Dev

Deployment groups

Agent Agent

Agent

Agent

Agent

Agent

Agent

AWS CodeDeployv1, v2, v3

34

Deployment config – デプロイのスピード

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

OneAtATime (1台ずつ)

HalfAtATime (半分ずつ)

AllAtOnce (全て⼀度に)※任意の割合のconfigも作成可能

35

AppSpec File – デプロイの⼿順書

• files– どのファイルをどこに

配置するか指定

• hooks– 以下の⻩⾊のEventで

実⾏する処理を指定version: 0.0os: linuxfiles:

- source: configdestination: /etc/app

- source: target/hello.wardestination: /var/lib/tomcat6/webapps

hooks:ApplicationStop:- location: deploy_hooks/stop-tomcat.sh

ApplicationStart:- location: deploy_hooks/start-tomcat.sh

36

AWS CodeDeployでやること、やらないこと

やること• ファイルをサーバに配る• hookスクリプトの実⾏

– アプリ再起動– オーケストレーション

• ELB付け外し等• これらの実⾏を中央管理

– 進捗やエラーログが、ブラウザやAPIで確認可能

やらないこと• ビルド• プロビジョニング

※いずれもhookスクリプトで実⾏できなくはないが、効率や安定性の⾯でオススメしない

37

AWS CodeDeployの料⾦

• Amazon EC2へのデプロイは全て無料– Amazon S3を使う場合は、S3の利⽤料

• オンプレミスインスタンスへのデプロイ– $0.02/インスタンス/デプロイ

38

よくある課題をAWS CodeDeployで解決

• ⾃動化できていない→もちろん⾃動的にデプロイ

• デプロイサーバの負荷、シングルポイント→マネージドサービスのためパフォーマンス、耐障害

性も気にしなくて良くなる• 新規サーバ構築時にデプロイ対象がわからない

→CodeDeployなら、AutoScalingと連動し⾃動でデプロイ• 複数⼈でデプロイがぶつからない様に管理するのが⾯倒

→AWS CodeDeployで⼀元管理

39

AWS CodeDeployによるイベント通知

• イベント通知機能– アプリケーションの展開プロセスの前、途中、あとにSNSに通知を送信するトリ

ガーを作成することが可能– トリガーは展開するインスタンス全体または、個別のインスタンスに対してセット

することができ、成功か失敗のどちらの場合でも送信可能

• トリガーとなりうるイベント– DEPLOYMENT_START – DEPLOYMENT_SUCCESS – DEPLOYMENT_FAILURE – DEPLOYMENT_STOP INSTANCE_START – INSTANCE_SUCCESS INSTANCE_FAILURE

40

AWS CodeDeploy Pros/Cons to Hybrid Env.

• Pros– オンプレ環境へデプロイ可能– 東京リージョンで利⽤可能

• Cons– オンプレミスインスタンスへのデプロイにはコストがかかる

(EC2インスタンスは無料)

41

追加:EC2 RunCommand

42

• EC2 Run Command– インスタンスへのコマンド実⾏をエージェント経由で外部から実⾏す

る機能• ソフトウェアのインストール• 特定プロセスの再起動• ログデータのアップロードなど

– IAMポリシーとロールによりコマンド実⾏の可否を制御可能– CloudTrailと連携し、Run Command経由の実⾏ログを取得可能– コンソールやCLIを使⽤して定義済みコマンドや、カスタムコマンドを

実⾏可能

EC2 Run Commandが東京リージョンに!

43

• EC2 Run CommandがAWS環境外の仮想マシンに対応しました。オンプレミスとAWS両⽅にまたがるハイブリッド環境であっても、双⽅のインスタンスへスクリプト実⾏の指⽰を出すことができます。

EC2 Run Commandがオンプレミス環境のリモート操作に対応

https://aws.amazon.com/about-aws/whats-new/2016/06/amazon-ec2-run-command-now-supports-hybrid-and-cross-cloud-management/

44

• Run Commandの実⾏状態の変化をインスタンスあるいはフリート単位でモニタリングし、リアルタイムで通知を受けることができます。これらの通知はEC2 Run Command あるいは CloudWatch Eventsでサポートされています。

EC2 Run Commandがイベントドリブンの通知をサポート

https://aws.amazon.com/jp/about-aws/whats-new/2016/07/amazon-ec2-run-command-now-supports-event-driven-notifications/

45

参考資料• AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS

CodeDeployhttp://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-2015-aws-codecommit-aws-codepipeline-aws-codedeploy

• 【AWS初⼼者向けWebinar】AWSのプロビジョニングからデプロイまでhttp://www.slideshare.net/AmazonWebServicesJapan/awswebinaraws-54198407

• AWS CodeCommit User Guidehttp://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/welcome.html

• AWS CodePipeline User Guidehttp://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/welcome.html

• AWS CodePipeline API Referencehttp://docs.aws.amazon.com/ja_jp/codepipeline/latest/APIReference/Welcome.html

• AWS CodeDeploy User Guidehttp://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/welcome.html

• AWS CodeDeploy Demohttps://www.youtube.com/watch?v=jcR9iIWdU7E