🐡

【Terraform】Parameter Storeで最新のAmazon Linux AMIを自動取得

2024/07/28に公開

はじめに

検証などでインスタンスを立てる際、最新のAMIを調べて入力するのは手間がかかります。Terraformを用いてAWS Systems Manager Parameter Storeから自動的に最新のAMI IDを取得し、利用する方法をまとめました。これにより、手動での更新作業から解放され、効率的なリソース管理が可能になります。

前提知識

Amazon Machine Image (AMI)

AMIとは、Amazon EC2インスタンスを起動するためのテンプレートです。OSやインストールされたアプリケーション、設定など、インスタンス起動に必要な情報が含まれています。AMI IDは、特定のAMIを一意に識別するためのIDです。

AWS Systems Manager Parameter Store

AWS Systems Manager Parameter Storeは、AWS環境内で頻繁に更新が必要な情報を管理するためのサービスです。特に、最新のAmazon Linux AMI IDのような情報を安全に保存し、自動的に取得できるようにするために非常に有効です。Parameter Storeを使用することで、手動での更新作業を省略し、常に最新の情報を利用できます。例えば、最新のAmazon Linux AMI IDは、/aws/service/ami-amazon-linux-latest/以下に保存されています。

Terraformとは

Terraformは、インフラストラクチャをコードとして管理するためのツールです。このツールを使うことで、クラウドリソースの設定、展開、管理を自動化できます。

Terraformの設定

プロバイダの設定

TerraformでAWSリソースを管理するには、AWSプロバイダの設定が必要です。以下のコードは、TerraformがAWSと連携するための基本的な設定を示しています。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

最新のAmazon Linux AMI IDの自動取得

Parameter StoreからのAMI ID取得
AWS Systems Manager Parameter Storeを使用して、最新のAmazon Linux 2のAMI IDを取得するためのTerraformの設定は以下の通りです。

data "aws_ssm_parameter" "amzn2_latest" {
  name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
}

ここでnameはParameter Storeに保存されているパラメータの名前を指します。このコードでは、data "aws_ssm_parameter"を使用して、特定のパラメータをParameter Storeから取得しています。dataブロックは、Terraformに対して「指定した情報を取得する」指示を出すもので、ここでは最新のAmazon Linux AMI IDを取得するために使用されています。

  • /aws/service/ami-amazon-linux-latest: この部分は、Amazon Linux AMIの最新バージョンが保存されているカテゴリーを表します。
  • /amzn2-ami-hvm-x86_64-gp2: これは、具体的なAMIのタイプを指し、Amazon Linux 2のHVMバージョン、x86_64アーキテクチャ用の汎用(gp2)AMIです。

EC2インスタンスの作成

取得したAMI IDを使用してEC2インスタンスを自動的に最新の状態で起動するためのTerraformコードです。

resource "aws_instance" "example" {
  ami           = data.aws_ssm_parameter.amzn2_latest.value
  instance_type = "t2.micro"

  tags = {
    Name = "terraform-example"
  }
}
  • resource "aws_instance" "example"
    この行は、Terraformに対して新しいAWS EC2インスタンスを作成するリソースブロックの開始を示しています。
    • resourceは、Terraformに新しいリソースを定義することを指示します。
    • "aws_instance"は、リソースのタイプを示しており、ここではEC2インスタンスを意味します。
    • "example"は、このリソースに付けられた名前であり、Terraform構成内で一意に識別するために使用されます。この名前は任意です。
  • ami = data.aws_ssm_parameter.amzn2_latest.value
    この行は、作成するEC2インスタンスに使用するAMI IDを指定しています。
    • amiは、EC2インスタンスを起動するために使用するAmazon Machine Image (AMI) IDを指定する属性です。
    • data.aws_ssm_parameter.amzn2_latest.valueは、前のステップでParameter Storeから取得した最新のAmazon Linux 2 AMI IDを参照しています。
  • instance_type = "t2.micro"
    この行は、作成するEC2インスタンスのタイプを指定しています。
    • instance_typeは、EC2インスタンスのハードウェアの設定を定義する属性です。
    • "t2.micro"は、選択したインスタンスのタイプを示します。t2.microは、AWSの無料利用枠で提供される小規模なインスタンスタイプで、低コストで基本的な使用に適しています。

まとめ

この設定を行うことで、Terraformを使用してAWS Systems Manager Parameter Storeから自動的に最新のAMI IDを取得し、それを利用することが可能になります。これにより、AMI IDの手動更新の必要がなくなり、インフラストラクチャの管理が大幅に効率化されます。AWS Systems Manager Parameter Storeの活用は、Terraformを用いたリソース管理のキーポイントと言えるでしょう。

Discussion