📌
Armアーキテクチャへの移行
やったこと
下記AWSリソースのArm移行
- ECS
- RDS
前提
使用リソース
- CodeBuild
- CloudFormation
ざっくり説明
ECSonFargateで運用されているアプリケーションのプロセッサを、Armアーキテクチャを採用したGravitonに移行しました。
移行理由は下記2点です。
- x86よりもパフォーマンスに優れていること
- x86よりも利用料金が安いこと
RDS
スナップショットを取得したあと、t3からt4gに変更します。
ECS
CodeBuildのAMI(Amazon Machine Image)を変更します。
※本題と関係のないところは省略しています。
CodeBuildProject:
Type: AWS::CodeBuild::Project
Properties:
Environment:
- Type: LINUX_CONTAINER
- Image: aws/codebuild/amazonlinux2-x86_64-standard:5.0
+ Type: ARM_CONTAINER
+ Image: aws/codebuild/amazonlinux2-aarch64-standard:3.0
次にタスク定義を変更します。
EcsTaskDefinition:
Type: AWS::ECS::TaskDefinition
Properties:
NetworkMode: awsvpc
RequiresCompatibilities:
- FARGATE
RuntimePlatform:
OperatingSystemFamily: LINUX
- CpuArchitecture: X86_64
+ CpuArchitecture: ARM64
リリース手順
-
手順1
ビルドからデプロイはCodePipelineで実装していたので、まずはビルドステージからデプロイステージへの移行を無効にします。
-
手順2
デプロイをします。
ビルドステージでArmアーキテクチャでビルドされたイメージがECRにpushされるまで実行され、デプロイ自体は実行されません。 -
手順3
タスク定義のリソースをCloudFormationで更新します。 -
手順4
CodePipelineでビルドステージからデプロイステージへの移行を有効にします。
まとめ
思ったより簡単にできました!
たったこれだけの作業でFargateの費用が20%削減されるのはコスパ良いですね!
Discussion