aws cliでecsを操作するコマンドは2パターンあります。(aws ecsからecs-cli)
どっちを使ってもいいんですが、一つに統一してほうがいいかも知りません。
今回はecs-cliを使おうとします。
大まかな手順
-
AWS環境設定(configuration)
awsに繋ぐためのprofileを登録する必要があります。今回はOregonリージョン(us-west2)に環境を構築します。 -
configuration
ecs-cli configure profile --profile-name west2-profile --access-key "XXXXXXXXXXXXXX" --secret-key "XXXXXXXXXXXXXXXXXXXXXXX"
ecs-cli configure --cluster [CLUSTER_NAME] --default-launch-type EC2 --region us-west-2 --config-name west2-config
結果は「.ecs/credentials」、「.ecs/config」に記録されます。
- cluster作成
SSHでecsのホスト・インスタンスにログインするためにssh keyを作成します。
AWSコンソールからEC2 Dashboardに入り、「Key Pairs」で「Create Key Pair」をクリックします。
名前を入力して(今回はwest2-keyにします)、「Create」を押します。すぐダウンロードが始まりますが、~/.sshに入れときましょう。
ecs-cli up --keypair west2-key --capability-iam --size 1 --instance-type t2.small --cluster-config west2-config
- task/service実行
ecs-cli compose --project-name [PROJECT_NAME] --ecs-profile west2-profile --cluster-config west2-config service up
task実行のみ:service up -> up
project-nameはservice名、task名、task definition名になります。
このまま実行するとSSMにアクセスを拒否されたと怒られます。
Fetching secret data from SSM Parameter Store in [REGION]: AccessDeniedException: User: arn:aws:sts::[ACCOUNT-ID]:assumed-role/ecsTaskExcutionRole/XXXXX is not authorized to perform: ssm:GetParameters on resource: arn:aws:ssm:[REGION]:[ACCOUNT-ID]:parameter/[パラメータ] status code: 400, request id: XXXXXXXXXX
対策としては、ecsTaskExcutionRoleに次のpolicyを与える。
{
"Version": "2012-10-17",
"Statement": [
{
{
"Effect": "Allow",
"Action": "ssm:GetParameters",
"Resource": "*"
}
]
}
- コンテナーがちゃんと立ち上がったのか確認する
ecs-cli ps --ecs-profile west2-profile --cluster-config west2-config
- コンテナーからpaprameterが読み取れたのかを確認する。(SSHでECSホストにLOGINする必要がある)
docker exec -it `CONTAINER ID` env
- サービスを削除する
ecs-cli compose --project-name [PROJECT_NAME] --ecs-profile west2-profile --cluster-config west2-config service down
- クラスター(及び関連リソース)を削除する
ecs-cli down --ecs-profile west2-profile --cluster-config west2-config
Are you sure you want to delete your cluster? [y/N]
確認メッセージが出るので[y]を入力して確定します。
参考
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ECS_CLI_reference.html
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cmd-ecs-cli-compose-ecsparams.html
https://medium.com/@felipgomesilva/using-secrets-in-aws-ecs-dc43c37ce4a1
https://dev.classmethod.jp/cloud/aws/ecs-secrets/