Open2

ECS copilot体験

mesh1nek0x0mesh1nek0x0

前提

ざっとgetting startedは実施して、作られるリソースは把握した状態

実行されること

  • VPCとサブネット作成
  • ELB作成
  • ECSクラスタ作成
  • ECRのリポジトリ作成
  • ECRへのイメージのpush
  • タスク定義作成
  • ECSサービスの作成
  • デプロイ

リソース作成系はだいたいcfn

確認したいこと

  • aws profileの切り替え方
  • sidecarの設定
    • nginxやdatadogは並べられる?
  • deployはローリングアップデート以外は選択できる?
  • private subnetでNAT対応したらしいけど、いける?
mesh1nek0x0mesh1nek0x0

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の指定が必要ということがわかりました。