目次
grasys長谷川です!
GCEでのImage作成はめんどい
VM Instanceに関連付けられているDiskからImageは生成できない!
手順
- DiskのSnapshotを取得する
- SnapshotからDiskを生成する
- 上記で作成したDiskからImageを生成する
- 上記でテンポラリで作成したSnapshot, Diskを削除する
ほんとめんどい!
弊社加藤が書いているようにgrasysでは主にTerraformを活用しています。
Terraformを活用する上で、毎回Provisioningを流すのもいいけど
ケースバイケースかつメリット・デメリットあるんでポリシー次第かな・・・
DiskのSnapshotを取得する
Parameter | Description | Sample |
---|---|---|
[instance name] | Instanceの名前 | $HOSTNAME とか? |
[snapshot name] | Snapshotの名前 | temp_snapshot 今存在しない適当な名前でOK |
[zone] | Instance(というよりDisk)のZone | asia-east1-a とか |
gcloud compute disks snapshot [instance name] \
--snapshot-names [snapshot name] \
--zone [zone]
SnapshotからDiskを生成する
Parameter | Description | Sample |
---|---|---|
[disk name] | 生成するDiskの名前 | temp_disk 今存在しない適当な名前でOK |
[snapshot name] | Snapshotの名前 | temp_snapshot “DiskのSnapshotを取得する”で作成したsnapshot名 |
[zone] | 生成するDiskのZone | asia-east1-a とか |
[description] | 生成するDiskの説明 | grasys src disk とか適当でOK |
gcloud compute disks create [disk name] \
--source-snapshot [snapshot name] \
--zone [zone] \
--description [description]
上記で作成したDiskからImageを生成する
Parameter | Description | Sample |
---|---|---|
[image name] | 生成するImageの名前 | original_image 今存在しない適当な名前でOK |
[disk name] | ソースとなるDiskの名前 | temp_disk “SnapshotからDiskを生成する”で作成したDisk名 |
[zone] | ソースとなるDiskのZone | asia-east1-a SnapshotからDiskを生成する”で作成したDiskのZone |
[description] | 生成するImageの説明 | grasys original image とか適当でOK |
gcloud compute images create [image name] \
--source-disk [disk name] \
--source-disk-zone [zone] \
--description [description]
上記でテンポラリで作成したSnapshot, Diskを削除する
Parameter | Description | Sample |
---|---|---|
[snapshot name] | 生成したsnapshotの名前 | temp_snapshot “DiskのSnapshotを取得する”で作成したsnapshot名 |
[disk name] | 生成したDiskの名前 | temp_disk “SnapshotからDiskを生成する”で作成したDisk名 |
[zone] | 生成したDiskのZone | asia-east1-a “SnapshotからDiskを生成する”で作成したDiskのZone |
gcloud compute snapshots delete [snapshot name]
gcloud compute disks delete [disk name] \
--zone [zone]
めんどい・・・はげしくめんどい!
こんなことやってたら歳取ってしまう
1発で実行する
grasysではrerunというCommand Line Frameworkを利用しています。
rerunについては機会があれば説明しますが
簡単に説明するとModules/Commandsという形で体系的に管理してくれます。
ModulesのDirectoryを別途Gitで管理しており
別のところで作った/利用したrerunにModules化されたCommand群をどこでもgitの更新のみで利用できるようにしています。
ZONE=`curl -s -H "X-Google-Metadata-Request: True" -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/zone | xargs basename`
DATETIME=`date +%Y%m%d%H%M`
SNAPSHOTNAME="${HOSTNAME}-${DATETIME}"
IMAGENAME="${HOSTNAME}-${DATETIME}"
DISKNAME="temporary-disk-${DATETIME}"
gcloud compute disks snapshot ${HOSTNAME} \
--snapshot-names ${SNAPSHOTNAME} \
--zone ${ZONE}
gcloud compute disks create ${DISKNAME} \
--source-snapshot ${SNAPSHOTNAME} \
--zone ${ZONE} \
--description "grasys src disk"
gcloud compute snapshots delete --quiet ${SNAPSHOTNAME}
gcloud compute images create ${IMAGENAME} \
--source-disk ${DISKNAME} \
--source-disk-zone ${ZONE} \
--description "grasys src image"
gcloud compute disks delete \
--quiet ${DISKNAME} \
--zone ${ZONE}
VM Instanceのscopeに注意!
これで1発で実行できます。
grasysでは上で説明したとおりrerunで管理しているので
今の瞬間のInstanceのImageは以下で取得できます。
rerun gcp-images: current
取得したImageはTerraformに渡すなり
煮るなり焼くなり、Backup的な活用法なり適当に!
Google Cloud (GCP) Storageで公開バケットとか作って
gcloud sdkとかhomebrewとかtd-agentみたいに
http経由でshellに渡しても良いかもね
shellのcompletionが効かないから不便だし記憶できないし
どっかからshellにコピペするのもめんどくさいので
grasysではやりません
株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。
grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。
お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。