### [GCP自動化講習会(ハンズオン)]
# 「Google Cloud Deployment Manager による動的サイトの自動構築」
## 概要
> Google Cloud Deployment Manager は、Google Cloud リソースの作成と管理を自動化するインフラストラクチャ デプロイ サービスです。柔軟なテンプレートファイルと構成ファイルを作成し、それらを使用して、VPC、Compute Engine、Cloud SQL などのさまざまな Google Cloud サービスを連携させるように構成されたデプロイを作成します。
>
> [Google Cloud Deployment Manager のドキュメント](https://cloud.google.com/deployment-manager/docs?hl=ja#docs) より
## 目的
当講習会ではGoogle Cloud Deployment Manager およびCloud Shellを使用し、従来、個別に作成していたネットワークやインスタンス等のリソースを、自動で作成する仕組みを学習します。
## 前提事項
* [構成図スライド](https://hackmd.io/@nakajima-20220524/SkMLwrl83#/) の構成を元に環境を構築します。
## 必須環境
* Microsoft Windows、Mac OS(X以降)が搭載されているノートパソコンまたはデスクトップパソコンで、インターネットアクセスができること
* Microsoft Windowsユーザの場合は、コンピュータ管理者権限が付与されていること
* インターネットブラウザは以下のいずれかのブラウザを利用すること
Chrome, Firefox, Edge, Safari
## 注意事項
* <B><font color="red">Googleにプライベートアカウントでログインしている場合は、本講習会前に必ずログアウトをお願いします。
※GCPアカウントはGoogleアカウントと紐づいているため</font>
* GCPの [無料枠](https://cloud.google.com/free) でリソースを作成します。
* リソースの起動時間によって、無料枠を越えて使用した場合は課金が発生する可能性があります。
* 受講で利用しているGCPアカウントは、本講習内のみ有効とします。受講日以外ではログインできないようアクセス制限をしますのでご注意ください。※本講習会後に作成したリソースは強制的に停止させます。</B>
## ハンズオン目安時間
* 60分
## 1. Google Cloud Deployment Managerによる構築
Google Cloud Deployment ManagerはAWSのCloud Formationと似たサービスです。
Cloud Formationと同様にGCP各種リソースのデプロイを指定するYaml形式の構成ファイルを使用して、Google Cloud サービスと API を設定、デプロイ、および表示するためのサービスを提供します。
Yaml + Jinja または Python でテンプレートを作成することで、設定を使い回すことができます。
テンプレートは可読性のあるテキストとして記述するため、ソースコードとして管理できます。
このようにインフラリソースをソースコードで管理し、プロビジョニングを自動化することを IaC (Infrastructure as Code) と呼びます。
### 1.1. テンプレートの記述方法
ここでは、Google Cloud Deployment Managerの構成ファイルおよびテンプレートの記述方法について説明します。
### 1.1.1. 構成ファイル
構成ファイルは Yaml という形式で記述します。
Yaml 形式
```yaml=
resources:
- name: vm-created-by-deployment-manager
type: compute.v1.instance
properties:
zone: us-central1-a
machineType: zones/us-central1-a/machineTypes/n1-standard-1
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: projects/debian-cloud/global/images/family/debian-11
networkInterfaces:
- network: global/networks/default
```
### 1.1.2. テンプレート
簡単なワークロードの場合、基本的な構成ファイルで十分ですが、より複雑なアーキテクチャや再利用を行う構成の場合、構成を複数のテンプレートに分割できます。
テンプレートは、Jinja 2.10.x または Python 3.x で記述します。 YAML 構文により対応しているのは Jinja です。YAML に慣れている場合には、テンプレートを Jinja で作成するほうが簡単です。
① 1.1.1.の構成ファイルをJinja形式のテンプレートで作成する場合
```Jinja=
- name: vm-template
type: compute.v1.instance
properties:
zone: us-central1-a
machineType: zones/us-central1-a/machineTypes/n1-standard-1
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: projects/debian-cloud/global/images/family/debian-11
networkInterfaces:
- network: global/networks/default
```
② 1.1.1.の構成ファイルをPython形式のテンプレートで作成する場合
```Python=
resources.append({
'name': 'vm-template',
'type': 'compute.v1.instance',
'properties': {
'zone': 'us-central1-a',
'machineType': 'zones/us-central1-a/machineTypes/n1-standard-1',
'disks': [{
'deviceName': 'boot',
'type': 'PERSISTENT',
'boot': True,
'autoDelete': True,
'initializeParams': {
'sourceImage':
'projects/debian-cloud/global/images/family/debian-11'
}
}],
'networkInterfaces': [{
'network': 'global/networks/default'
}]
}
})
```
### 1.1.3. バージョン宣言
CloudFormationとは異なり、Google Cloud Deployment Managerではバージョン宣言は不要です。
### 1.1.4. リソースの定義
リソースは以下の例のように、リソース単位で記述します。
```yaml=
resources: # <- 必ず最初に Resources: を記述する
- name: vm-created-by-deployment-manager
type: compute.v1.instance # <- リソースタイプの指定。例ではGCEリソースとなる。
properties: # <- リソースプロパティタイプの指定。
zone: us-central1-a # <- Zoneの指定
machineType: zones/us-central1-a/machineTypes/n1-standard-1 # <- GCEのマシンタイプの指定
disks: # <- ディスクの指定
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: projects/debian-cloud/global/images/family/debian-11 # <- OSの指定
networkInterfaces: # <- ネットワークの指定
- network: global/networks/default
```
### 1.1.5. 構成ファイルからのインポート
テンプレートの利用をする際の記載は以下のとおりです。
```yaml=
imports:
- path: vm.jinja # <- テンプレートのJinjaをインポート
resources:
- name: hoge-vm
type: vm.jinja
properties:
zone: us-central1-a
machineType: f1-micro
sourceImage: projects/debian-cloud/global/images/family/debian-9
```
> リファレンス
> [基本テンプレートの作成]
> (https://cloud.google.com/deployment-manager/docs/configuration/templates/create-basic-template?hl=ja)
## 2. Google Cloud Deployment Manager 構成ファイルの作成
ここでは、Google Cloud Deployment Manager で使用する構成ファイルを作成します。
テンプレートファイルについてはGCPにて汎用的なテンプレートが用意されています。
本講習会ではパラメータ部分となる構成ファイルを作成し、GCPテンプレートと組み合わせてインフラ自動構築を行います。
テンプレートファイルは Windows であれば、メモ帳等のテキストエディタ(テキスト編集可能であれば何でも構いません)を使用して作成します。
テンプレートファイルの保存先として、任意の場所に gcp-work というフォルダを作成してください。
:::warning
* テンプレート内で (リージョンコード) と記述されている箇所については、割り当てられたリージョンのリージョンコードを指定します。
```
大阪: asia-northeast2
シンガポール: asia-southeast1
台湾: asia-east1
香港: asia-east2
シドニー: australia-southeast1
ムンバイ: asia-south1
オレゴン: us-west1
ロサンゼルス: us-west2
サウスカロライナ:us-east1
バージニア: us-east4
モントリオール: northamerica-northeast1
アイオワ:us-central1
サンパウロ:southamerica-east1
フィンランド:europe-north1
ベルギー:europe-west1
ロンドン:europe-west2
フランクフルト:europe-west3
オランダ:europe-west4
```
```
例) 大阪リージョンの場合
(リージョンコード)b -> asia-northeast2-b
```
* テンプレート内で (アカウント名) と記述されている箇所については、割り当てられたアカウント名を指定します。
```
例) 割り当てられたアカウント名が gcp001 の場合
vpc-(アカウント名) -> vpc-gcp001
```
* テンプレート内で (プロジェクトID) と記述されている箇所については、講習用のプロジェクトID(learngcp-389112)を指定します。
```
例) 講習用のプロジェクトIDが learngcp-389112 の場合
--project=(プロジェクトID) -> --project=learngcp-389112
```
:::
### 2.1. ネットワーク構成ファイルの作成
ネットワーク構成ファイルでは、「VPC」、「サブネット」といった、GCP を構成する基礎となる、ネットワーク関連の設定を行います。
gcp-work フォルダ内に、以下のファイル名で構成ファイルを作成します。
```=
ファイル名: network.yaml
```
構成ファイルに以下の内容を記述します。
```yaml=
imports:
- path: templates/network/network.py
name: network.py
resources:
- name: vpc-(アカウント名) # <- (アカウント名) を置換する
type: network.py
properties:
autoCreateSubnetworks: false
subnetworks:
- name: public-subnet-(アカウント名) # <- (アカウント名) を置換する
region: (リージョンコード) # <- (リージョンコード) を置換する
ipCidrRange: 10.X.0.0/24 # <- 第2オクテットのXを以下のように置換する
privateIpGoogleAccess: false
enableFlowLogs: true
```
:::warning
上記ipCidrRangeの第2オクテットのXは以下に置き換えてください。
・1 ⇒ 大阪(asia-northeast2)
・2 ⇒ シンガポール(asia-southeast1)
・3 ⇒ 台湾(asia-east1)
・4 ⇒ 香港(asia-east2)
・5 ⇒ シドニー(australia-southeast1)
・6 ⇒ ムンバイ(asia-south1)
・7 ⇒ オレゴン(us-west1)
・8 ⇒ ロサンゼルス(us-west2)
・9 ⇒ サウスカロライナ(us-east1)
・10⇒ バージニア(us-east4)
・11⇒ モントリオール(northamerica-northeast1)
・12⇒ アイオワ(us-central1)
・13⇒ サンパウロ(southamerica-east1)
・14⇒ フィンランド(europe-north1)
・15⇒ ベルギー(europe-west1)
:::
### 2.2. Firewall構成ファイルの作成
Firewall構成ファイルでは、インターネットから Web サーバへの通信許可と、Webサーバから DBサーバへの通信許可を設定するためのFirewallを作成します。
gcp-work フォルダ内に、以下のファイル名で構成ファイルを作成します。
```=
ファイル名: firewall.yaml
```
構成ファイルに以下の内容を記述します。
```yaml=
imports:
- path: templates/firewall/firewall.py
name: firewall.py
resources:
- name: firewall-(アカウント名) # <- (アカウント名) を置換する
type: firewall.py
properties:
network: vpc-(アカウント名) # <- (アカウント名) を置換する
rules:
- name: web-(アカウント名) # <- (アカウント名) を置換する
allowed:
- IPProtocol: tcp
ports:
- "22"
- "80"
description: rule for web server
direction: INGRESS
sourceRanges:
- 0.0.0.0/0
- name: db-(アカウント名) # <- (アカウント名) を置換する
allowed:
- IPProtocol: tcp
ports:
- "3306"
description: rule for db server
direction: INGRESS
sourceRanges:
- 10.X.0.0/24 # <- 第2オクテットのXを以下のように置換する
```
:::warning
上記sourceRangesの第2オクテットのXは以下に置き換えてください。
・1 ⇒ 大阪(asia-northeast2)
・2 ⇒ シンガポール(asia-southeast1)
・3 ⇒ 台湾(asia-east1)
・4 ⇒ 香港(asia-east2)
・5 ⇒ シドニー(australia-southeast1)
・6 ⇒ ムンバイ(asia-south1)
・7 ⇒ オレゴン(us-west1)
・8 ⇒ ロサンゼルス(us-west2)
・9 ⇒ サウスカロライナ(us-east1)
・10⇒ バージニア(us-east4)
・11⇒ モントリオール(northamerica-northeast1)
・12⇒ アイオワ(us-central1)
・13⇒ サンパウロ(southamerica-east1)
・14⇒ フィンランド(europe-north1)
・15⇒ ベルギー(europe-west1)
:::
### 2.3. インスタンステンプレート 構成ファイルの作成
インスタンステンプレート 構成ファイルでは、パブリックサブネットに Webサーバ2台分のテンプレートを作成します。また、「PHP」、「Apache」、「MySQL」、「Wordpress」といった、ブログサービスを提供するためのソフトウェアをインストール/セットアップするための内容も記述します。
gcp-work フォルダ内に、以下のファイル名で構成ファイルを作成します。
```=
ファイル名: instance-template.yaml
```
構成ファイルに以下の内容を記述します。
```yaml=
imports:
- path: templates/instance_template/instance_template.py
name: instance_template.py
resources:
- name: instance-template-(アカウント名) # <- (アカウント名) を置換する
type: instance_template.py
properties:
diskImage: projects/centos-cloud/global/images/family/centos-7
networks:
- network: vpc-(アカウント名) # <- (アカウント名) を置換する
subnetwork: https://www.googleapis.com/compute/v1/projects/(プロジェクトID)/regions/(リージョンコード)/subnetworks/public-subnet-(アカウント名) # <- (プロジェクトID)、(リージョンコード)、(アカウント名) を置換する
accessConfigs:
- type: ONE_TO_ONE_NAT
machineType: e2-standard-2
tags:
items:
- http
metadata:
items:
- key: startup-script
value: |
#!/bin/bash
# Setup Network connect DB
setsebool -P httpd_can_network_connect_db 1
# Install MySQL
sudo yum -y localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo yum install -y mysql-community-server
# Install Apache
sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd
sudo sed -i '349i KeepAlive On\nMaxKeepAliveRequests 100\nKeepAliveTimeout 600' /etc/httpd/conf/httpd.conf
# Install PHP
sudo yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/remi-php74.repo
sudo yum install -y php php-mysql
# Setup Apache
sudo systemctl restart httpd
sleep 10
sudo chown -R apache:apache /var/www
# Download Wordpress
sudo yum install -y wget
wget https://ja.wordpress.org/latest-ja.tar.gz
tar -xzf latest-ja.tar.gz
sudo cp -r wordpress/* /var/www/html/
# Disabled SELinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
sudo reboot
exit 0
```
### 2.4. LB用ターゲットプール構成ファイルの作成
LB用ターゲットプール構成ファイルでは、ロードバランサのターゲットプール を作成します。
gcp-work フォルダ内に、以下のファイル名で構成ファイルを作成します。
```=
ファイル名: targetpool.yaml
```
構成ファイルに以下の内容を記述します。
```yaml=
resources:
- name: webserver-pool-(アカウント名) # <- (アカウント名) を置換する
type: compute.v1.targetPool
properties:
region: (リージョンコード) # <- (リージョンコード) を置換する
sessionAffinity: CLIENT_IP
```
### 2.5. データベース構成ファイルの作成
データベース構成ファイルでは、GCP のマネージドサービスである Cloud SQL を作成します。データベースのエンジンは MySQL を選択します。
gcp-work フォルダ内に、以下のファイル名で構成ファイルを作成します。
```=
ファイル名: database.yaml
```
構成ファイルに以下の内容を記述します。
```yaml=
imports:
- path: templates/cloud_sql/cloud_sql.py
name: cloud_sql.py
resources:
- name: db-(アカウント名) # <- (アカウント名) を置換する
type: cloud_sql.py
properties:
region: (リージョンコード) # <- (リージョンコード) を置換する
databaseVersion: MYSQL_5_7
instanceType: CLOUD_SQL_INSTANCE
settings:
tier: db-n1-standard-1
backupConfiguration:
startTime: '02:00'
enabled: false
locationPreference:
zone: (リージョンコード)-b # <- (リージョンコード) を置換する
ipConfiguration:
ipv4Enabled: false
privateNetwork: 'vpc-(アカウント名)' # <- (アカウント名) を置換する
users:
- name: admin
password: password123!
databases:
- name: wordpress
```
### 2.6. ロードバランサー構成ファイルの作成
ロードバランサー構成ファイルでは、GCP のマネージドサービスである ロードバランサー を作成します。
gcp-work フォルダ内に、以下のファイル名で構成ファイルを作成します。
```=
ファイル名: lb.yaml
```
構成ファイルに以下の内容を記述します。
```yaml=
resources:
- name: lb-(アカウント名) # <- (アカウント名) を置換する
type: compute.v1.forwardingRule
properties:
region: (リージョンコード) # <- (リージョンコード) を置換する
portRange: 80
IPProtocol: TCP
target: https://www.googleapis.com/compute/v1/projects/(プロジェクトID)/regions/(リージョンコード)/targetPools/webserver-pool-(アカウント名) # <- (プロジェクトID)、(リージョンコード)、(アカウント名) を置換する
```
## 3. GCPコンソールのログイン
:::info
ログイン先URL: 別紙参照
受講者用アカウント: 別紙参照
共通パスワード: 別紙参照
:::

<br>

<br>

<br>
<br>
<br>

<br>
## 4. Deployment Manager起動
1. 検索バーに[**Deployment Manager**]を入力し、検索結果の[**Deployment Manager**]をクリックする。
<br>

2. Deployment ManagerのAPI有効化画面が表示されるので[**有効にする**]をクリックする。
<br>

3. API有効後、以下のDeployment Manager画面が表示されることを確認する。
<br>

4. 画面右上の[**Cloud Shellをアクティブにする**]アイコンをクリックする。
<br>

5. 画面下にCloud Shell使用確認のポップアップが表示されるので[**続行**]をクリックする。
<br>

6. 画面下に[**CLOUD SHELLターミナル**]が表示される。
<br>

<br>
## 5. 各構成ファイルの作成
### 5.1. Deployment Managerのリポジトリをダウンロード
CLOUD SHELLのターミナル上で以下を実行する。
:::info
ターミナル上にctrl+Vでペーストできます。
:::
```gherkin=
git clone https://github.com/GoogleCloudPlatform/cloud-foundation-toolkit
```

### 5.2. 空の構成ファイルを作成する。
CLOUD SHELLのターミナル上で以下を実行する。
```gherkin=
#/home/(アカウント名)/cloud-foundation-toolkit/dmと表示されること
cd cloud-foundation-toolkit/dm ; pwd
#空の構成ファイル(.yaml)の作成 (何も表示されないこと)
touch network.yaml
touch firewall.yaml
touch instance-template.yaml
touch targetpool.yaml
touch database.yaml
touch lb.yaml
#上記で作成した構成ファイル(.yaml)が表示されること
ls -l *.yaml
```
### 5.3. CLOUD SHELL上の「エディタを開く」ボタンをクリックする。

### 5.4. 「5.2」で作成した各構成ファイル(.yaml)を左ペインで選択して右ペインに「2.1~2.6」で作成した構成ファイルの中身をコピー&ペーストする。
※以下はnetwork.yamlの例。他の構成ファイルも同様にコピー&ペーストすること
```=
network.yaml
firewall.yaml
instance-template.yaml
targetpool.yaml
database.yaml
lb.yaml
```

### 5.5. 各構成ファイルをコピー&ペーストが完了したらCLOUD SHELL上の「ターミナルを開く」ボタンをクリックする。

## 6. 各リソースのデプロイ
### 6.1. VPC、パブリックサブネットの作成

CLOUD SHELLのターミナル上で以下を実行する。
```gherkin=
# (アカウント名) を置換する
gcloud deployment-manager deployments create vpc-(アカウント名) --config network.yaml
```
:::info
CLOUD SHELL起動後、gcloudコマンド初回実行時には以下のポップアップが表示されるので「承認」をクリックする。
:::
:::info
CLOUD SHELL承認後、ユーザ認証を求められた場合、各ユーザのパスワードを入力する。
※ユーザ認証のタイムアウトになった場合はコマンドを再実行してください。
:::

以下例の実行結果になること

### 6.2. Firewallルールの作成

CLOUD SHELLのターミナル上で以下を実行する。
```gherkin=
# (アカウント名) を置換する
gcloud deployment-manager deployments create firewall-(アカウント名) --config firewall.yaml
```
以下例の実行結果になること

### 6.3. インスタンステンプレートの作成

CLOUD SHELLのターミナル上で以下を実行する。
```gherkin=
# (アカウント名) を置換する
gcloud deployment-manager deployments create instance-template-(アカウント名) --config instance-template.yaml
```
以下例の実行結果になること

### 6.4. LB用のターゲットプール作成

CLOUD SHELLのターミナル上で以下を実行する。
```gherkin=
# (アカウント名) を置換する
gcloud deployment-manager deployments create webserver-pool-(アカウント名) --config targetpool.yaml
```
以下例の実行結果になること

### 6.5. インスタンスグループ作成

CLOUD SHELLのターミナル上で以下を実行する。
```gherkin=
# (アカウント名)、(リージョンコード)を置換する
gcloud compute instance-groups managed create instance-group-(アカウント名) \
--size 2 \
--template instance-template-(アカウント名) \
--target-pool webserver-pool-(アカウント名) \
--zones (リージョンコード)-b,(リージョンコード)-c
```
以下例の実行結果になること

### 6.6. DBサブネット作成、プライベート接続の作成

CLOUD SHELLのターミナル上で以下を実行する。
```gherkin=
# (アカウント名)、--addressesの第2オクテット、(プロジェクトID)を置換する
①DBサブネット作成
gcloud compute addresses create db-subnet-(アカウント名) \
--global \
--purpose=VPC_PEERING \
--addresses=10.X.1.0 \
--prefix-length=24 \
--description="allocated for DB" \
--network=vpc-(アカウント名) \
--project=(プロジェクトID)
②プライベート接続の作成
gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=db-subnet-(アカウント名) \
--network=vpc-(アカウント名) \
--project=(プロジェクトID) \
--force
```
以下例の実行結果になること

### 6.7. Cloud SQL作成

CLOUD SHELLのターミナル上で以下を実行する。
```gherkin=
# (アカウント名)を置換する
gcloud deployment-manager deployments create database-(アカウント名) --config database.yaml
```
:::info
Cloud SQL作成完了まで数分程度かかります。
:::
以下例の実行結果になること

### 6.8. ネットワークロードバランサの作成、確認

CLOUD SHELLのターミナル上で以下を実行する。
```gherkin=
# (アカウント名)を置換する
①ネットワークロードバランサの作成
gcloud deployment-manager deployments create lb-(アカウント名) --config lb.yaml
②ネットワークロードバランサの確認
gcloud compute forwarding-rules list
```
以下例の実行結果になること

## 7. Wordpress のセットアップ
### 7.1. ロードバランサの外部IPのコピー
「6.8」の実行結果にある「IP_ADDRESS: XXX.XXX.XXX.XXX」のIPアドレスをコピーする。

### 7.2. WordPressにアクセス
新たにウェブブラウザを起動し、アドレスバーに、コピーした IPアドレスをペーストして WoredPress にアクセスする。
:::info
ロードバランサーでWeb Server1またはWeb Server2のいずれかに振り分けられます。
:::

### 7.3. WordPress構築開始
「さあ、始めましょう!」 ボタンをクリックする。

### 7.4. Cloud SQLのプライベートIPアドレスのコピー
GCPコンソールに戻り、メニューから「SQL」をブラウザの新しいタブで開き、プライベートIPアドレスをコピーする。

### 7.5. WordPressデータベース設定
WordPressのブラウザに戻り、以下の内容を入力して、「送信」ボタンをクリックする。
```=
データベース名: wordpress
ユーザー名: admin
パスワード: password123!
データベースのホスト名: (コピーしたデータベースのプライベートIPアドレス)
```

### 7.6. WordPressインストール実行①
「インストール実行」ボタンをクリックする。

### 7.7. WordPressインストール実行②
以下の内容を入力して、「WordPress をインストール」ボタンをクリックする。
```=
サイトのタイトル: GCP
ユーザ名: admin
パスワード: dm-wp-password
メールアドレス: 各自のメールアドレス
検索エンジンでの表示:チェックする
```

### 7.8. WordPressログイン
以下の内容を入力して、ログインボタンをクリックする。
```=
ユーザー名: admin
パスワード: dm-wp-password
```

### 7.9. WordPressログイン後の確認
以下の画面が表示されることを確認し、画面左上のサイトタイトルをクリックする。

### 7.10. WordPress投稿記事の確認
以下の画面が表示されることを確認する。

## 8. デプロイメントの削除
以下の順で作成したデプロイメントを削除する。
```=
lb-(アカウント名)
database-(アカウント名)
webserver-pool-(アカウント名)
instance-template-(アカウント名)
firewall-(アカウント名)
network-(アカウント名)
```
デプロイメントの削除は、削除するデプロイを選択して、「削除」ボタンをクリックする。

:::warning
Deployment Managerで作成したリソースには依存関係があるため、削除の順序に気をつける必要があります。例えば、最初にネットワークを削除しようとした場合、ネットワークに属するインスタンスが存在している状態では、削除エラーとなります。
またCLOUD SHELLターミナルからのコマンドでも削除可能です。
例:
gcloud deployment-manager deployments delete database-(アカウント名)
:::
以上