AWS CloudFormationでマッピングを利用してリジョンに適したAMIを使用する方法

AWS CloudFormationでマッピングを利用してリジョンに適したAMIを使用する方法

Clock Icon2025.02.03

CloudFormation のマッピング機能を利用して、各リージョンに適した AMI を自動的に選択する方法です


AWS CloudFormationでリージョン別 AMI を自動選択する方法

AWS で EC2 インスタンスをデプロイする際、各リージョンごとに AMI(Amazon Machine Image)が異なることをご存知でしょうか?
この問題を手動で解決するのは大変ですが、CloudFormation の マッピング 機能を使えば、リージョンに応じた適切な AMI を自動的に選択することができます。


AWS CloudFormation マッピング機能の概要

CloudFormation の マッピング は、リージョンや環境ごとの設定値をテンプレート内で定義しておく仕組みです。

これによって各リージョンで異なる AMI ID を使用することが可能になります
今回は、リージョンに合わせた AMI の選択する方法にご紹介いたします。


テンプレート例:リージョン毎に異なる AMI を選択

以下は、CloudFormation の マッピング 機能を利用して、リージョンに合わせた Amazon Linux 2 の AMI を選択する YAML テンプレートの例です。

AWSTemplateFormatVersion: '2010-09-09'
Description: >
  CloudFormation の マッピング を利用して、各リージョンに合う AMI を選択するサンプルテンプレート

Mappings:
  RegionMap:
    us-east-1:
      AMI: ami-0c94855ba95c71c99  # Amazon Linux 2 の AMI (例)
    us-west-2:
      AMI: ami-0abcdef1234567890  # 別リージョンの AMI
    eu-west-1:
      AMI: ami-0123456789abcdef0  # ヨーロッパリージョンの AMI
    ap-northeast-1:
      AMI: ami-0fedcba9876543210  # 東京リージョンの AMI

Resources:
  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t3.micro
      # 現在のリージョンに合わせて Mappings から AMI を取得
      ImageId: !FindInMap 
        - RegionMap
        - !Ref "AWS::Region"
        - AMI
      KeyName: my-keypair
      Tags:
        - Key: Name
          Value: MyInstance

テンプレート解説

  1. Mappings セクション

    • RegionMap マッピングに、各リージョンごとの AMI ID を定義しています。
    • 例として、us-east-1ap-northeast-1 など複数のリージョンに対して AMI を設定。
  2. !FindInMap 関数

    • ImageId プロパティでは、!FindInMap 関数を使って現在のリージョン(AWS::Region)に対応する AMI を取得。
    • これにより、スタック作成時に自動的に適切な AMI が選ばれます。
  3. リソースの定義

    • サンプルでは、EC2 インスタンス (MyEC2Instance) を定義し、インスタンス作成時にリージョン別の AMI を使用しています。

マッピング機能を利用するメリット

  • 自動化と再利用性の向上
    テンプレート内にマッピングを定義することで、同じテンプレートを異なるリージョンで再利用できます。
    デプロイ先のリージョンに合わせた設定が自動的に適用されるため、手動で AMI を切り替える必要がなくなります。

  • 環境ごとの柔軟な設定
    開発環境と本番環境、またはリージョンごとに異なる設定をマッピングに含めることで、1 つのテンプレートで複数の環境に対応ができます。

  • エラーの削減
    手動での AMI ID の指定ミスやリージョン間の設定の不整合を防止し、正確なデプロイが実現できます。


まとめ

CloudFormation の マッピング 機能を利用すれば、各リージョンに合わせた適切な AMI を自動で選択することができます。
この記事では、リージョンごとに異なる AMI をマッピングで定義し、!FindInMap 関数を使って自動的に参照する方法をご紹介しました。


アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイト をぜひご覧ください

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.