Slide 1

Slide 1 text

AWS Copilotを CDKでカスタマイズする AWS CDK Conference Japan 2023 @_takahash 1

Slide 2

Slide 2 text

自己紹介 • takahash (@_takahash) • CoEのテックリード • 社内AWS基盤の運用 • ガイドライン整備 • Like • AWS CDK, AWS CLI 2

Slide 3

Slide 3 text

Agenda • AWS Copilotについて • AWS CopilotのCDK Overridesについて • まとめ 想定聴衆: AWS Copilotは触ったことないけど、 CDKはある人 3

Slide 4

Slide 4 text

AWS Copilotについて 4

Slide 5

Slide 5 text

AWS Copilotとは • コマンドラインからコンテナ環境や CI/CDパイプライン等を対話形式 で容易に作成可能 • 次スライド以降に利用イメージ • マニフェスト(manifest.yml)に よる宣言的なアーキテクチャの定義 が可能 AWS App Runnerまたは Amazon ECS on AWS Fargate上の コンテナアプリケーションのビルド、リリース、運用のためのCLIツール 注: Amazon ECSはAmazon Elastic Container Serviceの略称です 5 AWS Copilot

Slide 6

Slide 6 text

copilot app init # アプリケーションの作成 $ copilot app init [--domain example.com] # アプリケーション名を指定 Application: app 6

Slide 7

Slide 7 text

copilot env [init|deploy] --name dev # dev環境の作成 $ copilot env init –-name dev # 利用するAWS Profileを指定 # VPCの構成を指定 # - デフォルト構成 # - カスタマイズ # - 既存VPCのインポート # dev環境のデプロイ $ copilot env deploy --name dev Application: app Environment: dev VPC(Virtual Private Cloud) 7

Slide 8

Slide 8 text

copilot svc [init|deploy] --name frontend # frontendサービスの作成 $ copilot svc init --name frontend # サービスタイプの指定 # - Request-Driven Web Services (App Runner) # - Load Balanced Web Service (ECS/Fargate) # - Backend Service (ECS/Fargate) # - Worker Service (SQS + ECS/Fargate) # Dockerfileの指定 # - ローカル # - カスタムパス # - 既存イメージの利用 # frontendサービスのデプロイ $ copilot svc deploy --name frontend Application: app Environment: dev VPC Cluster Service: frontend Amazon ECR 8

Slide 9

Slide 9 text

copilot svc [init|deploy] --name backend # backendサービス作成 $ copilot svc init --name backend #(割愛) # ストレージの作成 $ copilot storage init –t DynamoDB --name ddb # Storageにアクセスするサービスの指定 # Storageをサービス削除時に削除するか指定 # PartitionKeyの指定 # SortKeyの指定 # backendサービスのデプロイ $ copilot svc deploy --name backend Application: app Environment: dev VPC Cluster Service: frontend Amazon ECR Service: backend Amazon ECR Amazon DynamoDB 注: Amazon ECRはAmazon Elastic Container Registryの略称です 9

Slide 10

Slide 10 text

copilot env [init/deploy] --name prod # prod環境の作成 $ copilot env init –-name prod # frontendサービスのデプロイ $ copilot svc deploy --name frontend –-env prod # backendサービスのデプロイ $ copilot svc deploy --name backend --env prod Application: app Environment: dev VPC Cluster Service: frontend Amazon ECR Service: backend Amazon ECR Environment: prod Amazon DynamoDB 10

Slide 11

Slide 11 text

AWS Copilotの CDK Overridesについて 11

Slide 12

Slide 12 text

CDK Overridesとは • AWS Copilot v1.27でリリース(2023/3/28) • AWS Copilotによって生成されたCFnテンプレートの任意のプロパティを AWS CDKで変更できるようになった • これまでユーザはAWS Copilotのマニフェストを編集することで、生成されるCFn テンプレートの内容をある程度は変更できたが手が届かないところもあった • 例えば、Copilotが作成したNLBに独自に作成したEIPを紐づけるようなことは難しかった • env/svc/jobリソースに対応(v1.27現在) AWS Copilotがデプロイするリソースとプロパティをカスタマイズする 12 AWS Cloud Development Kit (AWS CDK)

Slide 13

Slide 13 text

# オーバライド用CDKアプリケーションの生成 $ copilot svc override –n frontend –tool cdk # CDK Stackの編集 $ vi frontend/overrides/stack.ts # 差分を確認 $ copilot svc [deploy|package] --diff # デプロイまたはCFnテンプレートの出力 $ copilot svc [deploy|package] TypeScriptのみ対応(2023/5現在) 利用イメージ 13

Slide 14

Slide 14 text

stack.ts (1/2) L18-20: cloudformation-includeモジュールで Copilotが生成したCFnテンプレート を読み込み CFnテンプレートは copilot svc [deploy|package]のたびに生成 L23: オーバーライド処理の実行 (定義は次スライドへ) 14

Slide 15

Slide 15 text

stack.ts (2/2) L31: 独自リソースの定義 L36: 既存プロパティの削除 L37-43: プロパティの追加 15

Slide 16

Slide 16 text

まとめ/所感 16

Slide 17

Slide 17 text

まとめ/所感 • CDK OverridesによってAWS Copilotのより柔軟なカスタマイズが可能 になった • 一方でカスタマイズが多くなるとCopilotが管理するmanifest.ymlとの 乖離が大きくなりどこで何が設定されているか見通しが悪くなるので注意 • 特にチームで開発を行う場合はstack.tsの記述は最小限に抑えるなどの決めごと は必要か • 今後も他のツールとCDKの連携が広がることに期待 ❤ 17