Packerを使ってCompute Engineのマシンイメージを作成し、Google Cloud上のプロジェクトに保存する方法です。
前提:Packerのインストールが済んでいること、Google Cloudのプロジェクト作成が済んでいること
注意:PROJECT_NAMEは各自の環境に置き換えてください。
まずはマシンイメージ作成用のサービスアカウント(machin-builder@PROJECT_NAME.iam.gserviceaccount.com)を作成
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 マシンイメージが作成済みでも上書きできます。
作成できたらCompute Engine のイメージから確認できます。
ちなみに作ったイメージはCloud StorageにVMDKなどの形式でエクスポートすることもできます。