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

AWS Copilotを CDKでカスタマイズする

AWS Copilotを CDKでカスタマイズする

takahash

May 20, 2023
Tweet

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. AWS Copilotについて
    4

    View Slide

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

    View Slide

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

    View Slide

  7. 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

    View Slide

  8. 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

    View Slide

  9. 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

    View Slide

  10. 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

    View Slide

  11. AWS Copilotの
    CDK Overridesについて
    11

    View Slide

  12. 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)

    View Slide

  13. # オーバライド用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

    View Slide

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

    View Slide

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

    View Slide

  16. まとめ/所感
    16

    View Slide

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

    17

    View Slide