この記事は リンクバルアドベントカレンダー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を使うとコストは減るが苦労が増える・・・