GCP Shared VPCを試す

##はじめに
自分の勉強した内容の整理のため書いてます。
今回はShared VPCの構築方法について記載します。

本家の概要説明
https://cloud.google.com/vpc/docs/shared-vpc?hl=ja#ineligible_resources

本家の手順
https://cloud.google.com/vpc/docs/provisioning-shared-vpc?hl=ja

###大まかな流れ
1.管理者を作成する
SharedVPC作成したり、プロジェクトをアタッチしたりする管理者を作成します。
管理者は、組織管理者/SharedVPC管理者/サービスプロジェクト管理者の3パターンがあります。
2.ホストプロジェクトとサービスプロジェクトを作成する
※compute.api enableにする(hostとserviceどちらも有効になってないとエラーになります。
「The server has timed out while trying to process your request.」
3.ホスト プロジェクトの有効化
4.サービス プロジェクトの接続
5.確認

###構成要素
- 組織が必須
- プロジェクトは以下の2種類
    - ホストプロジェクト
        - Shared VPCをホストするプロジェクト
    - サービスプロジェクト
        - Shared VPCを利用するプロジェクト
※Shared VPCを使わないプロジェクトをスタンドアロンプロジェクトと呼ぶ

###管理者
マニュアルによると各管理者の役割と必要なロールは以下と理解しました。

- 組織管理者
    - 組織を管理する
    - 組織レベル：resourcemanager.organizationAdmin
- Shared VPC管理者
    - ホストプロジェクトでShared VPCを有効にして、サービスプロジェクトをアタッチする
    - 組織レベル：compute.xpnAdmin
    - プロジェクトレベル(ホストプロジェクト)：compute.securityAdmin,compute.networkAdmin
- サービスプロジェクト管理者
    - サービスプロジェクトのリソースを管理する
    - プロジェクトレベル(ホストプロジェクト)：compute.networkUser
    - プロジェクトレベル(サービスプロジェクト)：compute.instanceAdmin
(beta)

####しかしながら、ShareVPC管理者の権限が不足しているようで、ShaerdVPCが有効化できなかったため、ひとまずProjectOwner権限をつけて手順を進めました。At leastな権限については宿題といことで近日対応したいと思います。

図にすると以下のようなイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/0ce580b1-c871-8879-a3c6-9af5319410d3.png)

##手順

1.管理者を作成する
と
2.ホストプロジェクトとサービスプロジェクトを作成する
を実施します。

###3.ホスト プロジェクトの有効化
VPC Network>Shared VPCを選択し、「Set up Shared VPC」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/235cd17b-4ff2-266e-5b1d-c09499a46793.png)

「save & continue」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/fd331b38-b89f-69bd-8c8e-9d452f7693fe.png)

すべてのSubnetを共有するか、任意のSubnetのみ共有するかを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/eca13d0e-fdb9-708c-47a3-9ad471c4b28d.png)

どのサービスプロジェクトに共有するかを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/872ac379-17b8-547e-9d78-4664cc9c691a.png)

###4.サービス プロジェクトの接続
追加でサービスプロジェクトをアタッチする場合は、Attached Projectタブから行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/fddfdb7a-94d5-9b0a-feaf-0c998ddd8c41.png)

どのサービスプロジェクトに共有するかを選択し、すべてのSubnetを共有するか、任意のSubnetのみ共有するかを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/872ac379-17b8-547e-9d78-4664cc9c691a.png)

###5.確認

サービスプロジェクトでSharedVPCにインスンタンスを起動してみます。

サービスプロジェクトにサービス管理者としてログインします。

```
gcloud auth login [SERVICE_PROJECT_ADMIN]
```

SharedVPCが参照できるか確認します。

```
:~ (servicea-250710)$ gcloud compute networks subnets list-usable --project peak-plating-251107
PROJECT              REGION                   NETWORK  SUBNET   RANGE          SECONDARY_RANGES
peak-plating-251107  us-west2                 default  default  10.168.0.0/20
peak-plating-251107  europe-north1            default  default  10.166.0.0/20
peak-plating-251107  europe-west1             default  default  10.132.0.0/20
peak-plating-251107  europe-west3             default  default  10.156.0.0/20
peak-plating-251107  us-west1                 default  default  10.138.0.0/20
peak-plating-251107  asia-northeast2          default  default  10.174.0.0/20
peak-plating-251107  europe-west4             default  default  10.164.0.0/20
peak-plating-251107  europe-west6             default  default  10.172.0.0/20
peak-plating-251107  asia-south1              default  default  10.160.0.0/20
peak-plating-251107  asia-northeast1          default  default  10.146.0.0/20
peak-plating-251107  asia-east1               default  default  10.140.0.0/20
peak-plating-251107  asia-east2               default  default  10.170.0.0/20
peak-plating-251107  us-central1              default  default  10.128.0.0/20
peak-plating-251107  australia-southeast1     default  default  10.152.0.0/20
peak-plating-251107  northamerica-northeast1  default  default  10.162.0.0/20
peak-plating-251107  asia-southeast1          default  default  10.148.0.0/20
peak-plating-251107  us-east1                 default  default  10.142.0.0/20
peak-plating-251107  southamerica-east1       default  default  10.158.0.0/20
peak-plating-251107  us-east4                 default  default  10.150.0.0/20
peak-plating-251107  europe-west2             default  default  10.154.0.0/20
```

インスタンスを起動します。

```
sharedvpc@cloudshell:~ (servicea-250710)$ gcloud compute instances create instance1 --project servicea-250710 --subnet projects/peak-plating-251107/regions/us-east1/subnetworks/default --zone us-east1-b
 
Created [https://www.googleapis.com/compute/v1/projects/servicea-250710/zones/us-east1-b/instances/instance1].
NAME       ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
instance1  us-east1-b  n1-standard-1               10.142.0.2   x.x.x.x  RUNNING
```

Network InterfaceがShared VPCに所属していることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/7fd211e1-9a85-c56f-47ac-3b591c51e2b5.png)

以上です。

###投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。