📌

Armアーキテクチャへの移行

2024/12/23に公開

やったこと

下記AWSリソースのArm移行

  • ECS
  • RDS

前提

使用リソース

  • CodeBuild
  • CloudFormation

ざっくり説明

ECSonFargateで運用されているアプリケーションのプロセッサを、Armアーキテクチャを採用したGravitonに移行しました。
移行理由は下記2点です。

  • x86よりもパフォーマンスに優れていること
  • x86よりも利用料金が安いこと

RDS

https://aws.amazon.com/jp/rds/instance-types/

スナップショットを取得したあと、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