ECS copilot体験
前提
ざっとgetting startedは実施して、作られるリソースは把握した状態
実行されること
- VPCとサブネット作成
- ELB作成
- ECSクラスタ作成
- ECRのリポジトリ作成
- ECRへのイメージのpush
- タスク定義作成
- ECSサービスの作成
- デプロイ
リソース作成系はだいたいcfn
確認したいこと
- aws profileの切り替え方
- sidecarの設定
- nginxやdatadogは並べられる?
- deployはローリングアップデート以外は選択できる?
- private subnetでNAT対応したらしいけど、いける?
aws profileの切り替えについて
基本はdefaultに指定したprofileのAWSアカウントに作られる。
※これはcopilotがgoのSDKを利用しており、goのSDKが参照するのがdefaultになっているようだ。
なお、environmentを作成すると、environmentごとにprofileを切り替えることができるようだ。
defaultのprofileにECRや別のアカウントのリソースを作成するためのリソースが作成されるみたい。
表現するのが難しいが、applicationの本体(ECRのimage)はdefaultのprofileに配置される模様。それを環境ごとに違うAWSアカウントにデプロイできるらしい、複数のAWSアカウント運用に優しいね。
ECRなどのベースとなるリソースを作るprofileを変えたい場合、AWS_PROFILEという環境変数を指定して実行するとよいみたい。
$ AWS_PROFILE=practice copilot app init
これで指定のprofileのAWSアカウントにcopilotで操作するための権限がcfnで作成される。
なお、この際に実行した端末のディレクトリには.workspaceというファイルが作られる。
ただ、このファイルの中にはどのprofileと紐付けたのかは書かれていないようだ。
application: mono-copilot
この後、envのinitをそのまますると、profileを選択できるが、
$ copilot env init
What is your environment's 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 practice]
最初にapp initしたときのアカウントと違うPROFILEを使うため、これはエラーになる。難しい。。。
✘ couldn't find an application named mono-copilot in account xxxxxxx and region ap-northeast-1
これ、調べてみると、SSMに保存していることがわかった
Application を作成すると、Copilot はその情報をあなたの AWS アカウント内の SSM パラメータストアに保存します。
Applications - AWS Copilot CLI
https://aws.github.io/copilot-cli/ja/docs/concepts/applications/
こんな感じの文字列が保存されている。
{"name":"mono-copilot","account":"xxxxxxxxx","domain":"","domainHostedZoneID":"","version":"1.0"}
application名は全部のAWSアカウントでユニークとのことなので、見つかった際のaccount.idとcopilotを実行しているprofileのidを突合しているとみた。
Application の名前はその AWS アカウント内の全てのリージョンにおいて一意である必要があります。
copilotでapplicationを作成した後に、environmentを別のAWSアカウントでも利用できると捉えた方がわかりよい。そもそもローカルで使うアカウントをswitchする運用は思想と違うのかなと思う。
profileを切り替えて、app initしたときは、copilotの操作をするときにprofileの指定が必要ということがわかりました。