web-dev-qa-db-ja.com

Cloud RunからCloud SQLに安全に接続するにはどうすればよいですか?

認証情報ファイルをコンテナ内に追加せずにCloud SQL上のデータベースに接続するにはどうすればよいですか?

12
gabidavila

UNIXドメインソケット(Java)を使用したCLOUD RUN(フルマネージド)からCLOUD SQLへの接続

現時点では、Cloud Run(フルマネージド)は、TCPを使用したCloud SQLインスタンスへの接続をサポートしていません。コードは、127.0.0.1や172.17.0.1などのIPアドレスを使用してインスタンスにアクセスしようとしないでください。 リンク

1 . Cloud SDKをインストールして初期化する

2.コンポーネントの更新:

gcloud components update

3.新しいプロジェクトを作成する

gcloud projects create run-to-sql
gcloud config set project run-to-sql
gcloud projects describe run-to-sql

4.課金を有効にする

gcloud alpha billing projects link  run-to-sql --billing-account  XXXXXX-XXXXXX-XXXX

5. compute project-infoメタデータを設定します。

gcloud compute project-info describe --project run-to-sql
gcloud compute project-info add-metadata --metadata google-compute-default-region=europe-west2,google-compute-default-zone=europe-west2-b

6. Cloud SQL Admin APIを有効にします。

 gcloud services enable sqladmin.googleapis.com

7.パブリックIPを使用してCloud SQLインスタンスを作成する

#Create the sql instance in the same region as App Engine Application
gcloud --project=run-to-sql beta sql instances create database-external --region=europe-west2
#Set the password for the "root@%" MySQL user:
gcloud sql users set-password root --Host=% --instance database-external --password root 
#Create a user
gcloud sql users create user_name --Host=% --instance=database-external  --password=user_password
#Create a database
gcloud sql databases create user_database --instance=database-external
gcloud sql databases list --instance=database-external
gcloud sql instances list

Cloud Run(フルマネージド)は、サービスアカウントを使用してCloud SQLへの接続を承認します。このサービスアカウントには、正常に接続するための適切なIAM権限が必要です。特に設定されていない限り、デフォルトのサービスアカウントは[email protected]の形式です。

8.サービスのサービスアカウントに次のIAM役割のいずれかがあることを確認します。CloudSQL Client(推奨)

gcloud iam service-accounts list
gcloud projects add-iam-policy-binding run-to-sql --member serviceAccount:[email protected]. --role roles/cloudsql.client

9.Java-docs-repositoryを複製する

git clone https://github.com/GoogleCloudPlatform/Java-docs-samples.git
cd Java-docs-samples/cloud-sql/mysql/servlet/
ls
#Dockerfile  pom.xml  README.md  src

10.Cloud SQLへの接続を処理するファイルを検査する

 cat src/main/Java/com/example/cloudsql/ConnectionPoolContextListener.Java

11.アプリのコンテナ化とContainer Registryへのアップロード

gcloud builds submit --tag gcr.io/run-to-sql/run-mysql

12.サービスをCloud Runにデプロイする

gcloud run deploy run-mysql --image gcr.io/run-to-sql/run-mysql

13.Cloud Runで使用するサービスを構成する

gcloud run services update run-mysql --add-cloudsql-instances run-to-sql:europe-west2:database-external --set-env-vars CLOUD_SQL_CONNECTION_NAME=run-to-sql:europe-west2:database-external  DB_USER=user_name,DB_PASS=user_password,DB_NAME=user_database

14.テストする

 curl -H "Authorization: Bearer $(gcloud auth print-identity-token)"   https://run-mysql-xxxxxxxx-xx.x.run.app

成功!

0
marian.vladoi