[AWS Black Belt Online Seminar] AWS Code Services Part 2レポート

AWS CodeDeploy

こんにちは、菊池です。

2017年6月28日(水)のAWS Black Belt Online Seminarを受講しましたので、レポートします。今回は AWS Code Services Part 2 ということで、3月に実施されたPart 1の後編です。

[AWS Black Belt Online Seminar] AWS Code Services レポート

前回はCode 4兄弟とも呼ばれるCodeCommit/CodePipeline/CodeDeploy/CodeBuildのうち、CodeCommitCodeBuildを中心とした内容でした。Part 2となる今回は、CodePipelineCodeDeploy、そして、4月に発表された新サービス、CodeStarがメインです。講師はアマゾンウェブサービスジャパン、ソリューションアーキテクトの福井さんでした。

セミナーのスライドはこちらです。

レポート

アジェンダは以下の通りでした。

  • CI/CDとAWS Code Series
  • AWS CodeDeploy
  • AWS CodePipeline
  • AWS CodeStar
  • まとめ

CI/CDとAWS Code Series

  • ソフトウェアを取り巻く環境の変化
    • 作成と配布はかつてないほど簡単で高速になっている
    • スタートアップが巨大企業に対抗できる
    • ダウンロードで数百万のユーザにすぐに配布できる
    • 多くの要求に応えるためには機敏性が重要
  • ソフトウェア配布モデルは大き様変わり
    • 従来:店舗販売/媒体配布
    • 現在:ダウンロード中心
  • 必要なツール
    • リリースプロセスの流れを管理
    • 不具合や潜在的な問題を正しくテスト/検査
    • デプロイ
  • リリースプロセスの4つのフェーズ(CI/CDを実現)
    • ソース
    • ビルド
    • テスト
    • 運用
  • リリースプロセスのレベル
    • 継続的インテグレーション
    • 継続的デリバリ
    • 継続的デプロイメント
  • 継続的デリバリのメリット
    • リリースプロセスの自動化
    • 生成性改善
    • バグを素早く検出して改善
    • 配信の高速化
  • AWS Codeシリーズ
    • CodePipeline
    • CodeDeploy
    • CodeCommit
    • CodeBuild
  • 継続的デリバリ=開発者がより幸せに
  • AWS Code シリーズ

aws-code-2-001

AWS CodeDeploy

  • 自動化されたデプロイメント
    • 開発/テスト/本番への完全に自動化されたデプロイメント
    • 数千台の環境にスケール可能
  • 最小のダウンタイム
    • In-place
    • Blue/Green
  • 停止とロールバック
    • 自動的または手動で停止とロールバック可能
  • センターコントロール
    • コンソール/ CLIでトラック可能
  • 容易な適用
  • デプロイとは?
    • アプリケーションやアセットの更新をサーバに反映
    • 更新されたファイル群を対象のサーバに配布
  • よくあるデプロイ手法と課題
    • Push型:FTP、rsync、git pullなど
    • 課題
      • 自動化できていない
      • デプロイサーバの負荷、シングルポイント
      • 新規サーバ構築時に対象から漏れる
      • デプロイがぶつからないように管理するのが面倒
  • よくある課題をAWS CodeDeployで解決
    • 自動的にデプロイ
    • マネージドサービス
    • AutoScalingと連携して自動デプロイ
    • AWS CodeDeployで一元管理
  • デプロイの効率化・安定化
    • 質の高いリリースのために必要不可欠
    • 効率的で安定な仕組みがあるなら使うべき

AWS CodeDeployが選択肢!

  • AWS CodeDeployワークフロー 1. リポジトリにアップロード 2. CodeDeployへデプロイ指示 3. CodeDeploy Agentがポーリング 4. Agentが配布物をダウンロード/インストールを実行

aws-code-2-002

  • AWS CodeDeployコンポーネント
    • Application
    • デプロイメント構成
    • デプロイメントグループ
    • デプロイメントタイプ
    • IAMインスタンスプロファイル
    • リビジョン
    • サービスロール
    • ターゲットリビジョン
  • Application:デプロイに対する一意な名前
    • フォルダ構成
    • アップロード
  • AppSpec File:デプロイの手順書
  • AWS CodeDeploy Agent
    • デプロイ対象のインスタンスで実行
    • サポートOS
      • Amazon Linux
      • Ubuntu Server 16.04 LTS/14.04 LTS
      • Windows Server 2016/2012 R2/2008 R2
      • RHEL 7.x
    • Open Sourceとして上記以外にも適用可能
  • デプロイメント構成
    • One-at-a-time:1台ずつ
    • Half-at-a-time:半分ずつ
    • All-at-once:全て同時に
    • Custom
  • デプロイメントグループ
    • タグのグループ
    • AutoScalingグループ
    • デプロイメントグループに対してどのリビジョンを適用するか指定
  • AWS CodeDeployとAutoScalingグループ
    • スケールアウト時に最新リビジョンが自動でデプロイ
    • デプロイメントグループにAutoScalingグループを指定するだけで利用可能
  • デプロイメントタイプ
    • In-place:アプリケーションを置き換え(ALB/CLBサポート)
    • Blue/Green:新しいインスタンスにデプロイ(2017/6/28時点ではCLBのみサポート)
  • Auto Scalingグループとの連携で注意すること
    • Auto Scalingライスサイクルフックの変更はできるだけしない
      • 構成エラーにより統合が壊れる可能性がある
      • カスタムライフサイクルが実行されるタイミングは事前決定できない
    • デプロイメントの失敗に注意
      • デプロイの失敗が一時的なエラーでない場合、開始/終了ループが発生する
    • トラブルシュート時にはAutoScalingグループから切り離す
    •  CodeDeploy Agentの開始は起動スクリプトの最後
    • 複数のデプロイメントグループに同じAutoScalingグループを割り当てない
    • デプロイ進行中にAutoScalingのスケールアウトが発生すると、作成されたインスタンスは直近のリビジョンがデプロイされる
  • IAMインスタンスプロファイル
    • 配布物を取得できるようにEC2に権限を付与
  • リビジョン
    • ソースコード/コンテンツ/実行ファイルなどとAppSpecファイルをまとめたアーカイブ
    • S3やGitHubに保存
  • サービスロール
    • CodeDeployサービスに与える権限
    • AWS各サービスの操作権限など
  • ターゲットリビジョン
    • アップロードした直近のリビジョン
    • デプロイする対象
    • 自動でプルされるリビジョン

AWS CodeDeployの料金

  • EC2へのデプロイは全て無料
    • S3を使う場合はS3の利用料
  • オンプレインスタンスへのデプロイ
    • $0.02/インスタンス/デプロイ

AWS CodePipeline

  • デプロイメントパイプラインとは
    • ソースコードからビルド、テストなどのステージを自動化したプロセス
    • スムーズなデプロイには欠かせない
  • よくある課題
    • パイプラインの設定が複雑:職人化
    • 標準化されない、再現できない
    • バックアップ:消失するとデプロイできない
  • AWS CodePipelineで解決
    • 見えやすいUIで設定可能
    • 標準化も簡単
    • マネージドサービスで消失リスクは低い

AWS CodePipeline

  • リリースプロセスを自動化
  • 一貫したリリースプロセス
  • 改善された品質でデリバリをスピードアップ
  • お気に入りのツールを利用可能
  • 進捗状況が一目瞭然

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

  • AWS CodePipelineの構成例

aws-code-2-003

aws-code-2-004

AWSサービス統合

  • ソース
    • Amazon S3
    • AWS CodeCommit
  • ビルド
    • AWS CodeBuild
  • ロジック実行
    • AWS Lambda
  • デプロイ
    • AWS CodeDeploy
    • AWS CloudFormation
    • AWS Elastic Beanstalk
    • AWS OpsWorks(現時点では東京リージョンで利用不可)
  • パートナー製品とも連携
  • Approvalアクション
    • 承認プロセス
  • Customアクション
    • 独自のアクションを追加可能

AWS CodePipelineの料金

  • 1アクティブパイプラインに$1/月
    • アクティブパイプライン:30日以上存在し、その月に1つのコード変更が発生したパイプライン
  • 無料枠
    • 1パイプライン/月

AWS CodeStar

AWS上にアプリケーションをすばやく開発・テスト・デプロイ

  • わずか数分でセットアップ
    • サンプルアプリケーション
    • CodeCommitリポジトリ
    • CodeBuildビルドプロジェクト
    • デプロイツール
    • CodePipeline継続的デプロイメントパイプライン
    • CloudWatchメトリクス
    • プロジェクトダッシュボード

AWS CodeStarの料金

  • 追加料金なし
  • プロビジョニングされたAWSリソース(EC2/Lambda実行/S3など)に対してのみ課金

まとめ

  • AWS CodeDeployは最小限のダウンタイムでデプロイの自動化が可能
  • AWS CodePipelineによってリリースプロセス全体を一貫した方法で自動化
  • AWS CodeStarでCI/CD環境をすばやく構築し、ダッシュボードで一元管理
  • 高品質なソフトウェアをインクリメンタルな開発手法で素早くリリース!

今後のオンラインセミナー

来月は、AWS ShieldやAmazon Connectといった新サービスが紹介されます。

最後に

AWSでの継続的デプロイメントを実現する、Code4兄弟について、2回のセミナーで紹介されました。

やはり注目は、一元的に環境がプロビジョニングされるCodeStarではないでしょうか。東京リージョンでの提供が待ち遠しいですね。