
もくじ
関連
- GCP CLI設定 CloudFunctions+BigQuery+CloudRun+ESPv2+独自ドメイン①
- GCP BigQueryの作成 CloudFunctions+BigQuery+CloudRun+ESPv2+独自ドメイン②
- GCP CloudFunction 関数の作成 CloudFunctions+BigQuery+CloudRun+ESPv2+独自ドメイン③
- GCP CloudRun + ESPv2によるAPI Gatewayリバースプロキシの作成④ CloudFunctions+BigQuery+CloudRun+ESPv2+独自ドメイン
完成図
クライアント <-> Route53 ... 名前解決 クライアント → CloudRun(API GatewayとしてのプロキシDockerコンテナ「ESPv2」を動かすコンテナを動作させる基盤) -> CloudFunctions
おおまかな作業概要
- プロキシサーバとなるコンテナイメージを作成
- CloudRunにコンテナイメージをデプロイ
- ドメインマッピングによって独自ドメインに対応し無料HTTPS証明書を仕込む
目的
- 独自ドメインとCloudFunctionsを結びつける
GCPから動的にURLで作成されたものをもしアプリに埋め込んでしまうと、リソースを万が一誤って削除した場合に、URLの再現性ができないので。削除してしまったリソースURLを利用していたバージョンのアプリが死んでしまう🐱 💦
変数定義
REGION=asia-northeast1 PROJECT_ID=test-cloud-functions-20211208 FUNCTIONS_NAME= storeLoginHistory CLOUD_RUN_SERVICE_NAME=api-gateway
リージョン設定
$ gcloud config set run/region $REGION
APIを有効化させておく
$ gcloud services enable servicemanagement.googleapis.com $ gcloud services enable servicecontrol.googleapis.com $ gcloud services enable endpoints.googleapis.com
# Helloプログラムをデプロイ
$ export CLOUD_RUN_SERVICE_NAME=api-gateway
$ export PROJECT_ID=test-cloud-functions-20211208
$ gcloud run deploy $CLOUD_RUN_SERVICE_NAME \
--image="gcr.io/cloudrun/hello" \
--allow-unauthenticated \
--platform managed \
--project=$PROJECT_ID
Deploying container to Cloud Run service [api-gateway] in project [test-cloud-functions-20211208] region [asia-northeast1]
✓ Deploying new service... Done.
✓ Creating Revision... Revision deployment finished. Waiting for health check to begin.
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [api-gateway] revision [api-gateway-00001-peh] has been deployed and is serving 100 percent of traffic.
Service URL: https://api-gateway-dsbamy37za-an.a.run.app
Service URLの「api-gateway-dsbamy37za-an.a.run.app」がCloudRunをデプロイする先になるので変数に入れます。
変数定義
CLOUD_RUN_HOSTNAME=api-gateway-dsbamy37za-an.a.run.app
gcp-test-kanehiro.sample-dev.work.yaml
swagger: '2.0'
info:
title: sample Cloud Endpoints + GCF
description: :-)
version: 1.0.0
host: api-gateway-dsbamy37za-an.a.run.app ●🐱 ここ!
schemes:
- https
produces:
- application/json
paths:
/api/v1/storeLoginHistory: ●🐱 ここ!
post:
summary: store Login History
operationId: storeLoginHistory
x-google-backend:
address: https://asia-northeast1-test-cloud-functions-20211208.cloudfunctions.net/storeLoginHistory ●🐱 ここ!
responses:
'200':
description: A successful response
実際のもの
swagger: '2.0'
info:
title: sample Cloud Endpoints + GCF
description: :-)
version: 1.0.0
host: api-gateway-dsbamy37za-an.a.run.app
schemes:
- https
produces:
- application/json
paths:
/api/v1/storeLoginHistory:
post:
summary: store Login History
operationId: storeLoginHistory
x-google-backend:
address: https://asia-northeast1-test-cloud-functions-20211208.cloudfunctions.net/storeLoginHistory ●🐱 ここ!
responses:
'200':
description: A successful response
$ gcloud config set project $PROJECT_ID
$ gcloud endpoints services deploy gcp-test-kanehiro.sample-dev.work.yaml \
--project $PROJECT_ID
Waiting for async operation operations/services.api-gateway-dsbamy37za-an.a.run.app-0 to complete...
Waiting for async operation operations/serviceConfigs.api-gateway-dsbamy37za-an.a.run.app:a0c98aa8-5a8a-4837-aa35-f8227b70823b to complete...
Operation finished successfully. The following command can describe the Operation details:
gcloud endpoints operations describe operations/serviceConfigs.api-gateway-dsbamy37za-an.a.run.app:a0c98aa8-5a8a-4837-aa35-f8227b70823b
Waiting for async operation operations/rollouts.api-gateway-dsbamy37za-an.a.run.app:2796de89-4484-4a1e-9580-8acc410de389 to complete...
Operation finished successfully. The following command can describe the Operation details:
gcloud endpoints operations describe operations/rollouts.api-gateway-dsbamy37za-an.a.run.app:2796de89-4484-4a1e-9580-8acc410de389
Enabling service [api-gateway-dsbamy37za-an.a.run.app] on project [test-cloud-functions-20211208]...
Operation "operations/acf.p2-904657856192-25941cc1-94f1-4ad3-bbe9-cdbb6dcc00c4" finished successfully.
Service Configuration [2021-12-09r0] uploaded for service [api-gateway-dsbamy37za-an.a.run.app] ●🐱 ここ
To manage your API, go to: https://console.cloud.google.com/endpoints/api/api-gateway-dsbamy37za-an.a.run.app/overview?project=test-cloud-functions-20211208
Service Configuration [2021-12-09r0]
[]の中の値が重要
変数定義
CONFIG_ID=2021-12-09r0
サービスの有効化
gcloud services enable servicemanagement.googleapis.com gcloud services enable servicecontrol.googleapis.com gcloud services enable endpoints.googleapis.com gcloud services enable $CLOUD_RUN_HOSTNAME
ドメインの検証
$ gcloud domains verify gcp-test-kanehiro.sample-dev.work
CNAMEを利用して検証すると良いかと思います


緑の値をDNSサーバに設定し、下記のサイトで反映されたか確認をクリックします。
問題がなければ確認を押して認証を終えます。
ESPv2を動かす
$ git clone https://github.com/GoogleCloudPlatform/esp-v2.git
$ chmod +x ./esp-v2/docker/serverless/gcloud_build_image
Dockerイメージの作成
$ ./esp-v2/docker/serverless/gcloud_build_image -s $CLOUD_RUN_HOSTNAME \
-c $CONFIG_ID -p $PROJECT_ID
・・・
0d989395d9d2: Mounted from endpoints-release/endpoints-runtime-serverless
12a2f0c9291b: Mounted from endpoints-release/endpoints-runtime-serverless
e2eb06d8af82: Layer already exists
c93571ebdeb4: Mounted from endpoints-release/endpoints-runtime-serverless
2.32.0-api-gateway-dsbamy37za-an.a.run.app-2021-12-09r0: digest: sha256:b650aeedaec4acc7d857b0f424356655a47c4eb01916551550caa75cd6db6a38 size: 3680
DONE
------------------------------------------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
23b03b17-9f1e-4bb9-93f4-33e9d3a14d3f 2021-12-09T10:31:17+00:00 38S
gs://test-cloud-functions-20211208_cloudbuild/source/1639045874.289586-ae21ef3d28dc4aa8a42c50994867148b.tgz gcr.io/test-cloud-functions-20211208/endpoints-runtime-serverless:2.32.0-api-gateway-dsbamy37za-an.a.run.app-2021-12-09r0 SUCCESS
gcr.io/test-cloud-functions-20211208/endpoints-runtime-serverless:2.32.0-api-gateway-dsbamy37za-an.a.run.app-2021-12-09r0 SUCCESS
serverless:2.32.0
変数定義
ESP_VERSION=2.32.0
ESPv2イメージのコンテナをCloudRunにデプロイ
$ gcloud run deploy ${CLOUD_RUN_SERVICE_NAME} \
--image="gcr.io/${PROJECT_ID}/endpoints-runtime-serverless:${ESP_VERSION}-${CLOUD_RUN_HOSTNAME}-${CONFIG_ID}" \
--allow-unauthenticated \
--platform managed \
--project=${PROJECT_ID}
Deploying container to Cloud Run service [api-gateway] in project [test-cloud-functions-20211208] region [asia-northeast1]
✓ Deploying... Done.
✓ Creating Revision...
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [api-gateway] revision [api-gateway-00003-fen] has been deployed and is serving 100 percent of traffic.
Service URL: https://api-gateway-dsbamy37za-an.a.run.app
- POST
- https://api-gateway-dsbamy37za-an.a.run.app/api/v1/storeLoginHistory
{
"message": "hoge",
"user_id": 1000,
"anonymous_token": "tokendayo2",
"login_type": "Normal"
}
動いた!
デプロイを確認できたぞい
証明書の取得とマッピング
% gcloud beta run domain-mappings create --service apps-gcp \ --domain gcp-test-kanehiro.sample-dev.work \ --platform=managed --region=asia-northeast1 You do not currently have this command group installed. Using it requires the installation of components: [beta] Your current Cloud SDK version is: 366.0.0 Installing components from version: 366.0.0 ┌─────────────────────────────────────────────┐ │ These components will be installed. │ ├──────────────────────┬────────────┬─────────┤ │ Name │ Version │ Size │ ├──────────────────────┼────────────┼─────────┤ │ gcloud Beta Commands │ 2021.12.03 │ < 1 MiB │ └──────────────────────┴────────────┴─────────┘ For the latest full release notes, please visit: https://cloud.google.com/sdk/release_notes Do you want to continue (Y/n)? Y
$ gcloud beta run domain-mappings create --service $CLOUD_RUN_SERVICE_NAME \ --domain gcp-test-kanehiro.sample-dev.work \ --platform=managed \ --region=$REGION Creating......done. Waiting for certificate provisioning. You must configure your DNS records for certificate issuance to begin. NAME RECORD TYPE CONTENTS api-gateway A 216.239.32.21 api-gateway A 216.239.34.21 api-gateway A 216.239.36.21 api-gateway A 216.239.38.21 api-gateway AAAA 2001:4860:4802:32::15 api-gateway AAAA 2001:4860:4802:34::15 api-gateway AAAA 2001:4860:4802:36::15 api-gateway AAAA 2001:4860:4802:38::1
10分ぐらい待ちます。

POSTMANで確認する
- POST
- https://gcp-test-kanehiro.sample-dev.work/api/v1/storeLoginHistory
{
"message": "hoge",
"user_id": 1001,
"anonymous_token": "tokendayo3",
"login_type": "CustomDomain"
}
できた😸




