Cloud Shellにて、gcloudコマンドを使用して、VMインスタンスを作成する

# はじめに
こんにちは！
今回は、CloudShellでgcloudコマンドを使用して、VPC、サブネット、VMインスタンスの作成を実施していきます。

# Cloud Shellを開く

対象プロジェクトのコンソールにて、右上のマークを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820434/77bff18f-dc04-39a1-7997-a2f74955a084.png)

「続行」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820434/2eebec3a-dfd6-3ba8-ecde-85157960f456.png)

Cloud Shellを起動できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820434/78002d4f-1ada-560d-9a7a-683220026d02.png)

# 対象のプロジェクトにて、Compute Engine APIを有効にする
VPCはCompute Engine APIに含まれています。
VPCを作成するため、Compute Engine APIを有効にします。

```
# プロジェクトのリストを表示する
$ gcloud projects list
PROJECT_ID: XXXX
NAME: My First Project
PROJECT_NUMBER: XXXX

# APIを有効化するプロジェクトを、デフォルトのプロジェクトを指定する
$ gcloud config set project <YOUR_PROJECT_ID>
Updated property [core/project].

#Compute Engine APIを有効にする
$ gcloud services enable compute.googleapis.com
Operation "operations/acf.xxxxxx" finished successfully.
```
# VPCとサブネットを作成する
VPCとサブネット1つを作成します。
```
$ gcloud beta compute networks create <VPC_NAME> \
--project=lunar-campaign-436414-c3 \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=regional \
--bgp-best-path-selection-mode=legacy \
&& gcloud compute networks subnets create <SUBNET_NAME> \
--project=lunar-campaign-436414-c3 \
--range=10.134.0.0/24 \
--stack-type=IPV4_ONLY \
--network=<VPC_NAME> \
--region=asia-northeast1

Created [https://www.googleapis.com/compute/beta/projects/lunar-campaign-436414-c3/global/networks/<VPC_NAME>].
NAME: <VPC_NAME>
SUBNET_MODE: CUSTOM
BGP_ROUTING_MODE: REGIONAL
IPV4_RANGE: 
GATEWAY_IPV4: 

Instances on this network will not be reachable until firewall rules
are created. As an example, you can allow all internal traffic between
instances as well as SSH, RDP, and ICMP by running:

$ gcloud compute firewall-rules create <FIREWALL_NAME> --network <VPC_NAME> --allow tcp,udp,icmp --source-ranges <IP_RANGE>
$ gcloud compute firewall-rules create <FIREWALL_NAME> --network <VPC_NAME> --allow tcp:22,tcp:3389,icmp

Created [https://www.googleapis.com/compute/v1/projects/lunar-campaign-436414-c3/regions/asia-northeast1/subnetworks/<SUBNET_NAME>].
NAME: <SUBNET_NAME>
REGION: asia-northeast1
NETWORK: <VPC_NAME>
RANGE: 10.134.0.0/24
STACK_TYPE: IPV4_ONLY
IPV6_ACCESS_TYPE: 
INTERNAL_IPV6_PREFIX: 
EXTERNAL_IPV6_PREFIX: 
```
# VMインスタンス作成
作成したVPC、サブネット上に、VMインスタンスを作成する。
```
$ gcloud compute instances create <VM_NAME> \
    --project=<PROJECT_ID> \
    --zone=asia-northeast1-a \
    --machine-type=e2-medium \
    --network-interface=network-tier=STANDARD,stack-type=IPV4_ONLY,subnet=<SUBNET_NAME> \
    --maintenance-policy=MIGRATE \
    --provisioning-model=STANDARD \
    --service-account=<SERVICE_ACCOUNT> \ #今回はデフォルトで用意されているGCEのサービスアカウントを指定
    --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/trace.append \
    --create-disk=auto-delete=yes,boot=yes,device-name=<VM_NAME>,image=projects/debian-cloud/global/images/debian-12-bookworm-v20240910,mode=rw,size=10,type=pd-balanced \
    --no-shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring \
    --labels=goog-ec-src=vm_add-gcloud \
    --reservation-affinity=any

Created [https://www.googleapis.com/compute/v1/projects/xxxxxx/zones/asia-northeast1-a/instances/<VM_NAME>].
NAME: <VM_NAME>
ZONE: asia-northeast1-a
MACHINE_TYPE: e2-medium
PREEMPTIBLE: 
INTERNAL_IP: xxx.xxx.xx.x
EXTERNAL_IP: xxx.xxx.x.xxx
STATUS: RUNNING
```

## 参考
https://cloud.google.com/endpoints/docs/openapi/enable-api?hl=ja#gcloud