LoginSignup
1
0

AWS CopilotでARM利用時のpipelineのpost_deploymentとpre_deploymentのcopilotコマンド利用時のハマりどころ

Last updated at Posted at 2023-12-23

この記事は リンクバルアドベントカレンダー2023 の20日目の記事です。

昨日は @Thang_TQ さんの記事です!

はじめに

AWS Copilotで、ARMのFargate利用時に、Pipelineの pre_deploymentpost_deployment で copilotコマンドを使うことがあり、少しハマったことと解決策を紹介します。

前提

ARMのFargateを使う(Serviceのmanifest.ymlの platformlinux/arm64 にしている)場合の話です。

詳細は私の次の記事をご覧ください。

とはいえ要点は以下の2点なので、とりあえずこれだけ把握してもらえればOKです。

  1. pipelineの manifest.yml で、CodeBuildのイメージにARMのイメージを指定する
  2. copilot/pipelines/xxx/buildspec.yml のcopilotコマンドのインストールは、ARM版のURLを指定する

ハマったことと原因

  • pre_deploymentpost_deployment では build.image を指定できない(v1.32.1時点)
  • そのため、pre_deploymentpost_deployment でcopilotコマンドを使うとき、該当のbuildspecファイルを copilot/pipelines/xxx/manifest.yml と同じにしてしまうと、copilotコマンドがエラーになる
    • ARMのcopilotコマンドなのに、x86のCodeBuildが実行しようとするため
      • copilotコマンドをARM版にしている理由は、前提 に記載した私の記事をご覧ください
  • また、AWSマネジメントコンソールやaws-cliで pre_deploymentpost_deployment のCodeBuildのイメージを変えても、copilot pipeline deploy すると、イメージがデフォルトの aws/codebuild/amazonlinux2-x86_64-standard:4.0 に変わってしまう
    • つまり、x86のイメージになってしまう

解決方法

pre_deploymentpost_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のファイルを見てください。
公式ドキュメントで一覧を見つけることは私はできませんでした。

該当箇所のコード

copilot-cli/internal/pkg/template/workload.go
// 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を使うとコストは減るが苦労が増える・・・

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0