Presentation Title Here

Similar documents
Presentation Title Here

PowerPoint プレゼンテーション

Presentation Title Here

AWS Deck Template

Presentation Title Here

サーバーレスアプリケーションのための CI/CD パイプライン構築 

AWS Deck Template

PowerPoint Presentation

Startup_on_AWS_usecases_StartupDay

PowerPoint Presentation

Presentation Title Here

PowerPoint Presentation

Presentation Title Here

AWS のコンテナ管理入門(Amazon EC2 Conatainer Service)

Slide 1

AWS 上でのサーバーレスアーキテクチャ 入 門 AWS Black Belt Online Seminar 2016 アマゾンウェブサービスジャパン株式会社 ソリューションアーキテクト清 水崇之 , Amazon Web Services, Inc. or its Aff

よくある問題を解決する~ 5 分でそのままつかえるソリューション by AWS ソリューションズビルダチーム

Presentation Title Here

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

PowerPoint Presentation

C# 開発者必見、Docker コンテナへの継続的デプロイメント on AWS ~CodeCommit, CodeBuild, CodePipeline, CloudFormation, ECR, ECS を活用した CI/CD ~

Presentation Title Here

Presentation Title Here

PowerPoint Presentation

スピーカースライド作成前の確認シート例

AWS 認定 DevOps エンジニア - プロフェッショナルサンプル試験問題 1) あなたは Amazon EBS ボリュームを使用する Amazon EC2 上で実行されているアプリケーションサーバ ー向けに 自動データバックアップソリューションを導入する業務を担当しています 単一障害点を回避し

Presentation Title Here

PowerPoint Presentation

AWS Black Belt Online Seminar AWS OpsWorks アマゾンウェブサービスジャパン株式会社 ソリューションアーキテクト 舟崎健治

_AWS-Blackbelt-Organizations

ナビタイムサービスにおける、Amazon ECS を活用したシステム移行 ~『乗換NAVITIME』での移行事例 ~

PowerPoint Presentation

PowerPoint Presentation

クックパッドのテスト自動化

SIOS Protection Suite for Linux v9.3.2 AWS Direct Connect 接続クイックスタートガイド 2019 年 4 月

更新履歴 Document No. Date Comments 次 D JP 2017/05/01 初版 1. 概要 はじめに 情報源 A10 Lightning Application Delivery Service(ADS) 導 構成 動作概要 構築概要 2. 事

IBM 次世代クラウド・プラットフォーム コードネーム “BlueMix”ご紹介

Presentation Title Here

Oracle SOA Suite 11gコンポジットに対するSOASchedulerの構成

PowerPoint Presentation

AWS Deck Template

AWS CodePipeline​ 内に位置している - ユーザーガイド

Microsoft PowerPoint - AWS-RatesSystem-JP_ pptx

Server Backup Manager 5.0 Debian および Ubuntu システムへの Server Backup Free のインストール 1. APT-GET をしてServer Backup Free をインストールする 2. Server Backup Free のインストール

【AWS Tech 再演】Amazon EC2 Systems Manager によるハイブリッド環境の管理

10年オンプレで運用したmixiをAWSに移行した10の理由

Presentation Title Here

使える! IBM Systems Director Navigator for i の新機能

PowerPoint プレゼンテーション

GitLab + Dokku で作る CI/ CD 環境 Kazuhiro NISHIYAMA 第 78 回 Ruby 関西勉強会 2017/07/29 Powered by Rabbit 2.2.0

Microsoft Word - AWSBlueprint final.docx

クラウド内の Java - 動画スクリプト 皆さん こんにちは Steve Perry です 私たちが作成した人事アプリケーションを覚えていますか? 今回は そのアプリケーションをクラウド内で実行しましょう コードは GitHub の

IRIS Cloud manager 2.indd

FUJITSU Cloud Service for OSS 「コンテナサービス」 ご紹介資料

aws_summit_abematv_fresh

開発者向けクラウドサービスを活用したリッチな Web/ モバイル アプリケーションの構築手法 杉達也 Fusion Middleware 事業統括本部担当ディレクター [2013 年 4 月 9 日 ] [ 東京 ]

はじめに AWS Glueは現在Preview中のサービスです 本資料に記載した内容はGA 正式リリース ま でに予告なく変更される可能性があります Twitterのハッシュタグは です 2

Oracle ESB レッスン03: ESB CustomerData SOAP

サーバレスで王道 Web フレームワークを使う方法

Nintendo Switch(TM)向け プッシュ通知システム 「NPNS」

PowerPoint プレゼンテーション

Slide 1

利用約款別紙 SkyCDP for AWS 基本サービス仕様書 この仕様書は SkyCDP for AWS の基本サービスに関する内容 方法について記述したものです 尚 SkyCDP for AWS オプションサービスをご利用のお客様は各 SkyCDP for AWS オプションサービスのご契約内容

Docker/Kubernetes実践コンテナ開発入門

Microsoft Active Directory用およびMicrosoft Exchange用Oracle Identity Connector

実践 Infrastructure as Code


利用者

Microsoft PowerPoint - Tutorial_2_upd.ppt

_BlackBelt_ApplicationAuthPatterns

統合運用管理ソフトウェア Systemwalker 総合カタログ

PlayStation(TM)Network とコンテナ, CICD

JACi400のご紹介~RPGとHTMLで簡単Web化~

Blue Asterisk template

5-3- 応統合開発環境に関する知識 1 独立行政法人情報処理推進機構

Microsoft Word - tutorial3-dbreverse.docx

OpenAM 9.5 インストールガイド オープンソース ソリューション テクノロジ ( 株 ) 更新日 : 2013 年 7 月 19 日 リビジョン : 1.8

Agileイベント・フレームワークとOracle BPELを使用したPLMワークフローの拡張

PowerPoint Presentation

Server and Cloud Platform template

AWS Well-Architected フレームワークによるクラウド ベスト プラクティス

Oracle Solaris 仮想環境とプロビジョン環境の構築

Sharing the Development Database

DIGNO® ケータイ ユーザーガイド

Install / Protect / Monetize InstallShield 全機能 データシート プロフェッショナルなインストールの作成 PREMIER PROFESSIONAL EXPRESS MSIX パッケージ サポート フレームワークをサポート Windows Installer(

2D/3D CAD データ管理導入手法実践セミナー Autodesk Vault 最新バージョン情報 Presenter Name 2013 年 4 月 2013 Autodesk

Red Hat Enterprise Linuxのcron(8)デーモンにデフォルト定義されたtmpwatch命令の動作による、WebOTXのトラブル対処方法

Agenda! 事前準備

_DockerとAmazon_ECSでDevOpsを進化させる_public

クラウドネイティブにセキュリティを 活用する!API を連携して実装する方法

Oracle BPEL Process Managerを使用したJD Edwards EnterpriseOne顧客信用情報の問合せ

使用する前に

PowerPoint Presentation

スライド 1

SAS_user_2015_fukiya02

Yahoo! JAPANにおけるOpenStack on Kubernetes導入までの道のり

Architecting for the Cloud -クラウドにおけるアーキテクチャの設計原則

Symantec AntiVirus の設定

開発ツールのコラボレーション機能を検証する

============================================================

Transcription:

AWS Black Belt Online Seminar Deployment on AWS アマゾンウェブサービスジャパン株式会社 ソリューションアーキテクト千葉悠貴 2017.08.22

Name : 千葉悠貴 ( ちばゆうき ) Role : Solutions Architect Segment : Internet Media Favorite Service : CloudFormation

AWS Black Belt Online Seminar とは AWSJのTechメンバがAWSに関する様々な事を紹介するオンラインセミナーです 火曜 12:00~13:00 主にAWSのソリューションや 業界カットでの使いどころなどを紹介 (例 IoT 金融業界向け etc.) 今回だけ異なります 水曜 18:00~19:00 主にAWSサービスの紹介や アップデートの解説 (例 EC2 RDS Lambda etc.) 開催曜日と時間帯は変更となる場合がございます 最新の情報は下記をご確認下さい オンラインセミナーのスケジュール&申し込みサイト https://aws.amazon.com/jp/about-aws/events/webinars/ 3

内容についての注意点 本資料では 2017 年 8 月 22 日時点のサービス内容および価格についてご説明しています 最新の情報は AWS 公式ウェブサイト (http://aws.amazon.com) にてご確認ください 資料作成には十分注意しておりますが 資料内の価格と AWS 公式ウェブサイト記載の価格に相違があった場合 AWS 公式ウェブサイトの価格を優先とさせていただきます 価格は税抜表記となっています 日本居住者のお客様が東京リージョンを使用する場合 別途消費税をご請求させていただきます AWS does not offer binding price quotes. AWS pricing is publicly available and is subject to change in accordance with the AWS Customer Agreement available at http://aws.amazon.com/agreement/. Any pricing information included in this document is provided only as an estimate of usage charges for AWS services based on certain information that you have provided. Monthly charges will be based on your actual use of AWS services, and may vary from the estimates provided. 4

本日のテーマ : アプリケーションデプロイメント 5

アプリのデプロイメントに必要な要素 デプロイの自動化 デプロイのヘルスチェック 失敗時のロールバック 開発 本番など複数環境への考慮 AutoScalingへの対応 6

デプロイパターン / デプロイツールの選択肢 デプロイパターン - In-Placeデプロイ - Blue/Greenデプロイ - カナリアリリース デプロイツール - CodeDeploy - CloudFormation - ElasticBeanstalk etc... 7

どのデプロイパターン / ツールを選べばいい? 8

9 Deployment Pattern

代表的なデプロイメントパターン In-Place Blue/Green カナリアリリース v1 v1 v1 v2 v1 v1 v2 v2 既存ノードのアセットを更新 (1 台ずつデプロイする場合ローリングデプロイと呼ぶ ) 新規ノードを配備し デプロイ テスト後にトラフィックを切り替え 新バージョンをデプロイした一部のノードを本番トラフィックに組み込みテストする (In-Place も Blue/Green もあり ) 10

In-Place デプロイメント デプロイ方法 既存ノードに新しいアセットを配置 Pull型(ノードが自分から新規アセットを取得)がおすすめ ロールバックは過去バージョンのアセットをIn-Placeデプロイ メリット インフラ(ノード)の新規プロビジョニングが不要 アプリケーション担当者のみで完結する v1 v1 デメリット ロールバックに時間がかかる 複数ノード間での一貫性の保持が難しい 11 v2

Blue/Green デプロイメント デプロイ方法 新規にノード(群)を作成し新しいアセットを配置 新環境でテストが通ったらトラフィックを切り替え(Swap) メリット 本番環境に昇格する環境で事前テストができる ロールバックは旧環境にSwapするだけ デメリット 一時的に追加のリソースが必要 12 v1 v2

Blue/Green Swap パターン Swap Load Balancer DNS Cutover 必要に応じて暖気申請を! Route 53 Route 53 ALB ALB ALB Target Group Target Group 切り替えが早い (DNS の TTL に依存しない ) Target Group Target Group 加重ルーティングが使える 13

Route53 加重ルーティング 同じ名前 種類のレコードセットに重みをつけて ルーティング先の頻度を決定するRoute53の機能 ユースケース A/Bテスト サーバー毎に性能の偏りがある場合 カナリアリリース Routing Policyに Weighted を選択 相対的な重みを 0-255で指定 14 http://docs.aws.amazon.com/ja_jp/route53/latest/developerguide/routing-policy.html#routing-policy-weighted

カナリアリリース デプロイ方法 本番トラフィックを部分的に新バージョンのアプリにも流し 問題 なければデプロイ範囲を広げていく In-Place 少数の既存ノードのアセットを更新する Blue/Green 加重Routingでトラフィックを部分的にGreenに流す ロールバックはカナリアホストを切り離すだけ メリット 本番のトラフィックでテストするため サービスの全停止を防ぐことができる 15 v1 v1 v2

16 Deployment Tools

AWS が提供する様々なデプロイツール / サービス CodeDeploy Elastic Beanstalk OpsWorks Stacks CloudFormation SAM AMI 17

アプリケーション実行プラットフォーム EC2 Elastic Beanstalk OpsWorks Stacks ECS Lambda 18

デプロイメントツールの選択肢 EC2( 仮想マシン ) Docker コンテナサーバーレス Platform EC2 Elastic Beanstalk OpsWorks Stacks ECS Lambda CodeDeploy Deployment Tool CloudFormation + Custom AMI Elastic Beanstalk OpsWorks Stacks CloudFormation + ECS/ECR CloudFormation (SAM) 19

デプロイメントツールの選択肢 EC2( 仮想マシン ) Docker コンテナサーバーレス Platform EC2 Elastic Beanstalk OpsWorks Stacks ECS Lambda CodeDeploy Deployment Tool CloudFormation + Custom AMI Elastic Beanstalk OpsWorks Stacks CloudFormation + ECS/ECR CloudFormation (SAM) 20

AWS CodeDeploy アプリデプロイに特化したサービス 指定したグループに 指定したファイルを 指定した割合ずつデプロイ 安全にデプロイするための様々な機能を提供 In-Place, Blue/Greenに対応 エージェントを入れれば利用可能 Deployment groups Agent Agent Agent Agent Agent Agent Agent Dev Staging Production Pull型のデプロイ Linux & Windows対応 デプロイに関連するアプリ再起動などの 処理をフックスクリプトで実行可能 21 v1, v2, v3 AWS CodeDeploy

CodeDeploy - デプロイの流れ 配布物をアップロード S3 またはGitHubリポジトリ) CodeDeployに デプロイを指示 CodeDeploy Agentが配布物をダ ウンロードし AppSpecファイルに 従ってデプロイを実行 CodeDeploy Agentが ポーリングしデプロイ指示を検知

CodeDeploy - リビジョンとロールバック リビジョン ソースコード Web ページ 実行ファイル スクリプトなどと AppSpec ファイルをまとめたアーカイブ - Linux: zip, tar, compressed tar - Windows: zip S3 バケットや GitHub リポジトリに保存 ロールバック 以前デプロイされたリビジョンを再デプロイできる デプロイメントが失敗した際に自動的にロールバックするようにデプロイメントグループを設定することが可能

CodeDeploy - デプロイメントグループ アプリケーションをデプロイする単位を指定 リビジョンとグループを指定してデプロイする 下記のいずれか または両方で指定可能 - EC2 タグ - Auto Scaling グループ カナリアリリースにも利用可能 v2.0 v1.2 v1.1 v2.0 v1.2 v1.1 v2.0 v1.2 v1.1 Dev Test Prod

CodeDeploy - デプロイメント構成 One-at-a-time Min. healthy hosts = 99% [Custom] Min. healthy hosts = 75% Half-at-a-time Min. healthy hosts = 50% All-at-once Min. healthy hosts = 0 v2 v1 v1 v1 v1 v1 v1 v1 v2 v2 v1 v1 v1 v1 v1 v1 v2 v2 v2 v2 v1 v1 v1 v1 v2 v2 v2 v2 v2 v2 v2 v2

CodeDeploy - Blue/Green デプロイ Green 環境へのデプロイとCLB/ALBでのSwapをCodeDeployが実行 Green 環境は以下の2パターンをサポート - 既存のAuto Scalingグループのコピー - 事前に構築済みのGreen 環境用のインスタンス群 ( デプロイメントグループ ) ALB 2. Swap 0. ASG Copy 1. Deploy Target Group Target Group 26

デプロイメントツールの選択肢 EC2( 仮想マシン ) Docker コンテナサーバーレス Platform EC2 Elastic Beanstalk OpsWorks Stacks ECS Lambda CodeDeploy Deployment Tool CloudFormation + Custom AMI Elastic Beanstalk OpsWorks Stacks CloudFormation + ECS/ECR CloudFormation (SAM) 27

CloudFormation + Custom AMI CloudFormation は AWS リソースをテンプレート化しデプロイするサービス v2 Step1: 新規ノードに最新のアセットをデプロイし Custom AMI を作成 - アプリを含めた AMI からインスタンスごとデプロイ - アプリのデプロイサービスではないため In-Place デプロイはできない v1 v2 Step2: CloudFormation で CustomAMI から Green 環境 (AutoScalingGroup など ) を作成 CodeDeploy との組み合わせも可 - MW までを AMI 化し アプリは起動時に CodeDeploy で In-Place デプロイ Step3: Blue 環境から Green 環境へ Swap (Swap 作業も CLI/SDK を利用した自動化を推奨 ) 28

AMI にどこまでいれるか? Linux J2EE アプリコード Log4J Spring Hibernat e Struts Tomcat Apache Linux J2EE アプリコード Log4J Spring Hiberna te Struts Tomcat Apache EC2 L i n u x J E E Y o u r C o d e L o g 4 J S p r i n gh i b e r n a t e S t r u t s T o m c a t A p a c h e L i n u x J E E Y o u r C o d e L o g 4 J S p r i n gh i b e r n a t e S t r u t s T o m c a t A p a c h e L i n u x J E E Y o u r C o d e L o g 4 J S p r i n gh i b e r n a t e S t r u t s T o m c a t A p a c h e L i n u x J E E Y o u r C o d e L o g 4 J S p r i n gh i b e r n a t e S t r u t s T o m c a t A p a c h e アプリコード Amazon S3 Log4J Spring Struts Linux J2EE Hiberna te Tomcat Apache Linux J2EE アプリコード Amazon S3 Hiberna te Tomcat Log4J Spring Struts Apache EC2 L i n u x J E E H i b e r n a t e T o m c a t A p a c h e L i n u x J E E H i b e r n a t e T o m c a t A p a c h e L i n u x J E E H i b e r n a t e T o m c a t A p a c h e EC2 Linu x JEE Linu x JEE Chef Chef スクリプト Java AMI Java スタック Java AMI AMI 起動時取得起動時取得起動時取得 [1] 全部入り AMI [2]Golden Image [3] 最小構成 AMI 29

AMI にどこまでいれるか? 方式メリットデメリット [1] 全部入り AMI 同一性の確保起動時間が早い デプロイ毎に AMI を作り直す必要がある [2]GoldenImage あとはアプリコードのみ最新を取得すれば良く扱いやすい [3] 最小構成 AMI 柔軟に中身を変更できる 起動処理に時間がかかる 場 合によっては外部ライブラリ が取得できないことも 30

Custom AMI の継続的インテグレーション 31 https://aws.amazon.com/jp/blogs/news/how-to-create-an-ami-builder-with-aws-codebuild-and-hashicorp-packer/

デプロイメントツールの選択肢 EC2( 仮想マシン ) Docker コンテナサーバーレス Platform EC2 Elastic Beanstalk OpsWorks Stacks ECS Lambda CodeDeploy Deployment Tool CloudFormation + Custom AMI Elastic Beanstalk OpsWorks Stacks CloudFormation + ECS/ECR CloudFormation (SAM) 32

Elastic Beanstalk 定番構成の構築 アプリデプロイの自動化サービス 速く簡単にアプリケーションをデプロイ可能 インフラストラクチャの準備 運営からアプリ ケーションスタックの管理まで自動化 Auto Scalingによりコストを抑えながらスケー ラビリティを確保 Java, PHP, Ruby, Python, Node.js,.NET, Docker, Go, カスタムプラットフォームに対応 33

Elastic Beanstalk - デプロイの選択肢 方式失敗時の影響時間ダウンタイム ELB 暖気 DNS 切替ロールバックデプロイ先 All at once ダウンタイム発生 ダウンタイム発生 不要無し再デプロイ既存 Rolling 1 バッチ分だけサービスアウト ( バッチサイズに依存 ) 無し不要無し再デプロイ既存 Rolling with additional batch 最初のバッチであれば最小 ( バッチサイズに依存 ) 無し不要無し再デプロイ新規 + 既存 Immutable 最小 無し不要無し再デプロイ新規 Blue/Green (URL swap) Route53 による切替 最小 無し必要有り URL swap 新規 最小 無し必要有り URL swap 新規 34 http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features.deploy-existing-version.html

デプロイメントツールの選択肢 EC2( 仮想マシン ) Docker コンテナサーバーレス Platform EC2 Elastic Beanstalk OpsWorks Stacks ECS Lambda CodeDeploy Deployment Tool CloudFormation + Custom AMI Elastic Beanstalk OpsWorks Stacks CloudFormation + ECS/ECR CloudFormation (SAM) 35

OpsWorks Stacks アプリケーションやデータベースの構成管理サービス Chef のレシピを使って デプロイや運用タスクを自動化 ライフサイクルイベントにより動的な構成変更への対応が可能 アプリデプロイに特化した機能が使いたい場合は CodeDeploy と併用も可能 AWS OpsWorks EC2 インスタンス上の OpsWorks エージェント スタック LB レイヤー Web レイヤー DB レイヤー 36

OpsWorks Stacks - デプロイ方法 OpsWorksのスタックコマンドをインスタンスを指定して実行 Deploy コマンド (アプリケーション用) Update Custom Cookbooks コマンド (クックブック用) ローリングデプロイやBlue/Greenデプロイなどの仕組みはOpsWorks の機能にはないため 自動化したい場合個別の作り込みが必要 ローリングデプロイ ヘルスチェックを確認しながら1台づつDeployコマンドを実行する Blue/Green 新規スタック作成 SwapまでをCloudFormationなどで自動化する 37 http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/best-deploy.html

デプロイメントツールの選択肢 EC2( 仮想マシン ) Docker コンテナサーバーレス Platform EC2 Elastic Beanstalk OpsWorks Stacks ECS Lambda CodeDeploy Deployment Tool CloudFormation + Custom AMI Elastic Beanstalk OpsWorks Stacks CloudFormation + ECS/ECR CloudFormation (SAM) 38

CloudFormation + ECS/ECR ECS サービスの更新では 新しい Task 定義で新規タスクをデプロイし古いタスクを削除していく CloudFormation でタスク定義 ECS サービスの作成 / 更新をおこなうことでデプロイ自動化が可能 Cluster Step1: Dockfile から Docker イメージを Build し ECR に Push Step2: CloudFormation のテンプレートでタスク定義内の ECR のイメージタグを更新し UpdateStack (ECS サービスの初回作成も CloudFormation で実施する ) Step3: ECS のサービス更新がおこなわれ 新規タスクがローリングデプロイされる 39

ECS Green テストとカナリアリリース ECS のマネージド更新も Blue/Green デプロイ ( コンテナが入れ替わる ) だが 自動的にローリングアップデートされてしまう Green 環境でのテストやカナリアリリースをおこないたい場合 別途 ECS サービスを作成する 切替方式は EC2 と同様 DNS Cutover か Swap LoadBalancer で ALB Route 53 ALB カナリアリリースしたい場合 Route53 の加重ルーティングがおすすめ Target Group Target Group 40 https://aws.amazon.com/jp/blogs/news/bluegreen-deployments-with-amazon-ecs/ https://github.com/awslabs/ecs-canary-blue-green-deployment

デプロイメントツールの選択肢 EC2( 仮想マシン ) Docker コンテナサーバーレス Platform EC2 Elastic Beanstalk OpsWorks Stacks ECS Lambda CodeDeploy Deployment Tool CloudFormation + Custom AMI Elastic Beanstalk OpsWorks Stacks CloudFormation + ECS/ECR CloudFormation (SAM) 41

Serverless Application Model サーバレスアプリに最適化したAWS CloudFomationの拡張 サーバレスアプリ用の新たなリソースタイプ - 関数 - API - テーブル CloudFormationがサポートしているすべてのものをサポート 既存のファンクションをSAMテンプレートとしてエクスポート可能 オープンな仕様 (Apache 2.0) 42 http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-ct-example-use-app-spec.html

SAM デプロイの流れ Step1 : SAM の表記方法で CloudFormation テンプレートを作成する Step2 : AWS CLI の cloudformation package コマンドでパッケージ化し S3 バケットに格納する Step3 : AWS CLI の cloudformation deploy コマンドでパッケージをデプロイする AWSTemplateFormatVersion: '2010-09-09 Transform: AWS::Serverless-2016-10-31 Resources: FunctionName: Type: AWS::Serverless::Function Properties: Handler: handler Runtime: runtime CodeUri: s3://bucketname/codepackage.zip aws cloudformation package --template-file /path_to_template/template.yaml --s3-bucket bucket-name --output-template-file packaged-template.yaml aws cloudformation deploy --template-file /path_to_template/packaged-template.yaml --stack-name my-new-stack --capabilities CAPABILITY_IAM 43

44 Continuous Deployment

CI/CD パイプライン Source Build Test Deploy 継続的インテグレーション 継続的デリバリー 継続的デプロイメント

AWS Code Services AWS CodeCommit セキュア スケーラブルな Git 互換のリポジトリサービス スタンダードな Git Tool からアクセス可能 Push などのイベントをトリガーに SNS/Lambda を呼び出し可能 AWS CodeBuild スケーラビリティに優れたビルドサービス ソースのコンパイル テスト パッケージ生成をサポート Docker イメージの作成も可能 AWS CodePipeline リリースプロセスのモデル化と見える化を実現 カスタムアクションによる柔軟なパイプライン作成が可能 様々な AWS サービスや 3rd パーティ製品との統合をサポート

CodePipelineがサポートするデプロイパターン(2017年8月時点) EC2(仮想マシン) Dockerコンテナ サーバーレス Platform EC2 Elastic Beanstalk OpsWorks Stacks Elastic Beanstalk OpsWorks Stacks ECS Lambda CodeDeploy Deployment Tool CloudFormation + Custom AMI 47 CloudFormation + ECS/ECR CloudFormation (SAM) OpsWorks Stacksは東京リージョン未対応

EC2の継続的デプロイメント 3.CodeBuildがソースをビルドし ビルドアーティファクトを S3バケットに格納 1.git pushで リポジトリを更新 AWS CodeBuild S3 Bucket EC2 Developers AWS CodeCommit AWS CodePipeline 2.CodePipeline が更新を 検知しパイプラインを開始 48 AWS CodeDeploy 4.CodeDeployがEC2に 新バージョンのアプリケーション アセットをデプロイ

ECSの継続的デプロイメント 3.CodeBuildがDockerイメージを ビルドしECRへプッシュ 1.git pushで リポジトリを更新 AWS CodeBuild Amazon ECS/ECR 4.CloudFormationが ECRのDockerイメージを ECSクラスタに展開 Developers AWS CodeCommit AWS CodePipeline 2.CodePipeline が更新を検知し パイプラインを開始 AWS CloudFormation 49 Amazon ECS https://aws.amazon.com/jp/blogs/news/continuous-deployment-to-amazon-ecs-using-awscodepipeline-aws-codebuild-amazon-ecr-and-aws-cloudformation/

サーバーレスアプリの継続的デプロイメント 3.CodeBuildがpackageコマンド でパッケージ化し 生成したパッ ケージをS3バケットに格納 1.git pushで リポジトリを更新 AWS CodeBuild Developers AWS CodeCommit S3 Bucket Serverless Application AWS CodePipeline 2.CodePipeline が更新を 検知しパイプラインを開始 AWS CloudFormation 50 https://d0.awsstatic.com/events/jp/2017/summit/devday/d4t7-6.pdf 4.CloudFormationの Create/Execute Changeset を実行しSAMパッケージをデプロイ

51 AWS CodeStar

AWS CodeStar AWS 上にアプリケーションをすばやく開発 ビルド デプロイ AWS 上での開発をわずか数分間で開始 チームをまたがった開発をセキュアに ソフトウェアデリバリの管理を容易に 様々なプロジェクトテンプレートから選択

Step1 : プロジェクトテンプレート選択

Step1 : プロジェクトテンプレート選択

Step2 : 開発ツールセットアップ

Complete!

セットアップ内容 サンプルアプリケーション - EC2 or Beanstalk or Lambda CodeCommitリポジトリ CodeBuildビルドプロジェクト デプロイツール - CodeDeploy or Beanstalk or CloudFormation CodePipeline 継続的デプロイメントパイプライン CloudWatchメトリクス プロジェクトダッシュボード

Project Dashboard CodeCommit App エンドポイント CloudWatch メトリクス JIRA 統合メニュー CodePipeline

CodeStar がサポートするデプロイパターン (2017 年 8 月時点 ) EC2( 仮想マシン ) Docker コンテナサーバーレス Platform EC2 Elastic Beanstalk OpsWorks Stacks ECS Lambda CodeDeploy Deployment Tool CloudFormation + Custom AMI Elastic Beanstalk OpsWorks Stacks CloudFormation + ECS/ECR CloudFormation (SAM) 59

60 FAQ

EC2(仮想マシン)へのデプロイ方法の選択方針は プラットフォームの選択 EC2は一番汎用性があり 新機能がすぐに使える Beanstalk, OpsWorks Stacksはアプリ MW インフラなどの構成管理を 任せられる一方 仕様や制約を受け入れる必要がある デプロイツールの選択 より アプリケーションのデプロイ に特化しているのはCodeDeployと Elastic Beanstalk アプリデプロイだけでなくインフラのプロビジョニングも考慮し CloudFormationとその他の各ツールを組み合わせで使うのがベスト 61

本番 開発など複数環境への対応は 環境変数などを利用して ソースコードから設定情報を分離する EC2(AMI) インスタンスタグ CloudFormation Parameters セクション Elastic Beanstalk.ebextensionsのnamespaceオプション OpsWorks Stacks アプリケーション環境変数 ECS タスク定義のenvironmentプロパティ(コンテナ環境変数) Lambda Lambda関数の環境変数 実装例 on EC2 タグ値に変数を指定し user-dataなどで指定した起動スクリプト 内インスタンス起動時にインスタンス内部の環境変数を書き変える インスタンスメタデータで自身のインスタンスIDを取得し describe-instanceでタグ値を確認する 62 http://docs.aws.amazon.com/ja_jp/awsec2/latest/userguide/ec2-instance-metadata.html

パスワード等の秘密情報を上手く扱うには EC2 Systems Managerのパラメータストアを使う AWS Key Management Service (KMS)の鍵を使って暗号化しな がらパラメータを保存可能 そのKMSの鍵を扱える権限を持っている場合のみ 復号しながら 取り出すことが可能 実装例 on ECS コンテナのEntrypointでパラメータストアから情報を取り出し アプリケーションに環境変数で渡す そのコンテナのタスクには 対応するKMSの鍵を操作できる権限 を持ったIAMロールを指定する 63 https://aws.amazon.com/jp/blogs/news/managing-secrets-for-amazon-ecs-applications-usingparameter-store-and-iam-roles-for-tasks/

デプロイにおけるDevとOpsの役割分担は DevとOpsの責任共有モデルを作る サービスはアプリとインフラが揃って正常に稼働する アプリ=Dev インフラ=Opsという分担はしない サービスのリリースプロセスの中で分界点を考える テスト環境まではDev 本番環境からはOpsなど 同一性が担保しやすいコンポーネントを分界点とする 64 AMI Dockerイメージ CloudFormationテンプレート Green環境

まとめ デプロイパターン AWSはBlue/Greenやカナリアリリースといったデプロイパターン をサポートするツール サービスを多数提供 Blue/Greenの切替はLBまたはDNSで実現する カナリアリリースにはRoute53の加重ルーティングを活用する デプロイツール プラットフォームに合わせて最適なツールを選択する 運用形態に合わせて複数のツールを組み合わせて最適化する 継続的デプロイ Codeサービスを活用しフルマネージドのパイプラインを構築可能 65

66 Any Questions?

参考情報 ホワイトペーパー Blue/Green Deployments on AWS AWS での継続的統合と継続的デリバリーの実践 Infrastructure as Code クラウド活用資料集 開発者ツールカテゴリ 管理ツールカテゴリ AWSのプロビジョニングからデプロイまで 67

68