この記事は リンクバルアドベントカレンダー2023 の20日目の記事です。
昨日は @Thang_TQ さんの記事です!
はじめに
AWS Copilotで、ARMのFargate利用時に、Pipelineの pre_deployment と post_deployment で copilotコマンドを使うことがあり、少しハマったことと解決策を紹介します。
前提
ARMのFargateを使う(Serviceのmanifest.ymlの platform で linux/arm64 にしている)場合の話です。
詳細は私の次の記事をご覧ください。
とはいえ要点は以下の2点なので、とりあえずこれだけ把握してもらえればOKです。
- pipelineの manifest.yml で、CodeBuildのイメージにARMのイメージを指定する
- copilot/pipelines/xxx/buildspec.yml のcopilotコマンドのインストールは、ARM版のURLを指定する
ハマったことと原因
-
pre_deploymentとpost_deploymentではbuild.imageを指定できない(v1.32.1時点) - そのため、
pre_deploymentとpost_deploymentでcopilotコマンドを使うとき、該当のbuildspecファイルをcopilot/pipelines/xxx/manifest.ymlと同じにしてしまうと、copilotコマンドがエラーになる- ARMのcopilotコマンドなのに、x86のCodeBuildが実行しようとするため
- copilotコマンドをARM版にしている理由は、
前提に記載した私の記事をご覧ください
- copilotコマンドをARM版にしている理由は、
- ARMのcopilotコマンドなのに、x86のCodeBuildが実行しようとするため
- また、AWSマネジメントコンソールやaws-cliで
pre_deploymentやpost_deploymentのCodeBuildのイメージを変えても、copilot pipeline deployすると、イメージがデフォルトのaws/codebuild/amazonlinux2-x86_64-standard:4.0に変わってしまう- つまり、x86のイメージになってしまう
解決方法
pre_deployment と post_deployment の CodeBuildのyamlでは、copilotコマンドはx86版を使う
# ARMではなく
wget -q https://ecs-cli-v2-release.s3.amazonaws.com/copilot-linux-arm64 -O copilot-linux
# x86をインストールする
wget -q https://ecs-cli-v2-release.s3.amazonaws.com/copilot-linux -O copilot-linux
FargateがARMでも、docker build が動くコマンドでなければ、ほとんどはx86版のcopilotコマンドでも動きます!
copilot run task をしたい場合
--platform-arch というオプションがあるので、そちらを使いましょう!
以下はすべて2023年12月23日時点です。
指定できる値は、GitHubのファイルを見てください。
公式ドキュメントで一覧を見つけることは私はできませんでした。
該当箇所のコード
// Constants for workload options.
const (
// AWS VPC networking configuration.
EnablePublicIP = "ENABLED"
DisablePublicIP = "DISABLED"
PublicSubnetsPlacement = "PublicSubnets"
PrivateSubnetsPlacement = "PrivateSubnets"
// RuntimePlatform configuration.
OSLinux = "LINUX"
OSWindowsServerFull = OSWindowsServer2019Full // Alias 2019 as Default WindowsSever Full platform.
OSWindowsServerCore = OSWindowsServer2019Core // Alias 2019 as Default WindowsSever Core platform.
OSWindowsServer2019Full = "WINDOWS_SERVER_2019_FULL"
OSWindowsServer2019Core = "WINDOWS_SERVER_2019_CORE"
OSWindowsServer2022Full = "WINDOWS_SERVER_2022_FULL"
OSWindowsServer2022Core = "WINDOWS_SERVER_2022_CORE"
ArchX86 = "X86_64"
ArchARM64 = "ARM64"
)
いずれコードは変わるでしょうから、上記リンク先に記載が場合は、copilot-cliのリポジトリで WINDOWS_SERVER_2022_CORE で検索してみてください!
以下は検索結果のURLです。
おわりに
ARMを使うとコストは減るが苦労が増える・・・