この記事は リンクバルアドベントカレンダー2023 の18日目の記事です。
3日連続AWS Copilotの記事です!
16日
17日
はじめに
コスト削減やサステナビリティで電気代削減のため?に、AWS CopilotのFargateのアーキテクチャをARMにしたい方、いいですね!
しかし、Serviceの manifest.yml
で platform: linux/arm64
にするだけではだめです。
より正確には、Pipelineを使う場合はだめです。
CopilotのPipelineは、自動でARMに対応してくれるなんてことはありません(v1.28くらいの時点では)。
対応が必要なこと
以下の2つが必要です。
- pipelineの
manifest.yml
で、CodeBuildのイメージにARMのイメージを指定する -
copilot/pipelines/xxx/buildspec.yml
のcopilotコマンドのインストールは、ARM版のURLを指定する
pipelineの manifest.yml
で、CodeBuildのイメージにARMのイメージを指定する
platform: linux/arm64
を指定した場合、ARMアーキテクチャでDocker buildする必要があります。
※それ以外の方法もあります。Docker Buildxを使うなど。
pipelineの manifest.yml
は build.image
という項目を設定できます。
公式ドキュメント
v1.32.1時点では、次のように書かれています。
CodeBuild のビルドプロジェクトで利用する Docker イメージの URI。aws/codebuild/amazonlinux2-x86_64-standard:4.0 がデフォルトで利用されます。
x86_64
だと!?
ここがハマりどころで、この項目に気づかない限り、pipelienのbuild stageが一生失敗します。
次のように manifest.yml
を編集しましょう。
# 略
build:
image: aws/codebuild/amazonlinux2-aarch64-standard:3.0 # ここでARMのイメージを指定する。バージョンは必要なランタイムに応じて変えてください。
# 略
指定できる値はこちらをご覧ください。
copilot/pipelines/xxx/buildspec.yml
のcopilotコマンドのインストールは、ARM版のURLを指定する
CodeBuildをARMにしたら、そこで動くバイナリもARM版にする必要があります。
copilot/pipelines/xxx/buildspec.yml
は、自動生成のものだとx86版のcopilotコマンドをインストールするようになっています。
そこを、ARM版に変えましょう。
# 略
phases:
install:
runtime-versions:
# 略
commands:
- echo "cd into $CODEBUILD_SRC_DIR"
- cd $CODEBUILD_SRC_DIR
# Download the copilot linux binary.
- wget -q https://ecs-cli-v2-release.s3.amazonaws.com/copilot-linux-arm64 -O copilot-linux
- chmod +x ./copilot-linux
ここまでやれば、CopilotのPipelineが成功します!
おわりに
おわり