【Terraform】Parameter Storeで最新のAmazon Linux AMIを自動取得
はじめに
検証などでインスタンスを立てる際、最新の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