Slide 1

Slide 1 text

#jawsug_cdk CDK Pipelinesをざっくり理解する Masaki Suzuki 2024/09/25 JAWS-UG CDK支部 #16 ~CDK Conference 2024 Extra~

Slide 2

Slide 2 text

#jawsug_cdk アジェンダ 1. CDK Pipelinesとは 2. CDK Pipelinesの特徴(≒メリット) 3. 実際に使って困った点(≒デメリット) 4. まとめ(ユースケース) 5. 参考資料 2

Slide 3

Slide 3 text

#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

Slide 4

Slide 4 text

#jawsug_cdk 自己紹介その2 4 • 5/17(金)発売のSoftware Design6月号にて、記事を寄稿しました • 第2特集の「実証Bun 次世代JavaScriptランタイムの実態に迫る」の第1章お よび第3章を執筆しています

Slide 5

Slide 5 text

#jawsug_cdk 注意事項 ◼ 今回の発表資料・発言内容は、すべて個人の見解・知見になります • 内容は事前に調査・検証しましたが、万が一誤りなどがあった際はご容赦願います ◼ AWSの各種サービスの詳細説明は割愛しています ◼ 本資料は、下記URLで公開しています • このスライドです 5

Slide 6

Slide 6 text

#jawsug_cdk 1. CDK Pipelinesとは

Slide 7

Slide 7 text

#jawsug_cdk CDK Pipelinesとは ◼ AWS CDKで、 AWS CodePipelineを利用したアプリケーションのデプロイパイプ ラインを構築するためライブラリ(L3コンストラクタ) ◼ CodeCommit, CodeBuildなどを個別に定義することなく、よりシンプルにデプロ イパイプラインの構築が可能 ◼ 「aws-cdk-lib.pipelines」モジュールに属する(「aws-cdk-lib.aws_codepipeline」 とは別) 7

Slide 8

Slide 8 text

#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

Slide 9

Slide 9 text

#jawsug_cdk 2. CDK Pipelinesの特徴(≒メリット)

Slide 10

Slide 10 text

#jawsug_cdk CDK Pipelinesの特徴(≒メリット) 10 作成がシンプル ・ 自分でCodePipelineを1から定義するより、シンプルに作成が可能 常に最新定義でデプロイ ・ CodePipelineの設定に変更があった場合、先にCodePipelineの定義を更新する(※) ・ これにより、常に最新のパイプラインでアプリケーションをデプロイ可能 依存関係の考慮が不要 ・ 設計者がCodePipelineスタックとアプリケーションスタックの依存関係を考慮して…とい うことが不要 ・すべて CDK Pipelines側で解決してくれる ※これが「self-mutate」。これが実行されるとCodePipelineで「UpdatePipeline」ステージが実行される

Slide 11

Slide 11 text

#jawsug_cdk 3. 実際に業務で使って困った点(≒デメリット)

Slide 12

Slide 12 text

#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を無効にする事も可能(ただしあくまで開発用途であり、基本的には「有効」が推奨されています)

Slide 13

Slide 13 text

#jawsug_cdk self-mutateについて ◼ self-mutateについては、9/7(土)開催の「JAWS-UG 四国クラウドお遍路 2024 in 高知」 にてお話をさせて頂きましたので、こちらをご参照ください。 ◼ https://speakerdeck.com/smt7174/cdk-pipelinesno-self-mutate-tutehe 13

Slide 14

Slide 14 text

#jawsug_cdk 4. まとめ(ユースケース)

Slide 15

Slide 15 text

#jawsug_cdk まとめ(ユースケース) ◼ CDK Pipelinesを使用すると、CodePipelineを用いたアプリケーションのデプロイ パイプラインをよりシンプルな定義で構成できる ◼ デプロイパイプラインであまり複雑な処理をせず、かつCDK定義をシンプルにし たい場合は良いかも(逆に、色々と処理を行いたい場合は不向きかも) ※参考: AWS CDKのチーム開発でCDK Pipelinesの導入を諦めた話 ◼ 「CodeStar接続の作成」「self-mutate」など分かりにくい点もあり、決して万能とい う訳ではない(=お約束の「銀の弾丸はない」) ◼ 導入するかどうかは、プロダクトやプロジェクト状況などから判断する(もちろん 「(CDK Pipelinesを)使用しない」という選択肢もあり) 15

Slide 16

Slide 16 text

#jawsug_cdk 5. 参考資料

Slide 17

Slide 17 text

#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」フォルダなど

Slide 18

Slide 18 text

#jawsug_cdk 参考資料2:おすすめ参考サイト ◼ CDK Pipelines を使用した継続的インテグレーションとデリバリー (AWS公式) ◼ CDK Pipelines とは ◼ CDK Pipelines を導入した複数人開発のススメ(horsewinさんの記事) ◼ CDK Pipelineにも良いところあるんだからね・・・(カワゴエヒカルさんの記事) 18

Slide 19

Slide 19 text

#jawsug_cdk ご清聴ありがとうございました 以上です