✈️

AWS Copilotのデモ環境をデプロイしようとした際にハマったこと

2021/08/21に公開

前提

  • copilot version: v1.9.0
  • Apple M1
  • Big Sur 11.5.1

概要

AWS CopilotはAmazon ECS CLI の後継であり、VPCやタスク定義、ロードバランサー等を自動で作成してくれるものです。
基本的には下記の手順でInstallation -> Getting startedの手順で行えば簡単にデモアプリをデプロイできますが、私がハマったエラーを共有します。
https://github.com/aws/copilot-cli

エラー

  - 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のサブネット自体不要でしたので削除しました。
💀 削除が良い方法かはわかりませんので、自己責任でお願いします。
https://qiita.com/ksato2032/items/98b76d4ccaa1a5641fc8

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

参考
https://qiita.com/GleamingCake/items/8b412a87af78507c04c8

- 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にも関わらずなぜかエラーのままでした。。
https://github.com/aws/copilot-cli/issues/2640
https://github.com/aws/copilot-cli/issues/1949

以上でいくつかハマりどころはありましたが、1コマンドで諸々立ち上げてくれるCopilotは素敵です!
今後もう少し込み入った要件で使いたいなと思います。

参考

https://aws.amazon.com/jp/containers/copilot/
https://aws.amazon.com/jp/blogs/news/introducing-aws-copilot/
https://www.d-make.co.jp/blog/2021/08/17/focalboard-with-aws-copilot/amp/
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/getting-started-aws-copilot-cli.html
https://www.youtube.com/watch?v=YHamzR_g9co&t=2153s

Discussion