0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ECS・ECR・FargateについてDVA対策としてまとめてみる

0
Posted at

Amazon ECR

Amazon ECR(Elastic Container Registry)は、コンテナイメージを保存・管理するマネージドサービスです。

開発者
  │
  ▼
Docker Build
  │
  ▼
コンテナイメージ
  │
  │ Push
  ▼
Amazon ECR
  │
  │ Pull
  ▼
Amazon ECS
  │
  ▼
コンテナ実行

ECRはイメージを保存するサービスであり、コンテナを実行するサービスではありません。

ECRの主な機能

  • コンテナイメージの保存
  • イメージのタグ管理
  • IAMによるアクセス制御
  • 脆弱性スキャン
  • ライフサイクルポリシー
  • レプリケーション
種類 特徴
ECR Private アクセスを制御するプライベートレジストリ
ECR Public イメージを一般公開するためのレジストリ

ECRへのPush

基本的な流れは以下のとおりです。

① ECRリポジトリを作成
          ↓
② ECRへ認証
          ↓
③ Dockerイメージをビルド
          ↓
④ ECR用のタグを設定
          ↓
⑤ ECRへPush

認証例:

aws ecr get-login-password \
  --region ap-northeast-1 \
  | docker login \
      --username AWS \
      --password-stdin \
      123456789012.dkr.ecr.ap-northeast-1.amazonaws.com

イメージのビルド:

docker build -t my-app:latest .

タグの設定:

docker tag my-app:latest \
  123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:v1

Push:

docker push \
  123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:v1

※ アカウントIDやリポジトリ名はサンプルです。

TagとDigest

項目 説明
Tag latestやv1.0.0などの名前
Digest イメージの内容に基づく識別子
my-app:latest
my-app:v1.0.0
my-app@sha256:xxxxxxxx...

タグの上書きが許可されている場合、同じタグでも参照するイメージが変わる可能性があります。

Digestを指定すると、特定のイメージを明確に識別できます。

Tag Immutability

Tag Immutabilityは、イメージタグの上書きを制限する機能です。

例えば、v1.0.0を一度登録した後、同じタグで別のイメージを登録できないようにします。

本番環境で利用するイメージの再現性を高めるために役立ちます。

イメージスキャン

ECRでは、イメージの脆弱性スキャンを利用できます。

基本スキャンとAmazon Inspectorを利用する拡張スキャンがあります。

ただし、スキャンですべての脆弱性を検出できるわけではありません。ベースイメージや依存ライブラリの更新も必要です。

ライフサイクルポリシー

ECRでは、古いイメージを整理するためのライフサイクルポリシーを利用できます。

my-app:v1
my-app:v2
my-app:v3
my-app:v4
my-app:v5

古いイメージを自動削除することでストレージ使用量を管理できます。

ただし、ロールバックに必要なイメージまで削除しないよう注意します。

Amazon ECS

Amazon ECS(Elastic Container Service)は、コンテナの起動・停止・配置・スケーリングなどを管理するコンテナオーケストレーションサービスです。

3-1. ECSの基本構成

用語 説明
Cluster タスクやサービスを管理する論理的なまとまり
Task Definition コンテナの実行設定を定義するテンプレート
Task タスク定義に基づいて起動する実行単位
Service 指定した数のタスクを継続的に維持する仕組み
Container タスク内で実行されるアプリケーション
ECS Cluster
    │
    └── ECS Service
           │
           ├── Task 1
           │     └── Container
           │
           ├── Task 2
           │     └── Container
           │
           └── Task 3
                 └── Container

Task Definition

Task Definitionには、主に以下の情報を定義します。

  • コンテナイメージ
  • CPU・メモリ
  • コンテナポート
  • 環境変数
  • ログ出力先
  • IAMロール
  • ボリューム
  • 起動コマンド

Fargate向けの簡略化した例です。

{
  "family": "my-app",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "256",
  "memory": "512",
  "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
  "taskRoleArn": "arn:aws:iam::123456789012:role/myAppTaskRole",
  "containerDefinitions": [
    {
      "name": "web",
      "image": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:v1",
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/my-app",
          "awslogs-region": "ap-northeast-1",
          "awslogs-stream-prefix": "ecs"
        }
      }
    }
  ]
}

ロググループやIAMロールなどは、事前に適切に準備する必要があります。

タスク定義のリビジョン

タスク定義を変更すると、新しいリビジョンとして登録されます。

my-app:1
   ↓
my-app:2
   ↓
my-app:3

例えば、コンテナイメージを更新した場合です。

my-app:1
  image: my-app:v1

my-app:2
  image: my-app:v2

タスク定義のリビジョンは、デプロイやロールバックを理解するうえで重要です。

4. ECSの起動方式

ECSでは、主にEC2とFargateを実行基盤として利用できます。

項目 EC2 Fargate
実行基盤 EC2インスタンス AWS管理の基盤
サーバー管理 利用者が管理 AWSが管理
インスタンスタイプ 選択できる 直接選択しない
ホストOS管理 利用者側で対応 AWSが管理
リソース指定 インスタンス容量を考慮 タスク単位でCPU・メモリを指定
向いている用途 ホストの細かな制御が必要 運用負荷を抑えたい

ECSはコンテナの管理、Fargateはコンテナの実行基盤です。

AWS Fargate

Fargateは、EC2インスタンスを直接管理せずにコンテナを実行するためのサーバーレスコンピューティング基盤です。

Amazon ECS
    │
    ▼
Task Definition
    │
    ▼
AWS Fargate
    │
    ▼
コンテナ実行

Fargateのメリット

  • EC2インスタンスの構築が不要
  • ホストOSのパッチ適用を直接管理しなくてよい
  • タスク単位でCPU・メモリを指定できる
  • ECS Serviceと連携してスケーリングできる
  • アプリケーション開発に集中しやすい

ただし、コンテナイメージやアプリケーションのセキュリティ管理は引き続き必要です。

Fargateの制約

Fargateでは、ホストOSへの直接アクセスや、ホストの細かなカスタマイズには制約があります。

CPUとメモリには利用できる組み合わせが定められており、EC2と同じ自由度で利用できるわけではありません。

Fargateのネットワーク

FargateでECSタスクを実行する場合、awsvpcネットワークモードを利用します。

タスクごとにENI(Elastic Network Interface)が割り当てられ、VPC内で通信します。

VPC
 │
 └── Private Subnet
        │
        ├── ECS Task A
        │      └── ENI
        │
        └── ECS Task B
               └── ENI

タスクにセキュリティグループを設定することで、通信を制御できます。

Public SubnetとPrivate Subnet

配置先 特徴
Public Subnet 適切なルートとパブリックIPなどがあればインターネット通信が可能
Private Subnet インターネットへ直接接続する構成を前提としない

FargateタスクをPrivate Subnetに配置した場合、外部サービスへアクセスするための通信経路を別途用意する必要があります。

代表的な方法は、NAT GatewayとVPCエンドポイントです。

NAT Gatewayを利用する構成

一般的なパブリックNAT Gatewayを利用する場合、NAT GatewayはPublic Subnetに配置します。

Private Subnetのルートテーブルでは、インターネット宛ての通信をNAT Gatewayへ転送するように設定します。

VPC
│
├── Private Subnet
│      │
│      └── Fargate Task
│              │
│              │ インターネット宛て通信
│              ▼
│         Route Table
│              │
│              │ 0.0.0.0/0 → NAT Gateway
│              │
└── Public Subnet
       │
       └── NAT Gateway
              │
              ▼
        Internet Gateway
              │
              ▼
          Internet

NAT Gatewayを利用すると、Private Subnet内のタスクから外部サービスへ通信できます。

ただし、NAT Gatewayには利用料金が発生します。

また、NAT Gatewayを利用しても、外部からPrivate Subnet内のタスクへ自由に接続できるようになるわけではありません。

VPCエンドポイントを利用する構成

AWSサービスへのアクセスには、VPCエンドポイントを利用する方法もあります。

Private Subnet
      │
      ▼
Fargate Task
      │
      ▼
VPC Endpoint
      │
      ▼
AWS Service

VPCエンドポイントを利用すると、対応するAWSサービスへインターネットを経由せずにアクセスできます。

ただし、VPCエンドポイントを1つ作成すれば、すべてのAWSサービスへアクセスできるわけではありません。

利用するサービスに応じたエンドポイントが必要です。

Private SubnetからECRのイメージを取得する

ECRからプライベートイメージを取得する場合、ECRだけでなくS3への通信も関係します。

ECRとS3の関係

ECRでは、コンテナイメージのレイヤーデータの取得にS3が利用されます。

FargateのLinuxプラットフォームバージョン1.4.0以降で、Private SubnetからVPCエンドポイント経由でECRのプライベートイメージを取得する場合、代表的には以下のエンドポイントが必要です。

エンドポイント 種類 主な用途
com.amazonaws.region.ecr.api Interface ECR APIへのアクセス
com.amazonaws.region.ecr.dkr Interface Docker Registryへのアクセス
com.amazonaws.region.s3 Gateway イメージレイヤーデータなどの取得
Private Subnet
      │
      ▼
Fargate Task
      │
      ├── ECR API Endpoint
      │
      ├── ECR Docker Registry Endpoint
      │
      └── S3 Gateway Endpoint

※ Fargateのプラットフォームバージョンやイメージ取得方式によって必要な通信経路は異なります。

Secrets Managerを利用する場合

タスク起動時にSecrets Managerからシークレットを取得する場合は、Secrets Managerへの通信経路も必要です。

CloudWatch Logsへログを送信する場合も、同様に通信経路を考慮します。

NAT Gatewayを使用しない構成では、必要に応じて以下のエンドポイントを検討します。

  • ECR API
  • ECR Docker Registry
  • S3
  • Secrets Manager
  • CloudWatch Logs

セキュリティグループとルートテーブル

エンドポイントを作成しても、通信設定が不適切であれば接続できません。

確認する項目は以下のとおりです。

  • タスクのセキュリティグループ
  • Interface Endpointのセキュリティグループ
  • S3 Gateway Endpointを関連付けたルートテーブル
  • VPCのDNS設定
  • エンドポイントポリシー
  • IAM権限

Private SubnetからECRへアクセスできない場合は、IAM権限だけでなくネットワーク経路も確認します。

ECSのIAMロール

ECSでは、Task Execution RoleとTask Roleを区別する必要があります。

IAMロール 主な役割
Task Execution Role ECS基盤がタスクを起動・管理するための権限
Task Role コンテナ内のアプリケーションなどがAWSサービスへアクセスする権限

Task Execution Role

Task Execution Roleは、ECSの実行基盤がAWSサービスへアクセスするためのIAMロールです。

代表的な用途は以下のとおりです。

  • ECRからコンテナイメージを取得する
  • awslogsログドライバーでCloudWatch Logsへログを送信する
  • タスク定義で参照するシークレットを取得する
ECS / Fargate
     │
     │ Task Execution Role
     ▼
Amazon ECR
CloudWatch Logs
Secrets Manager

タスクを起動・管理するための権限と理解すると整理しやすくなります。

Task Role

Task Roleは、コンテナ内のアプリケーションがAWSサービスへアクセスするためのIAMロールです。

例えば、アプリケーションがS3からファイルを取得する場合に利用します。

ECS Task
    │
    └── Application
            │
            │ Task Role
            ▼
         Amazon S3

S3以外にも、DynamoDBやSQSなどへのアクセスに利用できます。

また、後述するECS ExecのSSM通信権限もTask Roleに設定します。

2つのIAMロールの比較

比較項目 Task Execution Role Task Role
主な利用者 ECSの実行基盤 コンテナ内のアプリケーションなど
ECRからの通常のイメージ取得 対象 通常は対象外
awslogsによる標準ログ送信 対象 通常は対象外
タスク定義のシークレット参照 対象 通常は対象外
アプリケーションからS3へアクセス 通常は対象外 対象
アプリケーションからDynamoDBへアクセス 通常は対象外 対象
ECS ExecのSSMメッセージ通信 通常は対象外 対象

ECSとSecrets Manager

コンテナアプリケーションでは、データベースのパスワードやAPIキーなどを利用する場合があります。

これらをDockerfileやコンテナイメージに直接埋め込むことは避けます。

Secrets ManagerやSystems Manager Parameter Storeを利用することで、機密情報を外部で管理できます。

タスク定義でシークレットを参照する

ECSのタスク定義では、secretsを利用して機密情報をコンテナへ渡せます。

{
  "containerDefinitions": [
    {
      "name": "web",
      "image": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:v1",
      "essential": true,
      "secrets": [
        {
          "name": "DB_PASSWORD",
          "valueFrom": "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:my-app/db-password"
        }
      ]
    }
  ]
}

※ 必要な部分のみを抜き出した例です。

この構成では、タスク起動時にシークレットを取得し、環境変数として渡します。

この取得処理に必要な権限は、通常、Task Execution Roleに設定します。

また、Secrets Managerのシークレットをカスタマー管理KMSキーで暗号化している場合は、Task Execution Roleにkms:Decrypt権限も必要です。

KMSキーポリシーなどによるアクセス許可も確認します。

アプリケーションから直接取得する場合

アプリケーションコードがSecrets Manager APIを呼び出して値を取得する場合は、Task Roleの権限を利用します。

タスク定義でシークレットを参照
            │
            ▼
     Task Execution Role

アプリケーションがAPIで取得
            │
            ▼
          Task Role

同じSecrets Managerへのアクセスでも、誰が取得するかによって必要なIAMロールが異なります。

ECS ServiceとAuto Scaling

ECS Serviceでは、Desired Countを指定してタスク数を維持できます。

ECS Service
Desired Count:3
       │
       ├── Task A
       ├── Task B
       └── Task C

タスクが異常終了した場合、ECS Serviceは必要なタスク数を維持するように動作します。

Desired Count

設定 意味
Desired Count = 1 1つのタスクを維持
Desired Count = 3 3つのタスクを維持
Desired Count = 5 5つのタスクを維持

ただし、必要なコンピューティング容量やネットワーク条件が満たされなければ、指定した数のタスクを起動できない場合があります。

Service Auto Scaling

ECSでは、Application Auto Scalingを利用してサービスのタスク数を調整できます。

代表的な指標には、以下があります。

  • CPU使用率
  • メモリ使用率
  • ALBのリクエスト数
CPU使用率が上昇
       │
       ▼
Auto Scaling
       │
       ▼
Desired Countを増加
       │
       ▼
新しいタスクを起動

EC2起動方式の容量管理

EC2起動方式では、タスク数を増やしてもEC2インスタンス側に十分な容量がなければタスクを配置できません。

ECS Service
    │
    │ タスク数を増やしたい
    ▼
EC2 Cluster
    │
    ├── EC2-A:空き容量なし
    └── EC2-B:空き容量なし

この場合、サービスのスケーリングだけでなく、EC2インスタンスの容量も考慮する必要があります。

ECS Capacity Providerなどを利用して、Auto Scalingグループと連携する構成もあります。

ECSとALB

ECSでWebアプリケーションを運用する場合、ALBと組み合わせる構成があります。

利用者
   │
   ▼
Application Load Balancer
   │
   ├── ECS Task A
   ├── ECS Task B
   └── ECS Task C

ALBは、複数のタスクへHTTP/HTTPSリクエストを分散します。

ターゲットグループ

ALBでは、ターゲットグループを利用して転送先を管理します。

Fargateのawsvpcネットワークモードでは、ターゲットグループのターゲットタイプとしてipを使用します。

ヘルスチェック

ALBでは、ターゲットの正常性を確認するヘルスチェックを設定できます。

例えば、アプリケーションに次のエンドポイントを用意します。

GET /health

ALBのヘルスチェックとコンテナヘルスチェックは別の仕組みです。

項目 役割
ALBヘルスチェック ロードバランサーの転送先として正常か確認
コンテナヘルスチェック コンテナ内部のアプリケーション状態を確認

障害調査では、どちらのヘルスチェックが失敗しているかを区別します。

ECSのRolling Update

Rolling Updateでは、既存タスクを段階的に新しいタスクへ置き換えます。

開始時
  Task A:v1
  Task B:v1
  Task C:v1

更新途中
  Task A:v2
  Task B:v1
  Task C:v1

更新途中
  Task A:v2
  Task B:v2
  Task C:v1

更新完了
  Task A:v2
  Task B:v2
  Task C:v2

段階的に更新するため、全タスクを同時停止する方式と比べて可用性を維持しやすくなります。

minimumHealthyPercentとmaximumPercent

Rolling Updateでは、デプロイ中のタスク数を制御するために以下の設定を利用します。

設定 意味
minimumHealthyPercent デプロイ中に維持する正常なタスク数の下限
maximumPercent デプロイ中に実行できるタスク数の上限

例えば、次の構成を考えます。

Desired Count:4

minimumHealthyPercent:50%
maximumPercent:200%

この場合、概念的には以下のように整理できます。

  • 正常なタスクを最低2つ維持する
  • デプロイ中のタスク数は最大8つまで許容する

ただし、実際のタスク起動・停止順序や正常性の判定は、サービスの設定やヘルスチェックなどに依存します。

Deployment Circuit Breaker

Deployment Circuit Breakerは、ECSのRolling Updateでデプロイ失敗を検出する仕組みです。

新しいタスクが正常に起動・稼働できず、サービスが安定状態に到達できない場合に、デプロイの失敗を検出します。

新しいタスク定義でデプロイ
           │
           ▼
新タスクを起動
           │
           ▼
タスク起動失敗
またはヘルスチェック失敗
           │
           ▼
Deployment Circuit Breaker
           │
           ▼
デプロイ失敗を検出
           │
           ▼
ロールバック(有効時)

ロールバック

Deployment Circuit Breakerでは、ロールバックを有効にできます。

失敗を検出した場合、以前に正常完了したデプロイへ戻すことができます。

ただし、ロールバックを有効にしていない場合は、自動的に以前の状態へ戻るとは限りません。

利用できるデプロイ方式

Deployment Circuit Breakerは、ECSのRolling Updateで利用する仕組みです。

CodeDeployによるBlue/Greenと同じものではありません。

項目 Deployment Circuit Breaker
対象 ECS Rolling Update
主な役割 デプロイ失敗の検出
ロールバック 設定により可能
主な確認対象 タスクの起動・正常性など

失敗しきい値の設定

Deployment Circuit Breakerでは、失敗のカウント方法やしきい値を設定できます。

AWS公式ドキュメントでは、以下の方式が定義されています。

設定 内容
BOUNDED_PERCENT Desired Countに基づく割合で計算し、上下限を適用
UNBOUNDED_PERCENT Desired Countに基づく割合で計算し、上下限を適用しない
COUNT 固定の失敗回数を指定

また、resetOnHealthyTaskによって、正常なタスクが起動した際に失敗カウントをリセットするかどうかも制御できます。

ECSのBlue/Greenデプロイ

Blue/Greenデプロイでは、旧バージョンと新バージョンの実行環境を分けて用意します。

                 ALB
                  │
                  ▼
          本番トラフィック
                  │
                  ▼
          Blue:旧タスク
                  │
                  │ 切り替え
                  ▼
          Green:新タスク

新しい環境を事前に検証し、正常性を確認してから本番トラフィックを切り替えることができます。

ECS向けAppSpec

CodeDeployを利用してECSへデプロイする場合、AppSpecで新しいタスク定義などを指定します。

version: 0.0

Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "arn:aws:ecs:ap-northeast-1:123456789012:task-definition/my-app:2"
        LoadBalancerInfo:
          ContainerName: "web"
          ContainerPort: 80

この例では、デプロイするタスク定義と、ロードバランサーが転送するコンテナ・ポートを指定しています。

ECSのライフサイクルフック

CodeDeployによるECSデプロイでは、Lambda関数を利用したライフサイクルフックを設定できます。

イベント 用途
BeforeInstall 新しいタスクセットを作成する前の検証
AfterInstall 新しいタスクセット作成後の検証
AfterAllowTestTraffic テストトラフィックを流した後の検証
BeforeAllowTraffic 本番トラフィック切り替え前の検証
AfterAllowTraffic 本番トラフィック切り替え後の検証
新しいタスクセットを作成
          │
          ▼
テストトラフィックを送信
          │
          ▼
検証用Lambda関数
          │
          ▼
正常性を確認
          │
          ▼
本番トラフィックを切り替え

ECS向けのCodeDeployフックと、EC2向けのCodeDeployフックは同じではありません。

また、ECS自身のデプロイ機能を利用する場合は、CodeDeploy向けAppSpecを必ず使用するわけではありません。

CloudWatch Alarmとロールバック

ECSでは、CloudWatch Alarmを利用してデプロイ中の異常を検出する構成があります。

例えば、以下のようなメトリクスを監視します。

  • HTTP 5xxエラー
  • アプリケーションのエラー率
  • CPU使用率
  • レイテンシー
新バージョンをデプロイ
          │
          ▼
エラー率が上昇
          │
          ▼
CloudWatch Alarm
          │
          ▼
デプロイ異常を検出
          │
          ▼
ロールバック(設定時)

ただし、CloudWatch Alarmを作成しただけで、すべてのECSデプロイが自動的にロールバックされるわけではありません。

デプロイ方式に対応した失敗検出やロールバック設定が必要です。

18. ECSのログ管理

ECSでは、CloudWatch Logsなどへコンテナログを送信できます。

ECS Task
   │
   ▼
Container
   │
   ▼
CloudWatch Logs

awslogsログドライバー

タスク定義のlogConfigurationで、CloudWatch Logsへの出力を設定できます。

{
  "logConfiguration": {
    "logDriver": "awslogs",
    "options": {
      "awslogs-group": "/ecs/my-app",
      "awslogs-region": "ap-northeast-1",
      "awslogs-stream-prefix": "ecs"
    }
  }
}

アプリケーションが標準出力や標準エラー出力へログを書き出す構成では、ログを集約しやすくなります。

このような標準的なログ送信に必要な権限は、通常、Task Execution Roleで扱います。

FireLens

FireLensは、Fluent BitやFluentdなどを利用したログルーティングの仕組みです。

Application Container
          │
          ▼
       FireLens
          │
          ├── CloudWatch Logs
          ├── Amazon S3
          └── その他の転送先

複数の転送先を利用したい場合や、ログの加工・転送を行いたい場合に役立ちます。

FireLensとIAMロール

FireLensでログ転送用コンテナがAWSサービスへアクセスする場合、必要な権限は通常、Task Roleに設定します。

一方、ECS基盤がFireLensの設定ファイルを取得するなどの処理では、Task Execution Roleが関係する場合があります。

つまり、ログ関連の権限であっても、すべてExecution Roleに付与するわけではありません。

処理 主に利用するロール
awslogsによる標準ログ送信 Task Execution Role
FireLensのログ転送用コンテナによるAWS APIアクセス Task Role
ECS基盤によるFireLens設定取得 Task Execution Roleなど

誰がAWS APIを呼び出すかによってIAMロールを判断することが重要です。

ECS Exec

ECS Execは、実行中のコンテナ内でコマンドを実行するための機能です。

AWS Systems Managerの仕組みを利用します。

ECS Execを有効化する

ECS Execを利用するには、サービスまたはタスクでenableExecuteCommandを有効にする必要があります。

例えば、サービスを更新する場合は次のように指定できます。

aws ecs update-service \
  --cluster my-cluster \
  --service my-service \
  --enable-execute-command \
  --force-new-deployment

既存タスクに設定を反映するには、新しいタスクを起動する必要があります。

ECS ExecのIAM権限

ECS Execでは、コンテナ内のマネージドSSMエージェントがSystems Managerのメッセージングサービスと通信します。

そのため、以下の権限をTask Roleに付与します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssmmessages:CreateControlChannel",
        "ssmmessages:CreateDataChannel",
        "ssmmessages:OpenControlChannel",
        "ssmmessages:OpenDataChannel"
      ],
      "Resource": "*"
    }
  ]
}

このssmmessages権限はTask Execution Roleではなく、Task Roleに設定します。

また、ECS Execを呼び出す利用者やIAMロール側にも、ecs:ExecuteCommandなどの適切な権限が必要です。

コマンドの実行

aws ecs execute-command \
  --cluster my-cluster \
  --task <task-id> \
  --container web \
  --interactive \
  --command "/bin/sh"

利用するには、対応するAWS CLIやSession Manager Pluginなどの準備も必要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?