目次
Trick or Treat!! grasys加藤です。
前回、インスタンスの作成方法を3つご紹介しました。
[3つの方法でGoogle Compute Engineでインスタンスを作成する] (http://blog.grasys.io/post/kyouhei/createinstances/)
今回はGoogleが提供する Cloud Deployment Manager を使ってインスタンスを作成してみます。
Cloud Deployment Managerを使うとGoogle Compute Engine上のインスタンスに限らず、Google Cloud (GCP) Storage, Google Container Engine, BigQueryなどGoogleプラットフォームでのリソースをYAMLで管理することが出来ます。
この YAMLで管理 という点がデプロイメントでは非常に重要です。再現可能、再利用可能、可読性も良いですね。
インスタンス作成
さっそくインスタンスを作成します。スペックは以下の通りとします。
名前: grasys-deployment-test01
ゾーン: asia-northeast1-a
マシンタイプ: g1-small
イメージ: rhel-7-v20171025
外部IP: NAT
このスペックをYAMLでの設定に落とすと次のようになります。
resources:
- type: compute.v1.instance
name: grasys-deployment-test01
properties:
zone: asia-northeast1-a
machineType: https://www.googleapis.com/compute/v1/projects/[PROJECT]/zones/asia-northeast1-a/machineTypes/g1-small
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20171025
networkInterfaces:
- network: https://www.googleapis.com/compute/v1/projects/[PROJECT]/global/networks/default
accessConfigs:
- name: External NAT
type: ONE_TO_ONE_NAT
ちょっとAPIを書かせたり嫌な感じです。
このYAMLを適当なファイルで作成します。ひとまず test01.yaml にしてみました。 [PROJECT]はお使いのGoogle Cloud (GCP) PlatformのProjectIdを入れて下さいね。
gcloudコマンドでデプロイします。
$ gcloud deployment-manager deployments create test01-deployment --config test01.yaml
The fingerprint of the deployment is CANz1JihS0_-oGDh48vjRQ==
Waiting for create [operation-1509429100388-55cd159579ea1-2290634c-712b5e30]...done.
Create operation operation-1509429100388-55cd159579ea1-2290634c-712b5e30 completed successfully.
NAME TYPE STATE ERRORS INTENT
grasys-deployment-test01 compute.v1.instance COMPLETED []
成功しました。
インスタンスが作成されていることがわかります。
$ gcloud compute instances list --filter grasys-deployment-test01
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
grasys-deployment-test01 asia-notrheast1-a g1-small 10.XXX.X.X XXX.XXX.XXX.XXX RUNNING
template機能
次にtemplate機能を使ってみます。
おもむろにさきほどのYAMLをtemplate化します。インスタンス名は変数定義に変えておきます。
$ cp -p test01.yaml template.jinja
$ sed -e "s/name: grasys-deployment-test01/name: {{ env[\"name\"] }}/" -i template.jinja
$ cat template.jinja
resources:
- type: compute.v1.instance
name: {{ env["name"] }}
properties:
zone: asia-northeast1-a
machineType: https://www.googleapis.com/compute/v1/projects/clean-monitor-760/zones/asia-northeast1-a/machineTypes/g1-small
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20171025
networkInterfaces:
- network: https://www.googleapis.com/compute/v1/projects/clean-monitor-760/global/networks/default
accessConfigs:
- name: External NAT
type: ONE_TO_ONE_NAT
templateはYAMLに近い形式のjinjaの他にpythonも使えますので、得意な方で作成するのが良いと思います。
次にtemplateを呼び出すYAMLを作成しましょう。名前はtemplate.yamlとしました。
imports:
- path: template.jinja
resources:
- name: grasys-template-test01
type: template.jinja
- name: grasys-template-test02
type: template.jinja
deployしてみましょう。
$ gcloud deployment-manager deployments create template-deployment --config template.yaml
The fingerprint of the deployment is 30iQy6P6ZeCapJ2cwraGaQ==
Waiting for create [operation-1509433148574-55cd24aa20930-c6868a0a-587101ca]...done.
Create operation operation-1509433148574-55cd24aa20930-c6868a0a-587101ca completed successfully.
NAME TYPE STATE ERRORS INTENT
grasys-template-test01 compute.v1.instance COMPLETED []
grasys-template-test02 compute.v1.instance COMPLETED []
今度は同じ構成のインスタンスが2つできていることが確認できます。
$ gcloud compute instances list --filter grasys-template
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
grasys-template-test01 asia-notrheast1-a g1-small 10.XXX.X.X XXX.XXX.XXX.XXX RUNNING
grasys-template-test02 asia-notrheast1-a g1-small 10.XXX.X.X XXX.XXX.XXX.XXX RUNNING
最後に環境をキレイにクリーンアップしましょう。
$ gcloud deployment-manager deployments delete template-deployment
The following deployments will be deleted:
- template-deployment
Do you want to continue (y/N)? y
Waiting for delete [operation-1509438271562-55cd37bfca111-26e52a27-980b3018]...done.
Delete operation operation-1509438271562-55cd37bfca111-26e52a27-980b3018 completed successfully.
$ gcloud deployment-manager deployments delete test01-deployment
まとめ
今回はGoogle Deployment Managerを使ってインスタンスを作成してみました。
こちらのコマンドでGoogle Deployment Managerがサポートしているリソースの一覧を取得することが可能です。
$ gcloud deployment-manager types list
実に多い!
株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。
grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。
お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。