AWS Copilotのデモ環境をデプロイしようとした際にハマったこと
前提
- copilot version: v1.9.0
- Apple M1
- Big Sur 11.5.1
概要
AWS CopilotはAmazon ECS CLI の後継であり、VPCやタスク定義、ロードバランサー等を自動で作成してくれるものです。
基本的には下記の手順でInstallation -> Getting startedの手順で行えば簡単にデモアプリをデプロイできますが、私がハマったエラーを共有します。
エラー
- A Virtual Private Cloud to control networking of your AWS resources [delete complete] [0.0s]
The maximum number of VPCs has been reached. (Service: AmazonEC2; Stat
us Code: 400; Error Code: VpcLimitExceeded; Request ID: 123-456; Proxy: null)
-> Copilotの問題ではないですが、1リージョンあたりVPCの数はデフォルトで5つまでという制限があるエラーです。これは不要なVPCを削除して解決。
- Private subnet 2 for resources with no internet access [delete complete] [0.0s]
Template error: Fn::Select cannot select nonexistent value at index 1
- Public subnet 1 for resources that can access the internet [not started]
- Public subnet 2 for resources that can access the internet [delete complete] [0.0s]
Template error: Fn::Select cannot select nonexistent value at index 1
-> AZが1つしかないdefaultサブネットを参照しているのでエラーになっていると思われます。AZを紐付ければいいと思いますが、私の場合はdefaultのサブネット自体不要でしたので削除しました。
💀 削除が良い方法かはわかりませんので、自己責任でお願いします。
=> ERROR [internal] load metadata for public.ecr.aws/nginx/nginx:1.19 2.8s
=> [auth] aws:: nginx/nginx:pull token for public.ecr.aws
-> なぜかecrからイメージを取れないエラー。今回はECRで立てなくても良かったので、nginx:1.21.1-alpine
に差し替えました。
[追記]
ECRの公開イメージを取得する場合は認証しましょう。
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
参考
- FROM public.ecr.aws/nginx/nginx:1.19
+ FROM nginx:1.21.1-alpine
EXPOSE 80
COPY index.html /usr/share/nginx/html
ECS Deployment Circuit Breaker was triggered'." (RequestToken: XXXXXXXXXXX, HandlerErrorCode: GeneralServiceException)
-> 10分以上経ってもデプロイが終わらず最終的に発生。
下記のissueを参考にし、DOCKER_DEFAULT_PLATFORM=linux/amd64 copilot init ..
で実行して解決しました。
これは私の環境がM1であり、ビルドしているイメージがARMアーキテクチャ・Fargateはx86で立てているために起きるようです。
The feature is now released in v1.9.0! 🎊
とあり、v1.9.0で解決したようですが、v1.9.0にも関わらずなぜかエラーのままでした。。
以上でいくつかハマりどころはありましたが、1コマンドで諸々立ち上げてくれるCopilotは素敵です!
今後もう少し込み入った要件で使いたいなと思います。
参考
Discussion