์ด ํ์ด์ง์๋ Cloud SQL IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ฌ์ฉํ๋๋ก ๊ตฌ์ฑ๋ ์ฌ์ฉ์, ์๋น์ค ๊ณ์ ๋๋ ๊ทธ๋ฃน์ ํ์ฉํ๊ธฐ ์ํด Cloud SQL ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ฑฐ๋ ์์ ํ๋ ์ ์ฐจ๋ฅผ ์ ๊ณตํฉ๋๋ค. Cloud SQL IAM์ ๋ํ ์์ธํ ๋ด์ฉ์ IAM ์ธ์ฆ์ ์ฐธ์กฐํ์ธ์.
์๋ก ์์ฑ๋ ์ธ์คํด์ค์๋ postgres
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ต๋๋ค.
์์ํ๊ธฐ ์ ์
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the gcloud CLI.
-
์ธ๋ถ ID ๊ณต๊ธ์ ์ฒด(IdP)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋จผ์ ์ ํด ID๋ก gcloud CLI์ ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค.
-
gcloud CLI๋ฅผ ์ด๊ธฐํํ๋ ค๋ฉด, ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the gcloud CLI.
-
์ธ๋ถ ID ๊ณต๊ธ์ ์ฒด(IdP)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋จผ์ ์ ํด ID๋ก gcloud CLI์ ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค.
-
gcloud CLI๋ฅผ ์ด๊ธฐํํ๋ ค๋ฉด, ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
gcloud init
- ์ฌ์ฉ์ ๊ณ์ ์ Cloud SQL ๊ด๋ฆฌ์ ๋ฐ Compute ๋ทฐ์ด ์ญํ ์ด ์๋์ง ํ์ธํฉ๋๋ค.
์ญํ ๋ฐ ๊ถํ์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ
- ์ SQL ๋คํธ์ํฌ ์ํคํ ์ฒ: ์ธ์คํด์ค๋ฅผ ํ๋ก์ ํธ๋น ์ต๋ 1,000๊ฐ๊น์ง ๋ณด์ ํ ์ ์์ต๋๋ค.
- ์ด์ SQL ๋คํธ์ํฌ ์ํคํ ์ฒ: ์ธ์คํด์ค๋ฅผ ํ๋ก์ ํธ๋น ์ต๋ 100๊ฐ๊น์ง ๋ณด์ ํ ์ ์์ต๋๋ค.
- ๋ ์ํคํ ์ฒ ๋ชจ๋ ์ฌ์ฉ: ๋ ์ํคํ ์ฒ์์์ ์ธ์คํด์ค ๋ฐฐํฌ ๋ฐฉ์์ ๋ฐ๋ผ ํ๋๋ 100~1,000๊ฐ์ ๋๋ค.
-
Google Cloud ์ฝ์์์ Cloud SQL ์ธ์คํด์ค ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ์ธ์คํด์ค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- PostgreSQL ์ ํ์ ํด๋ฆญํฉ๋๋ค.
- ์ธ์คํด์ค ID์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค. ์ธ์คํด์ค ์ด๋ฆ์ ์ธ๋ถ์ ๊ณต๊ฐ๋๋ฏ๋ก ๋ฏผ๊ฐํ ์ ๋ณด๋ ๊ฐ์ธ ์๋ณ ์ ๋ณด๋ฅผ ํฌํจํ์ง ๋ง์ธ์. ์ธ์คํด์ค ์ด๋ฆ์ ํ๋ก์ ํธ ID๋ฅผ ํฌํจํ์ง ์์๋ ๋ฉ๋๋ค. ์ ์ ํ ๊ฒฝ์ฐ ํ๋ก์ ํธ ID๊ฐ ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค(์: ๋ก๊ทธ ํ์ผ์์).
- ๊ธฐ๋ณธ ๊ด๋ฆฌ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ ๋ฉ๋ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ ์ ์ ํํฉ๋๋ค.
- ๋ฆฌ์ ๋ฐ ์์ญ ๊ฐ์ฉ์ฑ ์ ํ ์น์ ์์ ์ธ์คํด์ค์ ๋ฆฌ์ ๋ฐ ์์ญ์ ์ ํํฉ๋๋ค. ์ธ์คํด์ค๋ฅผ ์ธ์คํด์ค์ ์ก์ธ์คํ๋ ๋ฆฌ์์ค์ ๊ฐ์ ๋ฆฌ์ ์ ๋ฐฐ์นํฉ๋๋ค. ์ ํํ ๋ฆฌ์ ์ ๋์ค์ ์์ ํ ์ ์์ต๋๋ค. ์์ญ์ ์ผ๋ฐ์ ์ผ๋ก ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค.
- ์ธ์คํด์ค ๋ง์ถค์ค์ ์น์ ์์ ๊ตฌ์ฑ ์ต์ ํ์๋ฅผ ํด๋ฆญํ ํ ํ๋๊ทธ๋ฅผ ํ์ฅํฉ๋๋ค.
- ํ๋๊ทธ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ํ๋๊ทธ ์ ํ ๋ฉ๋ด์์
cloudsql.iam_authentication
ํ๋๊ทธ๋ฅผ ์ ํํฉ๋๋ค. ์ด ํ๋๊ทธ์ ๊ฐ์ผ๋ก ์ฌ์ฉ์ด ์ ํ๋์๋์ง ํ์ธํ ํ ์๋ฃ๋ฅผ ํด๋ฆญํฉ๋๋ค. - ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ์ธ์คํด์ค ์ค์ ์ ๊ตฌ์ฑํฉ๋๋ค. ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
- ์ธ์คํด์ค ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- INSTANCE_NAME: ์ ์ธ์คํด์ค์ ์ด๋ฆ
- POSTGRES_VERSION: PostgreSQL ๋ฒ์ (์: POSTGRES_9_6, POSTGRES_10, POSTGRES_11, ๋๋ POSTGRES_12)
- NUMBER_OF_CORES: ๋จธ์ ์ ์ฝ์ด ์
- AMOUNT_OF_MEMORY: ๋จธ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋. ํฌ๊ธฐ ๋จ์๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค(์: 3072MiB ๋๋ 9GiB).
- ZONE: ์ ํธํ๋ Compute Engine ์์ญ(์: us-central1-a ๋๋ us-central1-b ๋ฑ)
- PASSWORD: ๋ฃจํธ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ
- Cloud Shell์ ์คํํฉ๋๋ค.
-
Terraform ๊ตฌ์ฑ์ ์ ์ฉํ ๊ธฐ๋ณธ Google Cloud ํ๋ก์ ํธ๋ฅผ ์ค์ ํฉ๋๋ค.
์ด ๋ช ๋ น์ด๋ ํ๋ก์ ํธ๋น ํ ๋ฒ๋ง ์คํํ๋ฉด ๋๋ฉฐ ์ด๋ค ๋๋ ํฐ๋ฆฌ์์๋ ์คํํ ์ ์์ต๋๋ค.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform ๊ตฌ์ฑ ํ์ผ์์ ๋ช ์์ ๊ฐ์ ์ค์ ํ๋ฉด ํ๊ฒฝ ๋ณ์๊ฐ ์ฌ์ ์๋ฉ๋๋ค.
-
Cloud Shell์์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ํด๋น ๋๋ ํฐ๋ฆฌ ๋ด์ ์ ํ์ผ์ ๋ง๋์ธ์. ํ์ผ ์ด๋ฆ์๋
.tf
ํ์ฅ์๊ฐ ์์ด์ผ ํฉ๋๋ค(์:main.tf
). ์ด ํํ ๋ฆฌ์ผ์์๋ ํ์ผ์main.tf
๋ผ๊ณ ํฉ๋๋ค.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผ ํ๋ ๊ฒฝ์ฐ ๊ฐ ์น์ ์ด๋ ๋จ๊ณ์์ ์ํ ์ฝ๋๋ฅผ ๋ณต์ฌํ ์ ์์ต๋๋ค.
์ํ ์ฝ๋๋ฅผ ์๋ก ๋ง๋
main.tf
์ ๋ณต์ฌํฉ๋๋ค.ํ์ํ ๊ฒฝ์ฐ GitHub์์ ์ฝ๋๋ฅผ ๋ณต์ฌํฉ๋๋ค. ์ด๋ Terraform ์ค๋ํซ์ด ์๋ ํฌ ์๋ ์๋ฃจ์ ์ ์ผ๋ถ์ธ ๊ฒฝ์ฐ์ ๊ถ์ฅ๋ฉ๋๋ค.
- ํ๊ฒฝ์ ์ ์ฉํ ์ํ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฒํ ํ๊ณ ์์ ํฉ๋๋ค.
- ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅํฉ๋๋ค.
-
Terraform์ ์ด๊ธฐํํฉ๋๋ค. ์ด ์์
์ ๋๋ ํฐ๋ฆฌ๋น ํ ๋ฒ๋ง ์ํํ๋ฉด ๋ฉ๋๋ค.
terraform init
์ํ๋ ๊ฒฝ์ฐ ์ต์ Google ๊ณต๊ธ์ ์ฒด ๋ฒ์ ์ ์ฌ์ฉํ๋ ค๋ฉด
-upgrade
์ต์ ์ ํฌํจํฉ๋๋ค.terraform init -upgrade
-
๊ตฌ์ฑ์ ๊ฒํ ํ๊ณ Terraform์์ ๋ง๋ค๊ฑฐ๋ ์
๋ฐ์ดํธํ ๋ฆฌ์์ค๊ฐ ์์๊ณผ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค.
terraform plan
ํ์์ ๋ฐ๋ผ ๊ตฌ์ฑ์ ์์ ํฉ๋๋ค.
-
๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ ํ๋กฌํํธ์
yes
๋ฅผ ์ ๋ ฅํ์ฌ Terraform ๊ตฌ์ฑ์ ์ ์ฉํฉ๋๋ค.terraform apply
Terraform์ '์ ์ฉ ์๋ฃ' ๋ฉ์์ง๊ฐ ํ์๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
- ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด Google Cloud ํ๋ก์ ํธ๋ฅผ ์ฝ๋๋ค. Google Cloud ์ฝ์์์ UI์ ๋ฆฌ์์ค๋ก ์ด๋ํ์ฌ Terraform์ด ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋์ง ํ์ธํฉ๋๋ค.
- Terraform ๊ตฌ์ฑ ํ์ผ์์ ์ญ์ ๋ณดํธ๋ฅผ ์ฌ์ฉ ์ค์งํ๋ ค๋ฉด
deletion_protection
์ธ์๋ฅผfalse
๋ก ์ค์ ํฉ๋๋ค.deletion_protection = "false"
- ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ ํ๋กฌํํธ์
yes
๋ฅผ ์ ๋ ฅํ์ฌ ์ ๋ฐ์ดํธ๋ Terraform ๊ตฌ์ฑ์ ์ ์ฉํฉ๋๋ค.terraform apply
-
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ ํ๋กฌํํธ์
yes
๋ฅผ ์ ๋ ฅํ์ฌ ์ด์ ์ Terraform ๊ตฌ์ฑ์ ์ ์ฉ๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํฉ๋๋ค.terraform destroy
- INSTANCE_ID: ์ํ๋ ์ธ์คํด์ค ID์ ๋๋ค.
- REGION: ์ํ๋ ๋ฆฌ์ (์: us-east-1)์ ๋๋ค.
- PROJECT_ID: ํ๋ก์ ํธ ID์ ๋๋ค.
- LOCATION_ID: ์์น ID์ ๋๋ค.
- DATABASE_VERSION: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ ์ ์ด๊ฑฐํ ๋ฌธ์์ด์
๋๋ค.
์๋ฅผ ๋ค๋ฉด
POSTGRES_12
์ ๋๋ค. - PASSWORD: ๋ฃจํธ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ์ ๋๋ค.
- MACHINE_TYPE :
db-custom-[CPUS]-[MEMORY_MBS]
์ ๊ฐ์ ๋จธ์ (๋ฑ๊ธ) ์ ํ์ ์ด๊ฑฐํ ๋ฌธ์์ด์ ๋๋ค. - INSTANCE_ID: ์ํ๋ ์ธ์คํด์ค ID์ ๋๋ค.
- REGION: ์ํ๋ ๋ฆฌ์ (์: us-east-1)์ ๋๋ค.
- PROJECT_ID: ํ๋ก์ ํธ ID์ ๋๋ค.
- LOCATION_ID: ์์น ID์ ๋๋ค.
- DATABASE_VERSION: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ ์ ์ด๊ฑฐํ ๋ฌธ์์ด์
๋๋ค.
์๋ฅผ ๋ค๋ฉด
POSTGRES_12
์ ๋๋ค. - PASSWORD: ๋ฃจํธ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ์ ๋๋ค.
- MACHINE_TYPE :
db-custom-[CPUS]-[MEMORY_MBS]
์ ๊ฐ์ ๋จธ์ (๋ฑ๊ธ) ์ ํ์ ์ด๊ฑฐํ ๋ฌธ์์ด์ ๋๋ค. -
Google Cloud ์ฝ์์์ Cloud SQL ์ธ์คํด์ค ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ์ธ์คํด์ค์ ๊ฐ์ ํ์ด์ง๋ฅผ ์ด๋ ค๋ฉด ์ธ์คํด์ค ์ด๋ฆ์ ํด๋ฆญํฉ๋๋ค.
- ์์ ์ ํด๋ฆญํฉ๋๋ค.
- ์ธ์คํด์ค ๋ง์ถค์ค์ ์น์ ์์ ํ๋๊ทธ๋ฅผ ํ์ฅํฉ๋๋ค.
- ํ๋๊ทธ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ํ๋๊ทธ ์ ํ ๋ฉ๋ด์์
cloudsql.iam_authentication
ํ๋๊ทธ๋ฅผ ์ ํํฉ๋๋ค. ์ด ํ๋๊ทธ์ ๊ฐ์ผ๋ก ์ฌ์ฉ์ด ์ ํ๋์๋์ง ํ์ธํ ํ ์๋ฃ๋ฅผ ํด๋ฆญํฉ๋๋ค. - ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ์ธ์คํด์ค ์ค์ ์ ๊ตฌ์ฑํฉ๋๋ค. ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
- ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
- INSTANCE_NAME: ์ ์ธ์คํด์ค์ ์ด๋ฆ
- PROJECT_ID: ํ๋ก์ ํธ ID์ ๋๋ค.
- LOCATION_ID: ์์น ID์ ๋๋ค.
- INSTANCE_ID: ์ํ๋ ์ธ์คํด์ค ID์ ๋๋ค.
- REGION: ์ํ๋ ๋ฆฌ์ ์ ๋๋ค.
- DATABASE_VERSION: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ ์ ์ด๊ฑฐํ ๋ฌธ์์ด์
๋๋ค.
์๋ฅผ ๋ค๋ฉด
POSTGRES_12
์ ๋๋ค. - PASSWORD: ๋ฃจํธ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ์ ๋๋ค.
- MACHINE_TYPE :
db-custom-[CPUS]-[MEMORY_MBS]
์ ๊ฐ์ ๋จธ์ (๋ฑ๊ธ) ์ ํ์ ์ด๊ฑฐํ ๋ฌธ์์ด์ ๋๋ค. - PROJECT_ID: ํ๋ก์ ํธ ID์ ๋๋ค.
- LOCATION_ID: ์์น ID์ ๋๋ค.
- INSTANCE_ID: ์ํ๋ ์ธ์คํด์ค ID์ ๋๋ค.
- REGION: ์ํ๋ ๋ฆฌ์ ์ ๋๋ค.
- DATABASE_VERSION: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ ์ ์ด๊ฑฐํ ๋ฌธ์์ด์
๋๋ค.
์๋ฅผ ๋ค๋ฉด
POSTGRES_12
์ ๋๋ค. - PASSWORD: ๋ฃจํธ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ์ ๋๋ค.
- MACHINE_TYPE :
db-custom-[CPUS]-[MEMORY_MBS]
์ ๊ฐ์ ๋จธ์ (๋ฑ๊ธ) ์ ํ์ ์ด๊ฑฐํ ๋ฌธ์์ด์ ๋๋ค. - IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ ์์ธํ ์์๋ณด๊ธฐ
- IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ํ ์ฝ๊ธฐ ๋ณต์ ๋ณธ ๋ก๊ทธ์ธ ๊ตฌ์ฑ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
- Cloud SQL IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ๋ฐ ์๋น์ค ๊ณ์ ์ ๋ง๋๋ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
- IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ฌ์ฉํ์ฌ Cloud SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ก๊ทธ์ธํ๋ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
- IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ํ ์ฌ์ฉ์ ๋ฐ ์๋น์ค ๊ณ์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ
๋จ์ผ ํ๋ก์ ํธ์ ๋ณด์ ํ ์ ์๋ ์ต๋ ์ธ์คํด์ค ์๋ ์ธ์คํด์ค์ ๋คํธ์ํฌ ์ํคํ ์ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
์ํฅ์ ์์ฒญํ๋ ค๋ฉด ์ง์ ์ผ์ด์ค๋ฅผ ์ ์ํ์ธ์. ์ฝ๊ธฐ ๋ณต์ ๋ณธ์ ์ธ์คํด์ค๋ก ๊ณ์ฐ๋ฉ๋๋ค.
IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ํ ์ ์ธ์คํด์ค ๊ตฌ์ฑ
IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ํด ์ Cloud SQL ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด cloudsql.iam_authentication
ํ๋๊ทธ๋ฅผ ์ฌ์ฉ ์ค์ ํด์ผ ํฉ๋๋ค.
์ด ํ๋๊ทธ๋ฅผ ์ฌ์ฉ ์ค์ ํ ํ์๋ Cloud SQL ์ธ์คํด์ค์ IAM ์ฌ์ฉ์, ์๋น์ค ๊ณ์ ๋๋ ๊ทธ๋ฃน์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ฌ์ฉํ๋๋ก ์ Cloud SQL ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
์ฝ์
gcloud
--database-flags
ํ๋ผ๋ฏธํฐ๋ฅผ cloudsql.iam_authentication=on
์ผ๋ก ์ค์ ํ์ฌ gcloud sql instances create
๋ฅผ ์คํํฉ๋๋ค.
๋ค์์ ๋ฐ๊ฟ๋๋ค.
gcloud sql instances create INSTANCE_NAME \ --database-version=POSTGRES_VERSION \ --cpu=NUMBER_OF_CORES \ --memory=AMOUNT_OF_MEMORY \ --zone=ZONE_NAME \ --root-password=PASSWORD \ --database-flags=cloudsql.iam_authentication=on
Terraform
IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ด ์ฌ์ฉ ์ค์ ๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด Terraform ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
ํ๋ก์ ํธ์ Terraform ๊ตฌ์ฑ์ ์ ์ฉํ๋ ค๋ฉด Google Cloud ๋ค์ ์น์ ์ ๋จ๊ณ๋ฅผ ์๋ฃํ์ธ์.
Cloud Shell ์ค๋น
๋๋ ํฐ๋ฆฌ ์ค๋น
๊ฐ Terraform ๊ตฌ์ฑ ํ์ผ์๋ ์์ฒด ๋๋ ํฐ๋ฆฌ(๋ฃจํธ ๋ชจ๋์ด๋ผ๊ณ ๋ ํจ)๊ฐ ์์ด์ผ ํฉ๋๋ค.
๋ณ๊ฒฝ์ฌํญ ์ ์ฉ
๋ณ๊ฒฝ์ฌํญ ์ญ์
๋ณ๊ฒฝ์ฌํญ์ ์ญ์ ํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
REST v1
์ธ์คํด์ค ์ด๋ฆ์ ์ธ๋ถ์ ๊ณต๊ฐ๋๋ฏ๋ก ๋ฏผ๊ฐํ ์ ๋ณด๋ ๊ฐ์ธ ์๋ณ ์ ๋ณด(PII)๋ ํฌํจํ์ง ๋ง์ธ์.
์ธ์คํด์ค ์ด๋ฆ์ ํ๋ก์ ํธ ID๋ฅผ ํฌํจํ์ง ์์๋ ๋ฉ๋๋ค. (์: ๋ก๊ทธ ํ์ผ์์) ํ์ํ ๊ฒฝ์ฐ ํ๋ก์ ํธ ID๊ฐ ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค.
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "name": "INSTANCE_ID", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "rootPassword": "PASSWORD", "settings": { "tier": "MACHINE_TYPE", "backupConfiguration": { "enabled": true }, "databaseFlags": [ { "name": "cloudsql.iam_authentication", "value": "on" } ] } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-01T19:13:21.834Z", "operationType": "CREATE", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
REST v1beta4
์ธ์คํด์ค ์ด๋ฆ์ ์ธ๋ถ์ ๊ณต๊ฐ๋๋ฏ๋ก ๋ฏผ๊ฐํ ์ ๋ณด๋ ๊ฐ์ธ ์๋ณ ์ ๋ณด(PII)๋ ํฌํจํ์ง ๋ง์ธ์.
์ธ์คํด์ค ์ด๋ฆ์ ํ๋ก์ ํธ ID๋ฅผ ํฌํจํ์ง ์์๋ ๋ฉ๋๋ค. (์: ๋ก๊ทธ ํ์ผ์์) ํ์ํ ๊ฒฝ์ฐ ํ๋ก์ ํธ ID๊ฐ ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค.
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "name": "INSTANCE_ID", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "rootPassword": "PASSWORD", "settings": { "tier": "MACHINE_TYPE", "backupConfiguration": { "enabled": true }, "databaseFlags": [ { "name": "cloudsql.iam_authentication", "value": "on" } ] } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-01T19:13:21.834Z", "operationType": "CREATE", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ํ ๊ธฐ์กด ์ธ์คํด์ค ๊ตฌ์ฑ
IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ํด ๊ธฐ์กด Cloud SQL ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด cloudsql.iam_authentication
ํ๋๊ทธ๋ฅผ ์ฌ์ฉ ์ค์ ํด์ผ ํฉ๋๋ค.
์ด ํ๋๊ทธ๋ฅผ ์ฌ์ฉ ์ค์ ํ ํ์๋ Cloud SQL ์ธ์คํด์ค์ IAM ์ฌ์ฉ์, ์๋น์ค ๊ณ์ ๋๋ ๊ทธ๋ฃน์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
IAM ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ฆ์ ์ฌ์ฉํ๋๋ก ๊ธฐ์กด Cloud SQL ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
์ฝ์
gcloud
gcloud CLI ์ค์น ๋ฐ ์์์ ๋ํ ์์ธํ ๋ด์ฉ์ gcloud CLI ์ค์น๋ฅผ ์ฐธ์กฐํ์ธ์. Cloud Shell ์์ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ Cloud Shell ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
์ด ์ ์ฐจ์์๋
gcloud
sql instances patch
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ค์์ ๋ฐ๊ฟ๋๋ค.
gcloud sql instances patch INSTANCE_NAME \ --database-flags=cloudsql.iam_authentication=on
์ด๋ ๊ฒ ํ๋ฉด ๋ค๋ฅธ ๋ชจ๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋๊ทธ ์ค์ ์ด ์ฌ์ค์ ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋๊ทธ ์ค์ ์ ๋ํ ์์ธํ ์๋ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋๊ทธ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
REST v1
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "name": "INSTANCE_ID", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "rootPassword": "PASSWORD", "settings": { "tier": "MACHINE_TYPE", "backupConfiguration": { "enabled": true } "databaseFlags": [ { "name": "cloudsql.iam_authentication", "value": "on" } ] } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-01T19:13:21.834Z", "operationType": "CREATE", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
REST v1beta4
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "name": "INSTANCE_ID", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "rootPassword": "PASSWORD", "settings": { "tier": "MACHINE_TYPE", "backupConfiguration": { "enabled": true } "databaseFlags": [ { "name": "cloudsql.iam_authentication", "value": "on" } ] } }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ํผ์นฉ๋๋ค.
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID", "status": "PENDING", "user": "user@example.com", "insertTime": "2020-01-01T19:13:21.834Z", "operationType": "CREATE", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }