GCPを始める ~Deployment Manager~

GCP の Deployment Manager を触ってみる。

自動で環境を構築することができるみたいである。 今までやってきたことを GCP Console ではなく、Deployment Manager でやったらどうなるか、ということを試して行きたいと思う。

cloud.google.com

前提条件

  • GCP のアカウントを登録していること
  • 1つ以上のプロジェクトを作成していること
  • GCP プロジェクトに対して課金が有効になっていること

ゴール

下記と同等の状態を構築することをゴールとする。

作成手順

Google Cloud Shell へ接続します。 f:id:saito_shion:20200327114349p:plain YAML ファイルを作成します。

$ touch deploy.yml

下記をdeploy.pyにコピーアンドペーストする。
※[Your Project Id] は、GCP のプロジェクト ID を指定してください。
※[Your Service Account] は、Compute Engine のサービスアカウントを指定してください。

resources:
- type: compute.v1.network
  name: app2-network
  properties:
    autoCreateSubnetworks: false
    routingConfig:
      routingMode: REGIONAL
- type: compute.v1.subnetwork
  name: app2-sub
  properties:
    network: https://compute.googleapis.com/compute/v1/projects/[Your Project Id]/global/networks/app2-network
    ipCidrRange: 10.0.3.0/24
    region: us-west1
  metadata:
    dependsOn:
    - app2-network
- type: compute.v1.firewall
  name: ce-allow-ssh
  properties:
    network: https://compute.googleapis.com/compute/v1/projects/[Your Project Id]/global/networks/app2-network
    priority: 1000
    sourceRanges:
    - 0.0.0.0/0
    allowed:
    - IPProtocol: tcp
      ports:
      - 22
    direction: INGRESS
    logConfig:
      enable: false
    disabled: false
  metadata:
    dependsOn:
    - app2-network
- type: compute.v1.firewall
  name: ce-allow-icmp
  properties:
    network: https://compute.googleapis.com/compute/v1/projects/[Your Project Id]/global/networks/app2-network
    priority: 1000
    sourceRanges:
    - 0.0.0.0/0
    allowed:
    - IPProtocol: icmp
    direction: INGRESS
    logConfig:
      enable: false
    disabled: false
  metadata:
    dependsOn:
    - app2-network
- type: compute.v1.firewall
  name: ce-allow-flask
  properties:
    network: https://compute.googleapis.com/compute/v1/projects/[Your Project Id]/global/networks/app2-network
    priority: 1000
    sourceRanges:
    - 0.0.0.0/0
    allowed:
    - IPProtocol: tcp
      ports:
      - 5000
    direction: INGRESS
    logConfig:
      enable: false
    disabled: false
  metadata:
    dependsOn:
    - app2-network
- type: compute.v1.instance
  name: instance-2
  properties:
    status: RUNNING
    zone: us-west1-b
    machineType: https://www.googleapis.com/compute/v1/projects/[Your Project Id]/zones/us-west1-b/machineTypes/f1-micro
    disks:
    - deviceName: instance-2
      type: PERSISTENT
      mode: READ_WRITE
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/family/centos-7
        diskSizeGb: 10
        diskType: https://www.googleapis.com/compute/v1/projects/[Your Project Id]/zones/us-west1-b/diskTypes/pd-standard
    networkInterfaces:
    - network: https://www.googleapis.com/compute/v1/projects/[Your Project Id]/global/networks/app2-network
      subnetwork: https://www.googleapis.com/compute/v1/projects/[Your Project Id]/regions/us-west1/subnetworks/app2-sub
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT
    serviceAccounts:
    - email: [Your Service Account]
      scopes: https://www.googleapis.com/auth/cloud-platform
  metadata:
    dependsOn:
    - app2-network
    - app2-sub

下記のコマンドを実行します。

$ gcloud deployment-manager deployments create quickstart --config deploy.yml

f:id:saito_shion:20200327134128p:plain

削除手順

Google Cloud Shell へ接続し、下記のコマンドを実行します。

$ gcloud deployment-manager deployments delete quickstart

f:id:saito_shion:20200327142608p:plain

困ったときは

公式ドキュメントには詳細な書き方とか、どうしたらいいか、ということはあまり書いていない。

困ったときは、下記を探してリンクを開くと良い。JSONベースで記述を参照でき、これを YAML ファイルにコピペすることができる。 f:id:saito_shion:20200327143705p:plain

終わりに

Redis と Bigtable は自動化できないようである、ショック。

まぁ、最低限のことは自動化できるようなので、利用する価値はある。GCP が今後拡張してくれることを祈るばかりである。

参考サイト

https://cloud.google.com/deployment-manager/docs/configuration/supported-resource-types