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などの形式でエクスポートすることもできます。