aws-ami-builder について
Packer の `amazon-ebs` ビルダーで Amazon Machine Image を作成するスキルです。クラウドエンジニア向けに、テンプレート、ソース AMI の絞り込み、AWS 認証、ビルド検証を扱います。
主な機能
- 01Packer `amazon-ebs` テンプレート
- 02Ubuntu と Amazon Linux のフィルター
- 03AWS 認証情報の設定
- 04テンプレート検証とビルドコマンド
活用シーン
- 01Ubuntu または Amazon Linux からの AMI 作成
- 02複数の AWS リージョンでの AMI ビルド
- 03SSH、命名、ボリュームの問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ hashicorp/ agent-skills --skill aws-ami-builderインストール後、Claude Code で/aws-ami-builderを入力して読み込まれたか確認します。
詳細
AWS AMI ビルダー
Packer の amazon-ebs ビルダーを使用して Amazon マシンイメージ(AMI)を作成します。
リファレンス: Amazon EBS ビルダー
注: AMI の作成には AWS の料金が発生します(EC2 インスタンス、EBS ストレージ、データ転送)。プロビジョニングの複雑さによりますが、通常、ビルドには 10~30 分かかります。
基本的な AMI テンプレート
packer {
required_plugins {
amazon = {
source = "github.com/hashicorp/amazon"
version = "~> 1.3"
}
}
}
variable "region" {
type = string
default = "us-west-2"
}
locals {
timestamp = regex_replace(timestamp(), "[- TZ:]", "")
}
source "amazon-ebs" "ubuntu" {
region = var.region
instance_type = "t3.micro"
source_ami_filter {
filters = {
name = "ubuntu/images/*ubuntu-jammy-22.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"] # Canonical
}
ssh_username = "ubuntu"
ami_name = "my-app-${local.timestamp}"
tags = {
Name = "my-app"
BuildDate = local.timestamp
}
}
build {
sources = ["source.amazon-ebs.ubuntu"]
provisioner "shell" {
inline = [
"sudo apt-get update",
"sudo apt-get upgrade -y",
]
}
}
よく使用されるソース AMI フィルター
Ubuntu 22.04 LTS
source_ami_filter {
filters = {
name = "ubuntu/images/*ubuntu-jammy-22.04-amd64-server-*"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"] # Canonical
}
Amazon Linux 2023
source_ami_filter {
filters = {
name = "al2023-ami-*-x86_64"
root-device-type = "ebs"
virtualization-type = "hvm"
}
most_recent = true
owners = ["amazon"]
}
マルチリージョン AMI
source "amazon-ebs" "ubuntu" {
region = "us-west-2"
instance_type = "t3.micro"
source_ami_filter {
filters = {
name = "ubuntu/images/*ubuntu-jammy-22.04-amd64-server-*"
}
most_recent = true
owners = ["099720109477"]
}
ssh_username = "ubuntu"
ami_name = "my-app-${local.timestamp}"
# Copy to additional regions
ami_regions = ["us-east-1", "us-east-2", "eu-west-1"]
}
認証
Packer は AWS の認証情報を次の順序で解決します。
- 環境変数:
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY - AWS 認証情報ファイル:
~/.aws/credentials - IAM インスタンスプロファイル(EC2 で実行する場合)
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_REGION="us-west-2"
packer build .
ビルドコマンド
# Initialize plugins
packer init .
# Validate template
packer validate .
# Build AMI
packer build .
# Build with variables
packer build -var "region=us-east-1" .
よくある問題
SSH のタイムアウト
- セキュリティグループで SSH(ポート 22)が許可されていることを確認します
- サブネットからインターネットにアクセスできることを確認します
AMI がすでに存在する
- AMI 名は一意である必要があります
- 名前にタイムスタンプを使用します:
my-app-${local.timestamp}
ボリュームサイズが小さすぎる
- ソース AMI のボリュームサイズを確認します
launch_block_device_mappings.volume_sizeを適切な値に設定します
リファレンス
コメント
Markdown 対応