Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS CDK on CI/CD パイプライン

AWS CDK on CI/CD パイプライン

AWS CDK でシステムをデプロイできるようになったら、次にやりたいのは各環境へのデプロイ処理の自動化です。

今回は GitHub Actions を使って AWS CDK の CI/CD パイプラインを構築する際のポイント(CI および CD の実行タイミング、権限の最小化、環境変数の設定など)についてお話します。

こちらのイベントで登壇した際の資料です。
https://classmethod.connpass.com/event/286676/

CM若槻龍太

June 28, 2023
Tweet

More Decks by CM若槻龍太

Other Decks in Technology

Transcript

  1. 2 自己紹介 • 若槻龍太 • 2019年11月入社(4年目) • やっていること ◦ サーバーサイド開発(メイン)

    ◦ フロントエンド開発 ◦ モバイル開発 ◦ 各種タスクフォース参加 • 好きなAWSサービス AWS IoT TwinMaker AWS Step Functions AWS CDK
  2. 6 CI / CD って? CI(継続的インテグレーション) • ビルド、リント、ユニットテストなど CD(継続的デプロイ) •

    デプロイ、E2Eテストなど ソフトウェア開発に伴う定型的な作業を自動化 し、迅速に価値を届け続ける仕組み
  3. 8 CI/CD ツールはいろいろある • AWS Code シリーズ • CircleCI •

    GitHub Actions • GitLab CI/CD • Travis CI ⇐ 今回はこれ
  4. 9 GitHub Actions とは • GitHub の CI/CD ツール •

    GitHub とのシームレスな連携 • 豊富な機能のほとんどを Free で利用可能
  5. 12 今回しゃべるポイント 1. OIDC によるセキュリティの向上 2. キャッシュによる実行時間とコストの削減 3. Reusable Workflow

    によるワークフローの可読 性やメンテナンス性の確保 4. Environments による環境ごとのデプロイメント の容易な管理
  6. OIDC(Open ID Connet)の使い方 • IAM ロール側で、AWS と GitHub Actions Workflow

    間の OIDC 信頼をあらかじめ構成 • GitHub Actions 側に保管するのは IAM ロール のみ • AssumeRoleWithWebIdentity により取得した一 時クレデンシャルを Workflow から AWS への 接続に使用する 20 1.OIDC
  7. OIDC(Open ID Connet)の使い方 • IAM ロール側で、AWS と GitHub Actions Workflow

    間の OIDC 信頼をあらかじめ構成 • GitHub Actions 側に保管するのは IAM ロール のみ • AssumeRoleWithWebIdentity により取得した一 時クレデンシャルを Workflow から AWS への 接続に使用する 21 1.OIDC 信頼を設定する GitHub アカウント やリポジトリをきめ細かく制御できる (必要最低限の信頼を構成可能)
  8. OIDC(Open ID Connet)の使い方 • AWS と GitHub Actions Workflow 間であらかじ

    め OIDC 信頼を構成 • GitHub Actions 側に保管するのは IAM ロール のみ • AssumeRoleWithWebIdentity により取得した一 時クレデンシャルを Workflow から AWS への 接続に使用する 22 1.OIDC アクセスキーの発行は不要
  9. OIDC(Open ID Connet)の使い方 • AWS と GitHub Actions Workflow 間であらかじ

    め OIDC 信頼を構成 • GitHub Actions 側に保管するのは IAM ロール のみ • AssumeRoleWithWebIdentity により取得した一 時クレデンシャルを Workflow から AWS への 接続に使用する 23 1.OIDC 公式アクションを使って、ジョブ実行 内でのみ有効な短期間のクレデン シャルを取得可能
  10. 34 3. Reusable Workflow Workflow の yaml ファイル は長くなりがち 課題

    • ジョブの記述が長くなると、可 読性が悪くなる • ジョブやワークフローで処理 を共通化したい 長くなった Workflow ファイル
  11. 36 3. Reusable Workflow Reusable Workflow の使用 • Reusable Workflow

    (再使用可能なワークフ ロー)で処理の共通化と分離を行うことができ る ◦ 呼び出す側(caller workflow) ◦ 呼び出される側(called workflow) • 同じ called を異なるジョブ、Workflow、リポジト リから呼び出せる
  12. 41 単一の GitHub Actions Workflow から複数の環境 (development、staging、production など)にデプ ロイを行いたい 4.

    Environments https://dev.classmethod.jp/articles/github-actions-workflow-for-each-branch-into-one/ より引用
  13. 42 複数環境へのデプロイを行う上での問題 • デプロイメントの管理が複雑化してしまう ◦ 変数やシークレット ▪ デプロイ先ごとの IAM ロール管理など

    ◦ デプロイ先ごとに処理を変える ▪ production へのデプロイ時は E2E テスト をスキップなど ◦ デプロイ履歴 4. Environments
  14. 45 複数環境へのデプロイを行う上での問題 • デプロイメントの管理が複雑化してしまう ◦ 変数やシークレット ◦ デプロイ先ごとに処理を変える ◦ デプロイ履歴

    4. Environments production へのデプロイ時は E2E テストをスキップ等。 ステップごとに if 分岐を設ける などして、記述が複雑になりが ち
  15. 48 GitHub Actions の Environments を使用して、環 境ごとにデプロイメントを分離する • ブランチ保護の設定 ◦

    デプロイメントブランチ ◦ 人間によるレビュー • 環境変数、環境シークレットの設定 • デプロイメント履歴 4. Environments
  16. 49 GitHub Actions の Environments を使用して、環 境ごとにデプロイメントを分離する • ブランチ保護の設定 ◦

    デプロイメントブランチ ◦ 人間によるレビュー • 環境変数、環境シークレットの設定 • デプロイメント履歴 4. Environments 環境(Environment) ごとにブランチを対応 づけられる
  17. 50 GitHub Actions の Environments を使用して、環 境ごとにデプロイメントを分離する • ブランチ保護の設定 ◦

    デプロイメントブランチ ◦ 人間によるレビュー • 環境変数、環境シークレットの設定 • デプロイメント履歴 4. Environments Workflow の進行に、人 間によるレビューを組み 込める(※条件あり)
  18. 51 GitHub Actions の Environments を使用して、環 境ごとにデプロイメントを分離する • ブランチ保護の設定 ◦

    デプロイメントブランチ ◦ 人間によるレビュー • 環境変数、環境シークレットの設定 • デプロイメント履歴 4. Environments 環境ごとに変数、シーク レットの設定領域があ る。環境間で重複可 能!
  19. 52 GitHub Actions の Environments を使用して、環 境ごとにデプロイメントを分離する • ブランチ保護の設定 ◦

    デプロイメントブランチ ◦ 人間によるレビュー • 環境変数、環境シークレットの設定 • デプロイメント履歴 4. Environments 環境ごとに”デプロイメン ト”の実行履歴や最終ス テータスを確認できる
  20. 54 理想と現実 • 「人間によるレビュー」機能が使えるのは GitHub Enterprise プランのみ • GitHub Pro

    / Team プランを使用した開発も多 いはず • その場合は、”Pull Request のレビュー"で代用 することができます 4. Environments
  21. 56 現実(GitHub Pro / Team) 4. Environments Pull Request のレ

    ビュー"で代用した場合 の、Workflow 実行履 歴。