1年間本番運用してわかった、
スタートアップこそAWS Copilot CLIを使うべきNつの理由
Leaner Technologies Inc.
黒曜
(@kokuyouwind)
$ whoami
-
黒曜 / @kokuyouwind
-
名古屋在住
-
Leaner Technologies Inc. 所属
-
Railsエンジニア
-
Next.js とか AWS 周りも触ってる



We're Hiring!!!
1年間本番運用してわかった、
スタートアップこそAWS Copilot CLIを使うべきNつの理由
Copilot?

そっちじゃないです
AWS Copilot CLI
AWS上でコンテナアプリを構築するツール


Leaner では昨年5月に EC2 -> ECS 移行で採用
1年間本番運用してわかった、
スタートアップこそAWS Copilot CLIを使うべきNつの理由
🤔
「Nつ」とは…?
タイトル決めるときに考えてなかった
少し癖や制約のあるツールなので、
フェーズやサービス特性によって
合うかどうか異なる(Nが変わる)
AWS Copilot CLIの向き・不向き
-
新規でのWebアプリ構築に最も向いている
-
ベストプラクティスに沿った構成が一気通貫で作れる
-
-
既存環境の移行にも使えるが、やや旨みが減る
-
DNS・VPC周りは既存のものを使い回すほうが楽
-
-
用途や現状構成によってはCopilotが適さない可能性
-
厳密なBlue/Greenデプロイはできない
-
マルチAWSアカウントの構成によっては使いづらい
-
AWS Copilot CLI で何ができるか、
どういう点が便利なのか、
どんな癖があるのかを紹介します
1年間本番運用してわかった、
スタートアップこそAWS Copilot CLIを使うべきNつの理由
具体的なNの値は
最後のスライドで!
アジェンダ
-
AWS Copilot CLIの概要と特徴
-
各Copilotリソースの作り方と詳細
-
Copilot CLIの便利な点・癖のある点
-
Leanerでの事例紹介とTips
-
まとめ
アジェンダ
-
AWS Copilot CLIの概要と特徴
-
各Copilotリソースの作り方と詳細
-
Copilot CLIの便利な点・癖のある点
-
Leanerでの事例紹介とTips
-
まとめ
AWS Copilot CLI(再掲)
AWS上でコンテナアプリを構築するツール

こういう構成が簡単に作れる

一番簡単な使い方
$ copilot init

📢 お知らせ
チュートリアル目的以外では
copilot init はオススメしません
copilot init の功罪
-
copilot init では複数のCopilotリソースがまとめて作られる
-
Copilotの特徴的な概念が隠蔽されてしまい理解しづらい
-
-
細かいオプションが制御できない
-
ドメイン名の紐付け
-
環境を構築するAWSアカウントの指定
-
-
Copilotリソースごとの init サブコマンドを使うとよい
-
copilot app init, copilot svc init など
-
Copilot のリソース構成
Application: MyApp
Test
Production
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
Copilotリソース: Application
Application: MyApp
Test
Production
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
1つのWebアプリケーションを表現
Copilotリソース: Environment
Application: MyApp
Test
Production
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
1つのWebアプリケーションを表現
サービスの
動作環境を表現
Copilotリソース: Service
Application: MyApp
Test
Production
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
サービスの
動作環境を表現
サービスの
動作環境を表現
1つのWebアプリケーションを表現
コンテナで動く
サービスを表現
Env, Service と実際のコンテナの関係
Application: MyApp
Test
Production
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
Env × Service ごとにコンテナが作られる
(これはCopilot管理リソースではない)
🤔
コンテナのデプロイは…?
$ copilot deploy --env test
Application: MyApp
Test
Production
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
この2箇所が
デプロイ対象になる
😣
手作業でデプロイしたくない!
Copilotリソース: Pipeline
Application: MyApp
Test
Prod
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
DevPipeline
(Pipeline)
ProdPipeline

developブランチ
mainブランチ
Test Envにデプロイ
Stage Envにデプロイ
E2Eテストが通ったら
Productionにデプロイ
AWS Copilot CLIの概要: まとめ
-
Copilotでは独自の単位でリソースを管理する
-
Application: Webアプリケーション全体を表現
-
Environment: テスト・本番などの環境を表現
-
Service: APIサーバ・Workerなどのサービスを表現
-
Pipeline: デプロイパイプラインを表現
-
-
Environment × Service ごとにコンテナなどが作られる
-
Environment単位でデプロイされる
-
Pipelineからは複数のEnvironmentを順に更新できる
-
アジェンダ
-
AWS Copilot CLIの概要と特徴
-
各Copilotリソースの作り方と詳細
-
Copilot CLIの便利な点・癖のある点
-
Leanerでの事例紹介とTips
-
まとめ
各Copilotリソースの init コマンドの使い方と、
具体的に何のAWSリソースが作られるかを
紹介していきます
Copilotリソース: Application
Application: MyApp
Test
Production
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
Applicationの詳細
-
copilot app init で Application を作成できる
-
Parameter Store上にメタデータが格納される
-
ローカルに copilot/.workspace が作られる
-
-
このコマンド実行時のAWS Profileが
Copilot CLI利用時の中央アカウントを規定する-
以降のコマンド実行時は同じProfile指定が必要
-
ECRやCodePipelineなど、環境横断のAWSリソースは
このAWSアカウントに作成される
-
Application の生成
❯ copilot app init
Use existing application: No
Application name: copilot-test
✔ Created the infrastructure to manage services and jobs under
application copilot-test.
✔ The directory copilot will hold service manifests for application
copilot-test.
❯ copilot app ls
copilot-test
Parameter Store

copilot/.workspace
❯ cat copilot/.workspace
application: copilot-test
path: ""
ドメインの紐付け
-
copilot app init --domain 'leaner.jp'
-
api.test.copilot-test.leaner.jp のように、
[svcName].[envName].[appName].[domain] を紐付ける
-
-
Route 53 に上記ドメインのホストゾーンが必要
-
leaner.jp のホストゾーンに copilot-test.leaner.jp に向ける
NSレコードが追加される -
copilot-test.leaner.jp のホストゾーンが作成される
-
ここまでの構成
Application

中央アカウント

Metadata

リポジトリ内
ファイル
.workspace


Route 53
HostZone
Copilotリソース: Environment
Application: MyApp
Test
Production
Stage
WebAPI
Worker
(Service)
Container
Container
Container
Container
Container
Container
Environmentの詳細
-
copilot env init で Environment を作成できる
-
環境を作るAWSアカウントを指定できる
-
VPCとSubnetが作成される
(既存のリソースを使うこともできる) -
[envName].[appName].[domain] の
Route 53 ホストゾーンが作られる -
Environmentのメタ情報が中央アカウントの
Parameter Storeに格納される
-
Environment の生成 (1)
❯ copilot env init
Environment name: test
Which credentials would you like to use to create test?
[Use arrows to move, type to filter, ? for more help]
> Enter temporary credentials
[profile default]
[profile env-test]
Environment の生成 (2)
❯ copilot env init
Environment name: test
Credential source: [profile env-test]
Would you like to use the default configuration for
a new environment?
- A new VPC with 2 AZs, 2 public subnets and 2 private subnets
- A new ECS Cluster
- New IAM Roles to manage services and jobs in your environment
[Use arrows to move, type to filter]
> Yes, use default.
Yes, but I'd like configure the default resources
(CIDR ranges, AZs).
No, I'd like to import existing resources (VPC, subnets).
Environment の生成 (3)
❯ copilot env init
Environment name: test
Credential source: [profile env-test]
Default environment configuration? Yes, use default.
✔ Linked account xxxxxxxxx and region ap-northeast-1 to application copilot-test.
✔ Proposing infrastructure changes for the copilot-test-test environment.
- Creating the infrastructure for the copilot-test-test environment. [create complete] [105.3s]
- An IAM Role for AWS CloudFormation to manage resources [create complete] [36.1s]
- An ECS cluster to group your services [create complete] [8.7s]
- An IAM Role to describe resources in your environment [create complete] [37.7s]
- A security group to allow your containers to talk to each other [create complete] [6.0s]
- An Internet Gateway to connect to the public internet [create complete] [18.0s]
- Private subnet 1 for resources with no internet access [create complete] [6.0s]
- Private subnet 2 for resources with no internet access [create complete] [6.0s]
- A custom route table that directs network traffic for the public subnets [create complete] [15.1s]
- Public subnet 1 for resources that can access the internet [create complete] [6.0s]
- Public subnet 2 for resources that can access the internet [create complete] [6.0s]
- A private DNS namespace for discovering services within the environment [create complete] [49.2s]
- A Virtual Private Cloud to control networking of your AWS resources [create complete] [12.6s]
✔ Created environment test in region ap-northeast-1 under application copilot-test.
CloudFormation Stack (VPC)

Parameter Store

ここまでの構成
Application
Environment

中央アカウント

Test環境用
アカウント

Metadata

リポジトリ内
ファイル

Metadata
.workspace


Route 53
HostZone

Route 53
HostZone

VPC
Copilotリソース: Service
Application: MyApp
Test
Production
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
Serviceの詳細
-
copilot svc init で Service を作成できる
-
Service のタイプなどを対話的に入力する
(今回はLoad Balanced Web Serviceを選択) -
copilot/[svcName]/manifest.yml ファイルが作られる
-
Service用のECR RepoとメタデータParameter Storeが
中央アカウントに作られる -
ALBがEnvironmentに紐付いて作られる
-
-
別途デプロイしない限りコンテナは起動しない
Service の生成(1)
❯ copilot svc init
Note: It's best to run this command in the root of your workspace.
Which service type best represents your service's architecture?
[Use arrows to move, type to filter, ? for more help]
Request-Driven Web Service (App Runner)
> Load Balanced Web Service (Internet to ECS on Fargate)
Backend Service (ECS on Fargate)
Worker Service (Events to SQS to ECS on Fargate)
Service の生成(2)
❯ copilot svc init
Note: It's best to run this command in the root of your workspace.
Service type: Load Balanced Web Service
Service name: api
Which Dockerfile would you like to use for api?
[Use arrows to move, type to filter, ? for more help]
> docker/Dockerfile
Enter custom path for your Dockerfile
Use an existing image instead
Service の生成(3)
❯ copilot svc init
Note: It's best to run this command in the root of your workspace.
Service type: Load Balanced Web Service
Service name: api
Dockerfile: docker/Dockerfile
parse EXPOSE: no EXPOSE statements in Dockerfile docker/Dockerfile
Port: 80
✔ Wrote the manifest for service api at copilot/api/manifest.yml
Your manifest contains configurations like your container size and port (:80).
✔ Created ECR repositories for service api.
copilot/api/manifest.yml
name: api
type: Load Balanced Web Service
http:
path: '/'
image:
build: docker/Dockerfile
port: 80
cpu: 256
memory: 512
platform: linux/x86_64
count: 1
exec: true
CloudFormation Stack (ECR)

Parameter Store

ここまでの構成
Application
Environment
Service

中央アカウント

Test環境用
アカウント

Metadata

リポジトリ内
ファイル

Metadata

Metadata
manifest.yml

.workspace


ECR Repo

Route 53
HostZone

Route 53
HostZone
ALB

VPC
Copilotリソース: Pipeline
Application: MyApp
Test
Prod
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
DevPipeline
(Pipeline)
ProdPipeline

developブランチ
mainブランチ
Test Envにデプロイ
Stage Envにデプロイ
E2Eテストが通ったら
Productionにデプロイ
Pipelineの詳細
-
copilot pipeline init で設定ファイルを作成
-
copilot/pipelines/[pipelineName] 以下に
manifest.yml と buildspec.yml が作られる -
この時点ではAWSリソースは作られない
-
-
copilot pipeline deploy で AWS リソースを作成
-
manifest.yml を元に CodePipeline と関連リソースが
中央アカウントに作られる
-
Pipeline の初期化 (1)
❯ copilot pipeline init
Only one git remote detected.
Your pipeline will follow 'git@github.com:leaner-co-jp/copilot-test'.
Your pipeline will follow branch 'develop'.
Pipeline name: copilot-test-pipeline
Which environment would you like to add to your pipeline?
[Use arrows to move, type to filter, ? for more help]
> test
[No additional environments]
Pipeline の初期化 (2)
❯ copilot pipeline init
Only one git remote detected.
Your pipeline will follow 'git@github.com:leaner-co-jp/copilot-test'.
Your pipeline will follow branch 'develop'.
Pipeline name: copilot-test-pipeline
1st stage: test
✔ Wrote the pipeline manifest for copilot-test at
'copilot/pipelines/copilot-test-pipeline/manifest.yml'
The manifest contains configurations for your pipeline.
Update the file to add stages, change the tracked branch,
add test commands or manual approval actions.
✔ Wrote the buildspec for the pipeline's build stage at
'copilot/pipelines/copilot-test-pipeline/buildspec.yml'
The buildspec contains the commands to push your container images,
and generate CloudFormation templates.
Update the "build" phase to unit test your services before pushing the images.
copilot/pipelines/.../manifest.yml
name: copilot-test-pipeline
version: 1
source:
provider: GitHub
properties:
branch: develop
repository: https://github.com/leaner-co-jp/copilot-test
stages:
name: test
# Optional: flag for manual approval action before deployment.
# requires_approval: true
# Optional: use test commands to validate this stage of your build.
# test_commands: [echo 'running tests', make test]
copilot/pipelines/.../buildspec.yml
長いので割愛
自動生成ファイルなので、
基本的には手を加えない
Pipeline の作成 (1)
❯ copilot pipeline deploy
Only found one pipeline; defaulting to: copilot-test-pipeline
✔ Successfully added pipeline resources to your application: copilot-test
⠋ Creating a new pipeline: copilot-test-pipelineACTION REQUIRED!
Go to https://console.aws.amazon.com/codesuite/settings/connections to
update the status of connection copilot-leane-leaner-purchasing- from PENDING to
AVAILABLE.
⠸ Creating a new pipeline: copilot-test-pipeline
Pipeline の作成 (2)

Pipeline の作成 (3)
❯ copilot pipeline deploy
Only found one pipeline; defaulting to: copilot-test-pipeline
✔ Successfully added pipeline resources to your application: copilot-test
⠋ Creating a new pipeline: copilot-test-pipelineACTION REQUIRED!
Go to https://console.aws.amazon.com/codesuite/settings/connections to
update the status of connection copilot-leane-leaner-purchasing- from PENDING to
AVAILABLE.
✔ Successfully created a new pipeline: copilot-test-pipeline
CloudFormation Stack (Pipeline)

ここまでの構成
Application
Environment
Service
Pipeline

中央アカウント

Test環境用
アカウント

Metadata

リポジトリ内
ファイル

Metadata

Metadata
manifest.yml
manifest.yml
buildspec.yml



.workspace


CodePipeline

ECR Repo

Route 53
HostZone

Route 53
HostZone
ALB

VPC

CodeBuild
CodePipelineからのデプロイ
-
CodeBuildで docker build を行い、ECR Repoにpushする
-
複数環境にデプロイする場合でもDockerイメージは
サービスごとに共通
-
-
各ServiceのCloudFormation StackをCreateOrUpdate する
-
ECS Serviceや関連リソースの他、
ALB Listener Rule や Target Group なども作られる -
更新はローリングアップデートで行われる
-
CodePipeline からのデプロイ

CloudFormation Stack(ECS Service)

ここまでの構成
Application
Environment
Service
Pipeline

中央アカウント

Test環境用
アカウント

Metadata

リポジトリ内
ファイル

Metadata

Metadata
manifest.yml
manifest.yml
buildspec.yml



.workspace


CodePipeline

ECR Repo

Route 53
HostZone

Route 53
HostZone
ECS Service
ALB

VPC

CodeBuild
最終的な構成
Application
Environment
Service
Pipeline

中央アカウント

Test環境用
アカウント

Metadata

リポジトリ内
ファイル

Metadata

Metadata
manifest.yml
manifest.yml
buildspec.yml



.workspace


CodePipeline

ECR Repo

Route 53
HostZone

Route 53
HostZone
ECS Service
ALB

VPC

CodeBuild
各Copilotリソースの詳細: まとめ (1)
-
application init 時のAWS Profile指定が重要
-
メタデータのParameterStoreやCodePipeline,
ECRなどがこのアカウントに作られる -
以降のcopilotコマンド実行時もこのProfileを指定する
-
-
environment init 時にAWSアカウントを指定することで
環境ごとのAWSアカウント分割が簡単に行える -
service init 時には copilot/[serviceName]/manifest.ymlに
サービスマニフェストが生成される-
環境ごとのデプロイは別途行う必要がある
-
各Copilotリソースの詳細: まとめ (2)
-
pipeline init 時にはファイルだけ作成され、
AWSリソースは作られない-
pipeline deploy で CodePipeline などが実際に作成される
-
-
initコマンド実行結果がParameter Store, CloudFormation,
ローカルファイルの最大3箇所に反映される-
copilot コマンドを経由せずに削除すると
不整合になる可能性があるため注意
-
アジェンダ
-
AWS Copilot CLIの概要と特徴
-
各Copilotリソースの作り方と詳細
-
Copilot CLIの便利な点・癖のある点
-
Leanerでの事例紹介とTips
-
まとめ
😆 Copilot CLI の便利な点
-
ベストプラクティスに沿った構成を簡単に作れる
-
直感的な単位でリソースを管理できる
-
デフォルトでセキュリティ設定が担保される
-
Manifestファイルで簡易的なIaCが行える
-
定期実行ジョブもServiceとして一元管理できる
-
copilot svc exec で簡単にコンテナ内作業が行える
-
Addonで追加のAWSリソースを管理できる
-
AWSサービスを組み合わせた標準Webアプリ構成
-
Route 53での環境ごとのDNSホストゾーン分割
-
ALBでのHTTPリクエスト受付・ECSへのルーティング
-
ECS Fargateでのサービス起動・ローリングアップデート
-
CodePipelineでのソース変更検知と自動デプロイ
-
-
環境ごとのAWSアカウント分割
-
Multi-AZ構成
ベストプラクティスに沿った構成を簡単に作れる
直感的な単位でリソースを管理できる
Application: MyApp
Test
Prod
Stage
WebAPI
Worker
(Environment)
(Service)
Container
Container
Container
Container
Container
Container
DevPipeline
(Pipeline)
ProdPipeline

developブランチ
mainブランチ
Test Envにデプロイ
Stage Envにデプロイ
E2Eテストが通ったら
Productionにデプロイ
デフォルトでセキュリティ設定が担保される

ECSコンテナはALBと他のサービスコンテナからのみ
接続が通るセキュリティグループが設定されるなど、
デフォルトで十分なセキュリティ設定が担保される
Manifestファイルで簡易的なIaCが行える
http:
path: '/'
healthcheck:
path: '/health'
healthy_threshold: 3
unhealthy_threshold: 2
interval: 10s
timeout: 5s
grace_period: 300s
deregistration_delay: 10s
network:
vpc:
placement: 'private'
Service ManifestでALBのHealth Check設定や
ネットワーク配置設定(private化)などが指定できる
定期実行ジョブもServiceとして一元管理できる
name: daily-batch
type: Scheduled Job
on:
# JST 9:00 -> UTC 0:00
schedule: "0 0 * * *"
retries: 0
timeout: 1h
image:
build:
context: .
dockerfile: ./docker/Dockerfile
command: "bundle exec rake app:daily_batch"
Service Type: Scheduled Job でスケジュール実行できる
(AWS上では Step Function + ECS OneShot Task で実行される)
copilot svc exec で簡単にコンテナ内作業が行える
❯ copilot svc exec
Into which service would you like to execute?
[Use arrows to move, type to filter, ? for more help]
api (staging)
api (production)
> api (develop)
Service: api
Execute `/bin/sh` in container api in task
03020538d7b1482790d362faa1979d9a.
Starting session with SessionId:
ecs-execute-command-00e6b3ab703b08eb1
#
サービスと環境を選んで、そのコンテナ内でコマンド実行できる
(内部的にはSessonManagerで接続する)
Addonで追加のAWSリソースを管理できる
Resources:
FireLensPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- logs:CreateLogStream
- logs:CreateLogGroup
- logs:DescribeLogStreams
- logs:PutLogEvents
Resource:
- "arn:aws:logs:*:*:log-group:/ecs/logs/copilot-test"
- "arn:aws:logs:*:*:log-group:/ecs/logs/copilot-test:log-stream:*"
copilot/[svcName]/addons/[addonName].yml に
CloudFormation YAMLで任意のAWSリソースを追加できる
🤔 Copilot CLI の癖のある点
-
Copilotリソースの単位で何が作られるかを知らないと、
トラブルシューティングが非常に難しい -
ドメイン紐付けが Application init 時にしかできない
-
意識しないとデフォルトAWSアカウントに色々作られてしまう
-
ルートドメインのホストゾーンとApplication用のホストゾーンを
別のAWSアカウントに分けることができない -
サービスごとにDocker BuildやECR Repo Pushが行われるため
同じビルド設定で複数サービス・ジョブが必要だと非効率 -
デプロイがCloudFormation更新で行われるため、
ローリングアップデート固定でBlue-Green Deployできない
アジェンダ
-
AWS Copilot CLIの概要と特徴
-
各Copilotリソースの作り方と詳細
-
Copilot CLIの便利な点・癖のある点
-
Leanerでの事例紹介とTips
-
まとめ
移行事例

尺足りなさそうなのでブログ読んで!
Copilot CLI Tips (1)
-
既存環境移行時はドメイン紐付けを動作環境用と割り切って、
全く別のドメインを紐付けて置くと動作確認が楽-
問題なければALB Listener Ruleに既存ドメイン設定入れた上で
hosts弄って既存ドメインでの挙動を改めて確認する -
それも良ければ既存DNSレコード弄ってCopilot ALBに向ける
-
-
healthcheck周りの設定を入れるとデプロイが速くなる
-
healthy_threshold, interval, deregistration_delay あたり
-
-
platformをlinux/arm64にする場合はCodeBuild環境もarmに変更する
-
ここを直さないとビルドに失敗するか、
イメージ形式が合わずECS Taskの起動に失敗する
-
Copilot CLI Tips (2)
-
サービス初回デプロイでデプロイ失敗した場合は、
ECS Service含むCloudFormation Stackの削除が必要-
イメージとECS Taskでplatform不一致のときなどに発生
-
CREATE_FAILED になるので以降のCreateOrUpdateが必ず失敗
-
一度作成に成功していれば、以降はRollbackになるので大丈夫
-
-
vpc.placementをprivateにするとセキュリティ的には安心だが、
NAT Gatewayが作られるのでコストは高くなる-
コストを抑えたいなら本番環境のみ設定を入れるのがおすすめ
-
-
DockerfileのFROMイメージはECR Public Repositoryにするとよい
-
DockerHubだと上限引っかかることがよくある
-
アジェンダ
-
AWS Copilot CLIの概要と特徴
-
各Copilotリソースの作り方と詳細
-
Copilot CLIの便利な点・癖のある点
-
Leanerでの事例紹介とTips
-
まとめ
1年間本番運用してわかった、
スタートアップこそAWS Copilot CLIを使うべきNつの理由
😆 Copilot CLI の便利な点(再掲)
-
ベストプラクティスに沿った構成を簡単に作れる
-
直感的な単位でリソースを管理できる
-
copilot svc exec で簡単にコンテナ内作業が行える
-
Manifestファイルで簡易的なIaCが行える
-
定期実行ジョブもServiceとして一元管理できる
-
デフォルトでセキュリティ設定が担保される
-
Addonで追加のAWSリソースを管理できる
まとめ
-
少なくとも 7 個 のおすすめポイントがある(多分もっとある)
-
癖はあるが、リソース管理単位が直感的で扱いやすい
-
スタートアップ規模なら制限要件も特に気にならないはず
-
-
AWSマルチアカウント構成は最初に考えておくとよい
-
ルートホストゾーンを含むCopilot用の中央アカウントと、
App × Envごとのアカウントを作るのがおすすめ -
ルートホストゾーンのあるアカウントの共有が厳しい場合は、
Copilot割当を冗長なドメインにしてしまうのも手
( api.develop.myapp.copilot-myapp.leaner.jp など)
-
質疑応答や
移行事例・Tipsなどを聞きたい方は
oVice会場かMeetyでお話しましょう!

1年間本番運用してわかった、スタートアップこそAWS Copilot CLIを使うべきNつの理由
By 黒曜
1年間本番運用してわかった、スタートアップこそAWS Copilot CLIを使うべきNつの理由
AWS Startup Communityの「スタートアップ事例祭り 〜監視・モニタリング・セキュリティ編〜」で発表した資料です。 https://aws-startup-community.connpass.com/event/241721/
- 948