コンテンツへスキップ

まずはマシンイメージ作成用のサービスアカウントを作成

gcloud iam service-accounts create machine-image-builder \
--display-name="Pakcerを使ったマシンイメージ作成用サービスアカウント" \
--project="PROJECT_NAME"

gcloud projects add-iam-policy-binding PROJECT_NAME \
--role roles/storage.admin \
--member serviceAccount:machine-image-builder@PROJECT_NAME.iam.gserviceaccount.com

gcloud projects add-iam-policy-binding PROJECT_NAME \
--role roles/compute.instanceAdmin.v1 \
--member serviceAccount:machine-image-builder@PROJECT_NAME.iam.gserviceaccount.com

gcloud projects add-iam-policy-binding PROJECT_NAME \
--role roles/compute.networkAdmin \
--member serviceAccount:machine-image-builder@PROJECT_NAME.iam.gserviceaccount.com

gcloud projects add-iam-policy-binding PROJECT_NAME \
--role roles/compute.securityAdmin \
--member serviceAccount:machine-image-builder@PROJECT_NAME.iam.gserviceaccount.com

gcloud projects add-iam-policy-binding PROJECT_NAME \
--role roles/iam.serviceAccountActor \
--member serviceAccount:machine-image-builder@PROJECT_NAME.iam.gserviceaccount.com

IAM の画面から確認して、5つの権限が付いていればOK

  • Compute インスタンス管理者(v1)
  • Compute セキュリティ管理者
  • Compute ネットワーク管理者
  • Service Account Actor
  • ストレージ管理者

サービス アカウント に移動し、作成したサービスアカウントから鍵(JSONファイル)をダウンロード

packer.json を作成し、account_fileの箇所でダウンロードしたJSONファイルを指定する

{
  "builders": [
    {
      "type": "googlecompute",
      "account_file": "./PROJECT_NAME-machine-image-builder.json",
      "project_id": "PROJECT_NAME",
      "source_image_family": "centos-7",
      "zone": "asia-northeast1-a",
      "disk_size": "20",
      "image_name": "hoge-fuga",
      "image_family": "hoge-test",
      "ssh_username": "hoge"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sudo yum install -y wget git",
        "sudo yum clean all"
      ]
    }
  ]
}

packer validate packer.json で文法チェック

packer build packer.json でビルド実行

packer build -force packer.json マシンイメージが作成済みでも上書きして実行