【レポート】 AWS の継続的インテグレーション/継続的デリバリー総まとめ!モダンアプリケーション構築のための CI/CD ベストプラクティス! #AWSSummit

AWS Summit Online 9/8 に行われた標題のセッションをレポートします。CI/CD の基礎的なところはおいといて、それを AWS 上で行うには何をどう使えばいいのか、そのベストプラクティスが紹介されました。
2020.09.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今日 (9/8) から始まりました AWS Japan Summit Online 2020。ライブ配信セッション AWS-26「AWS の継続的インテグレーション/継続的デリバリー総まとめ!モダンアプリケーション構築のための CI/CD ベストプラクティス!」を拝聴しましたのでレポートします。

概要

継続的インテグレーション/継続的デリバリー(CI/CD)は、モダンアプリケーション開発の重要なプラクティスの一つです。本セッションでは、CI/CD に利用可能な AWS の各サービスの基本から、コンテナやサーバーレスを対象とした様々なデプロイメントパターン、ベストプラクティスまでを紹介します。本セッションは、デベロッパー、運用担当、アーキテクト、PM など CI/CD に関心のある多くの方々を対象としています。

動画および資料

スピーカー

福井 厚(ふくい あつし)氏

  • アマゾン ウェブ サービス ジャパン株式会社
    技術統括本部 レディネスソリューション本部 シニアソリューションアーキテクト
    サーバーレス スペシャリスト
  • 好きな AWS サービス
    • サーバーレステクノロジー全般
    • AWS Code シリーズ、AWS Amplify

内容

  • 本セッションの目的
    • AWS 上でモダンアプリケーション開発を行う方が対象
    • CI/CD に利用可能な AWS サービスを有効活用していただく
    • CI/CD そのものについてはここでは話さない
  • Agenda
    • CI/CD に関する AWS サービス
    • CI および CD 目的と使う AWS サービス
    • 関連する AWS サービス
  • モダンアプリケーション開発のアプローチ
    • サーバーレステクノロジーで環境の管理をシンプルに
    • マイクロサービスアーキテクチャでコード変更の影響を低減
    • CI/CDで新しい高品質なサービスのデリバリーを促進
      • ↑ 本セッションではここを説明
    • Infrastructure as Codeによる自動化されたオペレーション
    • 観測性向上でリソースとアプリケーションに対する洞察力を高める
    • セキュリティとコンプライアンスで顧客とビジネスを保護
  • CI/CD に関連する AWS サービス

  • AWS IDE toolkit = 各種 IDE の中から AWS の開発を容易にするツールキット
  • AWS CodeGuru = AI によるアドバイス、パフォーマンスのプロファイルを撮ってボトルネック

継続的インテグレーション(CI)

  • ゴール
    • チェックインで自動的にリリース
    • 一貫性のある環境でコードのビルドとテスト
    • 常にデプロイ可能
    • 失敗時のフィードバックループが常に
  • AWS CodeBuild
    • フルマネージド
    • スケール・同時複数ビルド
    • 一貫したイミュータブルな環境(新規 Docker コンテナで毎回実行
    • オフィシャルなイメージに Docker と AWS CLI をインストール済み
    • Docker イメージ作成することでカスタムなビルド環境
  • Lambda/Docker buildspec

継続的デプロイメント

  • ゴール
    • 更新された変更をテスト用のステージ環境に自動的にデプロイ
    • 顧客に影響を与えることなく安全に本番環境にデプロイする
    • より迅速に顧客に展開:デプロイ頻度向上、リードタイムと失敗率の削減
  • CodePipeline
    • モデル化、視覚化
    • コード変更などのイベントを検知してパイプラインを自動実行
    • サードパーティのツールや AWS サービスと統合
  • サポートしているソース:自動的な最新ソースコード取得とリリースの開始
    • ブランチ:CodeCommit、GitHub
    • フォルダのオブジェクト:S3
    • Docker レポジトリ:ECR
  • ターゲット
    • EC2:CodeDeploy、EB、OpsWorks
    • コンテナ:CodeDeploy、ECS
    • サーバーレス:SAM,Lambda (CodeDeploy),S3,Service Catalog, Alexa Skill Kit
    • その他オンプレ、XebiaLabs へのデプロイ
  • 実行するトリガー
    • CloudWatch Events
      • スケジュール、サービスのイベント
    • サードパーティ製品への Webhook
  • CodeDeploy
    • 自動的なデプロイメント、複雑なアップデート、エラー検知による自動ロールバック

Lambda デプロイメント (SAM)

  • 関数重み付けエイリアスを利用したトラフィックのシフト
  • カナリアデプロイ、リニアデプロイ
    • カナリアデプロイ = 最初の 10 分間は 10%のトラフィックだけシフト。その後残りも
    • リニアデプロイ = 毎 10 分ごとに 10%ずつシフト
  • Validation Hook で各ステージへのデプロイ時テストを有効化、失敗時には迅速にロールバック
  • デプロイメントステータスのモニタが可能

ECS blue/green デプロイメント

  • Green タスクをプロビジョニングし、ロードバランサのトラフィックを切り替える
  • Validation Hook で各ステージへのデプロイ時テストを有効化、失敗時には迅速にBlue タスクにロールバック

重要:デプロイメントのためのコンテナイメージのタグ付け

  • latestのような名前では、未テストのコードをデプロイする結果を招く
    • スケールアウトイベントなど
  • ユニークでイミュータブルなタグ名を
    • SHA256 digest や Build ID など

IaC

  • ゴール
    • 変更を繰り返して予測可能状態にする
    • インフラの変更にコードと同じツールを使う
    • 継続的なテスト
      • 成果物の検証(ビルドステージ) - ユニットテスト、静的解析、依存ライブラリと環境のモック化、脆弱性イメージスキャン
      • 環境の検証(テストステージ) - テストエージェントとの統合、依存ライブラリ、負荷テスト・侵入テスト、成果物に対するテストの影響をモニタリング
  • SAM (AWS Serverless Application Model)
    • Lambda のデプロイに利用可能
    • オープンソースフレームワーク
    • デプロイ時に CFn に変換・展開
    • 同一テンプレート内に SAM 以外の CFn リソースを混在可能
    • SAM CLI でパッケージとデプロイ
      • pip install --user aws-sam-cli
    • CodePipeline -> CFn デプロイメントアクション
    • Jenkins -> SAM CLI プラグイン
  • AWS CDK

まとめ

  • モダンアプリ開発のアプローチに CI/CD は必須
  • AWS Code シリーズを活用。付加価値を生まない重労働を AWS にオフロード
  • 価値を生むビジネスロジックに開発リソースを集中

Appendix

セッション内ではふれられなかった情報が資料には追加されていました。ここでは標題のみご紹介します。

  • 組織がCI/CDの原則を適用する主な理由
  • CI/CDによってハイクオリティな機能を迅速にリリース
  • 自動化の価値
  • リリースプロセスのステージ
  • AWS上のモダンアプリケーション構築を学ぶ
  • AWS トレーニングと認定

所管

いわゆる初級編に当たるものが「CI/CD とは?」であるなら、本セッションはまさに実践編、「AWS で CI/CD どうする?」がまるごと理解できる内容でした。
サンプルコードも豊富に提示されていましたので、資料が公開されておりますので、是非ご参照ください。

AWS Summit Online は 9/30 まで開催です。是非ご参加ください!