AWS CodeBuild でエラー standard_init_linux.go:211: exec user process caused "exec format error"

AWSを使い始めてCodeBuild & ECS を試していた際、ECSのクラスター → タスクの画面でステータスが RUNNING になったと思ったらすぐ STOPPED になるを繰り返すエラーに遭遇しました。

f:id:zoo200:20200916014546p:plain


タスク → ログ を確認すると

f:id:zoo200:20200916014522p:plain

standard_init_linux.go:211: exec user process caused "exec format error"

というエラーが出力されており思いのほか時間を潰してしまいました...orz

原因

Dockerfileで使用していたイメージとCodebuildで指定したビルド環境のCPUアーキテクチャが異なっていたため。

【Dockerfile 例】

FROM httpd:2.4
COPY ./index.html /usr/local/apache2/htdocs/
CMD ["httpd-foreground"]

httpd:2.4 はアーキテクチャが指定されてないとamd64(x86-64) でビルドされます。


【AWSのビルド環境 例】
f:id:zoo200:20200916014506p:plain

手が滑ったのかよく見てなかったのかなんなのか、aarch64(arm64) を指定しておりhttpdイメージと異なるアーキテクチャであったためエラーとなっていた形でした。

この例では amazonlinux2-x86_64 のイメージを選択すれば正常にビルドが完了します。

なお、このエラーはentrypoint.sh に shebang(例: #!/bin/sh ) がないときも出るようです。

余談

Codebuildではもう一つ

Step 3/3 : CMD ["httpd-foreground"]
---> Running in 0672c1e1531e
Removing intermediate container 0672c1e1531e
---> f8cd04edae75
Successfully built f8cd04edae75
Successfully tagged test-2:latest

Running command docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
"docker tag" requires exactly 2 arguments.
See 'docker tag --help'.

Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Command did not exit successfully docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG exit status 1
Phase complete: BUILD State: FAILED

のように "docker tag" requires exactly 2 arguments.  というエラーにも遭遇しました。

公式サイトのサンプル通りbuildspec.ymlの設定を環境変数から読み込むようにしていたのですが、(自分の場合は)AWS_ACCOUNT_ID の最後に半角スペースが入っていたためでしたorz

先人の方々のおかげてすぐ抜け出せましたが(感謝)、自力解決だったらおそらく結構時間を浪費したとおもいます。なんかスペースが混じってるぅ系の問題だったので。。

まとめ

慌てず正確に入力・選択しましょう!の一言に尽きる。