IaC を CI/CD パイプラインに統合する

AWS でのデプロイの自動化

Dunieski Otano

Amazon Web Services Solutions Architect

コード優先、インフラは後回し

code-first

  • コードは CodePipeline でデプロイ、インフラは手動更新
  • 開発者は Lambda をスケール、運用担当は SQS キューをリサイズ
  • コードとインフラのずれが障害の原因に
  • CloudFormation を同じパイプラインに組み込む
AWS でのデプロイの自動化

パイプラインアクションとしての CloudFormation

pipeline-action

  • CodePipeline はCloudFormation デプロイアクションをサポート
  • パイプラインはテンプレートアーティファクトをアクションに渡す
  • モード: CREATEUPDATE、DELETEONLY、REPLACE_ON_FAILURE、CHANGE_SET_REPLACE / EXECUTE
  • ソース、ビルド、アプリデプロイの各アクションと並行して実行
AWS でのデプロイの自動化

典型的なエンドツーエンドパイプライン

typical

  • ソース: Git push でパイプラインを起動
  • ビルド: テンプレートとアプリのアーティファクトを生成
  • インフラのデプロイ: CloudFormation がスタックを作成・更新
  • アプリのデプロイ: CodeDeploy が新バージョンを配布
AWS でのデプロイの自動化

スタック失敗時の自動ロールバック

  • 更新失敗時は自動的に最後の正常な状態へロールバック
  • パイプラインステージが失敗し、後続ステージを停止
  • 第1章で設定した障害アラートが自動的に発火

automatic

AWS でのデプロイの自動化

モジュール化テンプレート向けのネストされたスタック

  • ネストされたスタックは型AWS::CloudFormation::Stackとして宣言
  • 2,000行のテンプレートを再利用可能なモジュールに分割
  • 親スタックがパラメータを渡し、出力を読み取る
  • 各モジュールは親の中で独立してデプロイ

nested

AWS でのデプロイの自動化

マルチアカウント・マルチリージョン向け StackSets

  • StackSetは1つのテンプレートを多数のアカウントとリージョンにデプロイ
  • セキュリティベースライン、ガードレール、共有インフラに有効
  • テンプレートを書き換えずにスタックインスタンスを追加・削除
  • 中央管理、ローカルデプロイ

stackset

AWS でのデプロイの自動化

適切な構成を選ぶ

right-shape

  • 単一スタック: 小規模アプリ、単一環境
  • ネストされたスタック: 大規模テンプレート、モジュール構成
  • StackSets: 同一テンプレート、多数のアカウントとリージョン
  • 3つとも CodePipeline と相性が良い
AWS でのデプロイの自動化

練習しましょう!

AWS でのデプロイの自動化

Preparing Video For Download...