이 페이지에는 Cloud Build에서 실행되는 서비스에서 Cloud SQL 인스턴스에 연결하는 방법에 대한 정보와 예시가 포함되어 있습니다.
Cloud SQL은 클라우드에서 관계형 데이터베이스를 설정, 유지, 관리할 수 있는 완전 관리형 데이터베이스 서비스입니다.
Cloud Build는 Google Cloud 인프라에서 빌드를 실행하는 서비스입니다.
Cloud SQL 인스턴스 설정
- 아직 사용 설정하지 않은 경우에는 연결 중인 Google Cloud 프로젝트에서 Cloud SQL Admin API를 사용 설정하세요.
- MySQL용 Cloud SQL 인스턴스를 만듭니다. 지연 시간을 개선하고, 일부 네트워킹 비용 발생을 방지하고, 리전 간 장애 위험을 줄이려면 Cloud Run 서비스와 동일한 리전에 있는 Cloud SQL 인스턴스 위치를 선택하는 것이 좋습니다.
기본적으로 Cloud SQL은 공개 IP 주소를 새 인스턴스에 할당합니다. 비공개 IP 주소를 할당할 수도 있습니다. 두 옵션의 연결 옵션에 대한 자세한 내용은 연결 개요 페이지를 참조하세요.
Cloud Build 구성
Cloud Build를 구성하는 단계는 Cloud SQL 인스턴스에 할당된 IP 주소 유형에 따라 다릅니다.공개 IP(기본값)
Cloud Build 서비스 계정에 Cloud SQL 인스턴스에 연결하는 데 필요한 IAM 역할과 권한이 있는지 확인합니다.
Cloud Build 서비스 계정이 Google Cloud 콘솔 IAM 페이지에 주 구성원 [YOUR-PROJECT-NUMBER]@cloudbuild.gserviceaccount.com
으로 나열됩니다.
Google Cloud 콘솔에서 이 서비스 계정을 보려면 Google 제공 역할 부여 포함 체크박스를 선택합니다.
Cloud Build 서비스 계정에 다음 IAM 역할 중 하나가 필요합니다.
Cloud SQL Client
(권장)Cloud SQL Admin
cloudsql.instances.connect
cloudsql.instances.get
Cloud Build 서비스 계정이 Cloud SQL 인스턴스와 다른 프로젝트에 속하는 경우 두 프로젝트에 Cloud SQL Admin API와 IAM 권한을 추가해야 합니다.
비공개 IP
비공개 IP를 통해 Cloud SQL 인스턴스에 연결하려면 Cloud Build가 Cloud SQL 인스턴스와 동일한 VPC 네트워크에 있어야 합니다. 구성하려면 다음 안내를 따르세요.
- Cloud SQL 인스턴스의 VPC 네트워크와 서비스 프로듀서 네트워크 간에 비공개 연결을 설정합니다.
- Cloud Build 비공개 풀을 만듭니다.
구성된 후에는 빌드가 풀에서 실행될 때 애플리케이션이 인스턴스의 비공개 IP 주소 및 포트 3306
을 사용하여 직접 연결할 수 있습니다.
Cloud SQL에 연결
Cloud Build를 구성한 후 Cloud SQL 인스턴스에 연결할 수 있습니다.
공개 IP(기본값)
공개 IP 경로의 경우 Cloud Build는 Unix 및 TCP 소켓을 모두 지원합니다.
Cloud Build 단계에서 Cloud SQL 인증 프록시를 사용하여 데이터베이스에 대한 연결을 허용할 수 있습니다. 이 구성은 다음을 수행합니다.
- 컨테이너를 빌드하여 Container Registry에 푸시합니다.
- Cloud SQL 인증 프록시 바이너리에 복사하는 두 번째 컨테이너를 빌드합니다.
- Cloud Build에서 빌드한 컨테이너는 레지스트리로 푸시할 필요가 없으며 빌드 완료 시 삭제됩니다.
- 두 번째 컨테이너를 사용하여 Cloud SQL 인증 프록시를 시작하고 마이그레이션 명령어를 실행합니다.
위 Cloud Build 코드 샘플에서는 위 샘플 앱을 배포한 후에 Cloud SQL 인증 프록시와 Cloud Build를 사용하여 Cloud SQL 데이터베이스를 업데이트하도록 가상의 migrate 스크립트를 실행하는 방법을 보여줍니다. 이 Cloud Build 코드 샘플을 실행하려면 다음과 같은 설정 단계를 수행해야 합니다.
- 폴더 이름
sql-proxy
을 만듭니다. - 파일 콘텐츠에 대해 다음 코드 한 줄을 사용하여
sql-proxy
폴더에Dockerfile
파일을 만듭니다.FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
sql-proxy
폴더에cloudbuild.yaml
파일을 만듭니다.cloudbuild.yaml
파일을 업데이트합니다.- 위 샘플 Cloud Build 코드를 복사하여
cloudbuild.yaml
파일에 붙여넣습니다. - 사용되지 않는 연결 메서드의 코드 블록을 삭제하여 TCP 연결 또는 Unix 소켓 연결을 사용합니다.
substitutions:
블록 내 예시 코드_DATABASE_TYPE
를mysql
으로 업데이트합니다.- TCP 연결을 사용하는 경우
substitutions:
블록 내의 예시 코드_DATABASE_PORT
를 MySQL에서 사용하는 포트인3306
로 업데이트합니다. - 다음 자리표시자 값을 프로젝트에 사용된 값으로 바꿉니다.
mydatabase
myuser
myinstance
- 위 샘플 Cloud Build 코드를 복사하여
- Secret Manager에서
database_password
라는 보안 비밀을 만듭니다.- Cloud Build 서비스 계정에서 이 보안 비밀에 액세스하려면 IAM에서 Secret Manager 보안 비밀 접근자 역할을 부여해야 합니다. 자세한 내용은 Secret Manager의 보안 비밀 사용을 참조하세요.
sql-proxy
폴더에 migrate.py 스크립트 파일을 만듭니다.- 이 스크립트는 다음 예시를 사용하여
cloudbuild.yaml
파일에서 만든 다음 환경 변수와 보안 비밀을 참조할 수 있습니다.os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('INSTANCE_CONNECTION_NAME')
- Bash 스크립트에서 동일한 변수(예:
migrate.sh
)를 참조하려면 다음 예시를 사용합니다.$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$INSTANCE_CONNECTION_NAME
- 이 스크립트는 다음 예시를 사용하여
- 다음
gcloud builds submit
명령어를 실행하여 Cloud SQL 인증 프록시가 있는 컨테이너를 빌드하고 Cloud SQL 인증 프록시를 시작한 후migrate.py
스크립트를 실행합니다.gcloud builds submit --config cloudbuild.yaml
비공개 IP
비공개 IP 경로의 경우 애플리케이션은 비공개 풀을 통해 인스턴스에 직접 연결됩니다. 이 메서드는 TCP를 사용하여 Cloud SQL 인증 프록시를 사용하지 않고 Cloud SQL 인스턴스에 직접 연결합니다.
TCP로 연결
Cloud SQL 인스턴스의 비공개 IP 주소를 호스트 및 포트 3306
로 사용하여 연결합니다.
Python
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
자바
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
참고:
- INSTANCE_CONNECTION_NAME은 <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME>으로 표시되어야 합니다.
- 인수 ipTypes=PRIVATE을 사용하면 SocketFactory가 인스턴스의 연결된 비공개 IP와 강제로 연결됩니다.
- pom.xml 파일에 대한 JDBC 소켓 팩토리 버전 요구사항은 여기를 참조하세요.
Node.js
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
Go
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
C#
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
Ruby
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
PHP
웹 애플리케이션의 컨텍스트에서 이 스니펫을 보려면 GitHub의 README를 참조하세요.
그런 다음 코드를 직접 실행하도록 Cloud Build 단계를 만들 수 있습니다.
위 Cloud Build 코드 샘플에서는 위 샘플 앱을 배포한 후에 Cloud Build를 사용하여 Cloud SQL 데이터베이스를 업데이트하도록 가상의 migrate 스크립트를 실행하는 방법을 보여줍니다. 이 Cloud Build 코드 샘플을 실행하려면 다음과 같은 설정 단계를 수행해야 합니다.
- 폴더 이름
sql-private-pool
을 만듭니다. - 파일 콘텐츠에 대해 다음 코드 한 줄을 사용하여
sql-private-pool
폴더에Dockerfile
파일을 만듭니다.FROM gcr.io/gcp-runtimes/ubuntu_20_0_4
sql-private-pool
폴더에cloudbuild.yaml
파일을 만듭니다.cloudbuild.yaml
파일을 업데이트합니다.- 위 샘플 Cloud Build 코드를 복사하여
cloudbuild.yaml
파일에 붙여넣습니다. - 다음 자리표시자 값을 프로젝트에 사용된 값으로 바꿉니다.
mydatabase
myuser
host:port
양식의databasehost
.
- 위 샘플 Cloud Build 코드를 복사하여
- Secret Manager에서
database_password
라는 보안 비밀을 만듭니다.- Cloud Build 서비스 계정에서 이 보안 비밀에 액세스하려면 IAM에서 Secret Manager 보안 비밀 접근자 역할을 부여해야 합니다. 자세한 내용은 Secret Manager의 보안 비밀 사용을 참조하세요.
sql-proxy
폴더에 migrate.py 스크립트 파일을 만듭니다.- 이 스크립트는 다음 예시를 사용하여
cloudbuild.yaml
파일에서 만든 다음 환경 변수와 보안 비밀을 참조할 수 있습니다.os.getenv('DATABASE_NAME')
os.getenv('DATABASE_USER')
os.getenv('DATABASE_PASS')
os.getenv('DATABASE_HOST')
- Bash 스크립트에서 동일한 변수(예:
migrate.sh
)를 참조하려면 다음 예시를 사용합니다.$DATABASE_NAME
$DATABASE_USER
$DATABASE_PASS
$DATABASE_HOST
- 이 스크립트는 다음 예시를 사용하여
- 다음
gcloud builds submit
명령어를 실행하여 Cloud SQL 인증 프록시가 있는 컨테이너를 빌드하고 Cloud SQL 인증 프록시를 시작한 후migrate.py
스크립트를 실행합니다.gcloud builds submit --config cloudbuild.yaml
권장사항 및 기타 정보
로컬에서 애플리케이션을 테스트할 때 Cloud SQL 인증 프록시를 사용할 수 있습니다. 자세한 내용은 빠른 시작: Cloud SQL 인증 프록시 사용을 참조하세요.
Docker 컨테이너를 통해 Cloud SQL 프록시를 사용하여 테스트할 수도 있습니다.
데이터베이스 스키마 마이그레이션
Cloud SQL에 연결하도록 Cloud Build를 구성하면 다른 서버리스 플랫폼에 배포하는 것과 동일한 코드를 사용하여 Cloud Build에서 데이터베이스 스키마 마이그레이션 태스크를 실행할 수 있습니다.
Secret Manager 사용
Secret Manager를 사용하여 빌드에 민감한 정보를 포함할 수 있습니다.