mcpField
A
aws-ami-builder

aws-ami-builder

github.com/hashicorpクラウド・DevOps9093.2k 回インストール今日更新
リポジトリ

aws-ami-builder について

Packer の `amazon-ebs` ビルダーで Amazon Machine Image を作成するスキルです。クラウドエンジニア向けに、テンプレート、ソース AMI の絞り込み、AWS 認証、ビルド検証を扱います。

主な機能

  1. 01Packer `amazon-ebs` テンプレート
  2. 02Ubuntu と Amazon Linux のフィルター
  3. 03AWS 認証情報の設定
  4. 04テンプレート検証とビルドコマンド

活用シーン

  1. 01Ubuntu または Amazon Linux からの AMI 作成
  2. 02複数の AWS リージョンでの AMI ビルド
  3. 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 の認証情報を次の順序で解決します。

  1. 環境変数:AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY
  2. AWS 認証情報ファイル:~/.aws/credentials
  3. 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 を適切な値に設定します

リファレンス

コメント