ECSでexec format errorが出るのはM1 MACが原因かもしれない | アントレプログラマー

ECSでexec format errorが出るのはM1 MACが原因かもしれない

AWS

こんにちは、ニキです。

今回は、ECS(Fargate)でexec format errorが出た時のトラブルシュートです。

クラスターとタスク定義を登録したのちにサービスを登録したところ、ECSコンソールに以下のエラーが出ていました。

exec /docker-entrypoint.sh: exec format error

タスク定義で以下を合わせる必要がありますが、異なっていると今回のエラーが発生します。

  • 使用しているイメージのプラットフォーム
  • ECSタスクのプラットフォーム

DockerイメージにはAMDとARMの2種類のプラットフォームがあり、M1 MACではデフォルトでARMを選択します。一方で、タスク定義のデフォルトはAMDなので、プラットフォームを指定しなければいけません。

プラットフォーム指定するには以下のどちらかで可能です。順番に解説していきます。

  • イメージ作成時にプラットフォームを指定する
  • タスク定義をイメージのプラットフォームに合わせる
Takaharu Niki

・Webエンジニア6年目。
・バックエンドを中心に、フロントエンドやDevOps業務も経験。
・現在は、自社サービス企業のテックリードとして従事。

Takaharu Nikiをフォローする

Dockerイメージ作成時にプラットフォームを指定してexec format errorを解消する

3パターン紹介します。

  • Dockerfileで指定する
  • compose.yamlで指定する
  • dockerコマンド実行時に指定する

Dockerfileで指定する

以下のように指定します。

FROM --platform=linux/x86_64 mysql:8.0

compose.yamlで指定する

以下のように指定します。

services:
  service:
    image: mysql:8.1
    platform: linux/x86_64

dockerコマンド実行時に指定する

以下のようにビルドします。

docker build --platform PLATFORM DOCKER_FILE_PATH

docker build --platform linux/x86_64 ./

ECSタスク定義をイメージのプラットフォームに合わせてexec format errorを解消する

タスク定義ファイルを以下のように設定します。

今回はruntimePlatformにARMを指定しています。

{
  "containerDefinitions": [
  ],
  "runtimePlatform": {
    "cpuArchitecture": "ARM64",
    "operatingSystemFamily": "LINUX"
  }
}

まとめ

今回は、ECS(Fargate)でexec format errorが出た時のトラブルシュートを紹介しました。

Takaharu Niki

・Webエンジニア6年目。
・バックエンドを中心に、フロントエンドやDevOps業務も経験。
・現在は、自社サービス企業のテックリードとして従事。

Takaharu Nikiをフォローする
AWS
Takaharu Nikiをフォローする
アントレプログラマー
タイトルとURLをコピーしました