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

CDK Pipelinesをざっくり理解する

Makky12
September 25, 2024

CDK Pipelinesをざっくり理解する

2024/09/25(水) 19:30~21:00開催の「JAWS-UG CDK支部 #16 ~CDK Conference 2024 Extra~」における私の発表「CDK Pipelinesをざっくり理解する」の発表資料になります。

https://jawsug-cdk.connpass.com/event/328676/

#jawsug #jawsug_cdk

Makky12

September 25, 2024
Tweet

More Decks by Makky12

Other Decks in Technology

Transcript

  1. #jawsug_cdk 自己紹介 ◼ 名前: 鈴木 正樹 (Masaki Suzuki) ◼ Job:

    クラウドアーキテクト&バックエンドエンジニア(※現職では違う) ◼ 主な活動拠点: JAWS-UG CDK支部 & 名古屋支部 ◼ 好きな技術: • AWS(特にLambda), その他サーバーレスバックエンド全般 • Infrastructure as Code(特にAWS CDK), CI/CD (GitHub Actions, AWS CodePipeline) etc. • 好きなAWSサービス:AWS CDK, Lambda ◼ SNS: • @makky12 (SUZUKI Masaki@クラウドエンジニア) • @makky12.bsky.social • https://github.com/smt7174/ • http://makky12.hatenablog.com/ 3
  2. #jawsug_cdk CDK Pipelinesとは ◼ AWS CDKで、 AWS CodePipelineを利用したアプリケーションのデプロイパイプ ラインを構築するためライブラリ(L3コンストラクタ) ◼

    CodeCommit, CodeBuildなどを個別に定義することなく、よりシンプルにデプロ イパイプラインの構築が可能 ◼ 「aws-cdk-lib.pipelines」モジュールに属する(「aws-cdk-lib.aws_codepipeline」 とは別) 7
  3. #jawsug_cdk CDK Pipelinesとは a 8 CodePipeline GitHubにCDK定義がpushされたら、それをトリガにアプリを デプロイするパイプラインが作れれば便利じゃん! →これがCodePipeline CDK

    Pipeline CodeBuild CodeCommit CodeDeploy CloudFormation VPC EC2 etc. GitHub CDK定義(アプリ) CodePipeline アプリ CodeBuild CodeCommit CodeDeploy CloudFormation VPC EC2 CodePipeline etc. GitHub アプリ定義(CDK) CodePipeline アプリ アプリだけじゃなく、上記のパイプラインもCDK定義で まとめて作れるようにすればいいじゃん! →これがCDK Pipeline
  4. #jawsug_cdk CDK Pipelinesの特徴(≒メリット) 10 作成がシンプル ・ 自分でCodePipelineを1から定義するより、シンプルに作成が可能 常に最新定義でデプロイ ・ CodePipelineの設定に変更があった場合、先にCodePipelineの定義を更新する(※)

    ・ これにより、常に最新のパイプラインでアプリケーションをデプロイ可能 依存関係の考慮が不要 ・ 設計者がCodePipelineスタックとアプリケーションスタックの依存関係を考慮して…とい うことが不要 ・すべて CDK Pipelines側で解決してくれる ※これが「self-mutate」。これが実行されるとCodePipelineで「UpdatePipeline」ステージが実行される
  5. #jawsug_cdk 実際に業務で使って困った点(≒デメリット) 12 CodeStar接続(※1)作成 ・ GitHubなど、AWS外部のリポジトリからソースを取得する際はCodeStar接続の作成が必要 ・ 作成が特別難しいわけではないが、多少手間がかかる(member権限では不可) パラメータの受け渡し(V1) ・

    V1ではCodePipelineスタック⇔アプリケーションスタック間で、コンストラクタ引数などによるパラ メータの受け渡しができなかった(ステージが違うので。これはCodePipelineの仕様) ・ V2には「パイプライン変数」があるので、これを利用すれば可能かも self-mutate何も分からん ・ 「self-mutate」が具体的に何なのか…が分かりにくい ・ self-mutateが実行されると、肝心のアプリケーションのデプロイ完了までの時間が長くな る(※2) ※1:CodeStarプロジェクト自体は7月末でサポート終了しましたが、CodeStar接続は現在も引き続き使用可能です ※2:self-mutateを無効にする事も可能(ただしあくまで開発用途であり、基本的には「有効」が推奨されています)
  6. #jawsug_cdk まとめ(ユースケース) ◼ CDK Pipelinesを使用すると、CodePipelineを用いたアプリケーションのデプロイ パイプラインをよりシンプルな定義で構成できる ◼ デプロイパイプラインであまり複雑な処理をせず、かつCDK定義をシンプルにし たい場合は良いかも(逆に、色々と処理を行いたい場合は不向きかも) ※参考:

    AWS CDKのチーム開発でCDK Pipelinesの導入を諦めた話 ◼ 「CodeStar接続の作成」「self-mutate」など分かりにくい点もあり、決して万能とい う訳ではない(=お約束の「銀の弾丸はない」) ◼ 導入するかどうかは、プロダクトやプロジェクト状況などから判断する(もちろん 「(CDK Pipelinesを)使用しない」という選択肢もあり) 15
  7. #jawsug_cdk 参考資料1:CDK Pipelinesのプロパティ ◼ CDK Pipelinesコンストラクタのプロパティ ◼ 「synth」のプロパティ 17 プロパティ

    説明 備考 synth(必須) CodeBuildでの挙動などを定義する 詳細は下表を参照 codePipeline 既存のCodePipelineを使用する際に指定 未指定の場合新規作成される codeBuildDefaults CodeBuildの初期値を設定 selfMutation self-mutateを有効にするかどうか 基本「true」推奨 プロパティ 説明 備考 commands(必須) 実行するコマンド 例:「npx cdk synth」など input コマンド実行対象の ファイル群(≒ソースコード) ・ ここでCodeStar接続情報を指定する ・「push時に自動でパイプライン実行するか」も設定可 installCommands インストールコマンド 例:「npm install」など primaryOutput Directory 主要ファイルが出力される フォルダ 例:「cdk.out」フォルダなど
  8. #jawsug_cdk 参考資料2:おすすめ参考サイト ◼ CDK Pipelines を使用した継続的インテグレーションとデリバリー (AWS公式) ◼ CDK Pipelines

    とは ◼ CDK Pipelines を導入した複数人開発のススメ(horsewinさんの記事) ◼ CDK Pipelineにも良いところあるんだからね・・・(カワゴエヒカルさんの記事) 18