ECSでexecuteコマンドを使えるようにしてコンテナの中に入る方法

## docker exec -it [コンテナID] /bin/bashみたいにECSでもデバッグしたい！

1. aws cliの導入
下を参照してください。
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

2. IAMロールの準備

- SSMの権限を付与したIAMロールを作成　付与　ECS タスクロールに付与(タスク実行ロールではありません。)
```.json
{
   "Version": "2012-10-17",
   "Statement": [
       {
       "Effect": "Allow",
       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"
      }
   ]
}
```

2. enableExecuteCommandをAWS CLIで有効化する。

- AWSCLIで有効化
```
aws ecs update-service --cluster [クラスタ名] --service [サービス名] --enable-execute-command | grep enableExecuteCommand
```

3. amazon-ecs-exec-checkerを利用して有効化されているか確認

- githubからAWSの人？が作ったシェルをクローンしてくる
[amazon-ecs-exec-checker github](https://github.com/aws-containers/amazon-ecs-exec-checker "amazon-ecs-exec-checker github")

- コマンド投入
./check-ecs-exec.sh [クラスタ名] [タスクID] 

- 実行結果
```
------------------------------------------------------------
Prerequisites for check-ecs-exec.sh v0.7
-------------------------------------------------------------
  jq      | OK (/usr/bin/jq)
  AWS CLI | OK (/usr/local/bin/aws)

-------------------------------------------------------------
Prerequisites for the AWS CLI to use ECS Exec
-------------------------------------------------------------
  AWS CLI Version        | OK ()
  Session Manager Plugin | OK ()

-------------------------------------------------------------
Checks on ECS task and other resources
-------------------------------------------------------------
Region : 
Cluster: 
Task   : 
-------------------------------------------------------------
  Cluster Configuration  |
     KMS Key       : Not Configured
     Audit Logging : DEFAULT
     S3 Bucket Name: Not Configured
     CW Log Group  : Not Configured
  Can I ExecuteCommand?  | 
     ecs:ExecuteCommand: allowed
     ssm:StartSession denied?: allowed
  Task Status            | RUNNING #RUNになってることを確認する。
  Launch Type            | Fargate
  Platform Version       | 1.4.0
  Exec Enabled for Task  | OK　#OKになっていることを確認する
  Container-Level Checks | 
    ----------
      Managed Agent Status
    ----------
         1. RUNNING for "--------"
    ----------
      Init Process Enabled ()
    ----------
         1. Disabled - ""
    ----------
      Read-Only Root Filesystem ()
    ----------
         1. Disabled - ""
  Task Role Permissions  | 
     ssmmessages:CreateControlChannel: allowed #allowedになっていることを確認する。
     ssmmessages:CreateDataChannel: allowed　#allowedになっていることを確認する。
     ssmmessages:OpenControlChannel: allowed　#allowedになっていることを確認する。
     ssmmessages:OpenDataChannel: allowed　#allowedになっていることを確認する。
  VPC Endpoints          | 
    Found existing endpoints for 
      - 
    SSM PrivateLink "" 
       1. container ""
       - AWS_ACCESS_KEY: not defined
       - AWS_ACCESS_KEY_ID: not defined
       - AWS_SECRET_ACCESS_KEY: not defined
```
4. トラブルシュート
- Exec Enable for TaskがOKにならない。
   - タスクを作り直してください。そうしないと有効になりません。
   - 矯正デプロイではうまくいきませんでした。なぜでしょう？

5. 最後に
- AWSはあまりGUIのことを考えてないでしょう。腹立ちます。
- 普通に考えてコンテナの中に入りたいって思うでしょ。
- GUIからできるようにしてくれよ。