Eventarc ํธ๋ฆฌ๊ฑฐ๋ ํน์ ์ด๋ฒคํธ ๋๋ ์ด๋ฒคํธ ์งํฉ์ ๊ด์ฌ์ด ์์์ ์ ์ธํฉ๋๋ค. ์ด๋ฒคํธ ์์ค ๋ฐ GKE ํด๋ฌ์คํฐ์์ ์คํ๋๋ ๋์ Google Kubernetes Engine(GKE) ์๋น์ค๋ฅผ ํฌํจํ์ฌ ํธ๋ฆฌ๊ฑฐ ํํฐ๋ฅผ ์ง์ ํ์ฌ ์ด๋ฒคํธ ๋ผ์ฐํ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋์์๋ ๊ณต๊ฐ ์๋ํฌ์ธํธ๊ฐ ์๋ ๊ณต๊ฐ ๋๋ ๋น๊ณต๊ฐ GKE ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์๋น์ค๋ง ํฌํจ๋ ์ ์์ต๋๋ค. ๋น๊ณต๊ฐ ์๋ํฌ์ธํธ๊ฐ ์๋ GKE ํด๋ฌ์คํฐ์ ์๋น์ค๋ฅผ ํ๊ฒํ ํ๋ ค๋ฉด ์ด๋ฒคํธ๋ฅผ ๋ด๋ถ HTTP ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํ ํ์ธ์.
Eventarc๋ HTTP ์์ฒญ์ ํตํด ์ด๋ฒคํธ๋ฅผ CloudEvents ํ์์ผ๋ก ์ด๋ฒคํธ ์์ ์์๊ฒ ์ ๋ฌํฉ๋๋ค.
์ด ์๋ด์์๋ ์ง์ Network Connectivity ์ด๋ฒคํธ์ ์ํด ํธ๋ฆฌ๊ฑฐ๋๋ GKE ์๋น์ค์ ๋ํ ์ด๋ฒคํธ ๋ผ์ฐํ ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์์ธํ ๋ด์ฉ์ ์ง์๋๋ ์ง์ ์ด๋ฒคํธ ๋ชฉ๋ก์ ์ฐธ์กฐํ์ธ์.
์์ํ๊ธฐ ์ ์
๋์ ์๋น์ค๊ฐ ์คํ ์ค์ธ GKE ํด๋ฌ์คํฐ์์ GKE์ฉ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ์ ํด๋ฅผ ์ฌ์ฉ ์ค์ ํด์ผ ํฉ๋๋ค. GKE์ฉ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ์ ํด๋ ์ด๋ฒคํธ ์ ๋ฌ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ๋ ๋ฐ ํ์ํ๋ฉฐ, ํฅ์๋ ๋ณด์ ์์ฑ๊ณผ ๊ด๋ฆฌ ํธ์์ฑ์ผ๋ก ์ธํด GKE ๋ด์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์์Google Cloud ์๋น์ค์ ์ก์ธ์คํ๋ ๋ฐ ๊ถ์ฅ๋๋ ๋ฐฉ์์ ๋๋ค.
GKE์ฉ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ์ ํด
GKE์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์Google Cloud API์ ์ก์ธ์คํด์ผ ํ ์ ์์ต๋๋ค. GKE์ฉ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ์ ํด๋ฅผ ์ฌ์ฉํ๋ฉด GKE ํด๋ฌ์คํฐ์ Kubernetes ์๋น์ค ๊ณ์ ์์ IAM ์๋น์ค ๊ณ์ ์ญํ ์ ์ํํ ์ ์์ต๋๋ค. ๊ตฌ์ฑ๋ Kubernetes ์๋น์ค ๊ณ์ ์ ์ฌ์ฉํ๋ ํฌ๋๋ Google Cloud API์ ์ก์ธ์คํ ๋ ์๋์ผ๋ก IAM ์๋น์ค ๊ณ์ ์ผ๋ก ์ธ์ฆ๋ฉ๋๋ค. GKE์ฉ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ์ ํด๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค ๊ณ ์ ํ๊ณ ์ธ๋ถํ๋ ID์ ์น์ธ์ ํ ๋นํ ์ ์์ต๋๋ค. ํน์ ๊ถํ์ Eventarc ํธ๋ฆฌ๊ฑฐ์ ์๋น์ค ๊ณ์ ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค. ์ด ๋ฌธ์์ ์๋น์ค ๊ณ์ ๋ง๋ค๊ธฐ ๋จ๊ณ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
GKE ํด๋ฌ์คํฐ์์ GKE์ฉ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ์ ํด๋ฅผ ์ฌ์ฉ ์ค์ ํ๊ณ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ GKE์ฉ ์ํฌ๋ก๋ ์์ด๋ดํฐํฐ ์ ํด ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
์ด๋ฒคํธ ์ ๋ฌ์
Eventarc์ ์ด๋ฒคํธ ์ ๋ฌ์๋ Eventarc์์ ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ ธ์ GKE ๋์์ผ๋ก ์ ๋ฌํฉ๋๋ค. ์ด ๊ตฌ์ฑ์์๋ Pub/Sub ์ ์ก ๊ณ์ธต๊ณผ GKE ์๋น์ค ์ฌ์ด์์ ์ค์ฌ์ ์ญํ ์ ํฉ๋๋ค. ๊ธฐ์กด ์๋น์ค์์ ์๋ํ๊ณ ์ ํธ ์๋น์ค(์์ ๊ด๋ฆฌํ ํด๋ฌ์คํฐ์ ์ธ๋ถ์ ๋ ธ์ถ๋์ง ์์ ์๋น์ค ํฌํจ)๋ฅผ ์ง์ํ๋ฉด์ ์ค์น ๋ฐ ์ ์ง๋ณด์๋ฅผ ๋จ์ํํฉ๋๋ค. ๋คํธ์ํน ์์ค์์ GKE ์๋น์ค์ ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ธฐ ์ํด์๋ ๋ชจ๋ ์ด๋ฒคํธ๊ฐ ๋์ผํ GKE ํด๋ฌ์คํฐ ๋ด์ ์๋ ์๋ณธ์์ ์ ๋ฌ๋๋ฏ๋ก ์ธ๋ถ ํธ๋ํฝ์ ๋ํ ์๋น์ค๋ฅผ ์ง์ํ ํ์๊ฐ ์์ต๋๋ค.
์ด๋ฒคํธ ์ ๋ฌ์ ์๋ช ์ฃผ๊ธฐ๋ Eventarc์์ ๊ด๋ฆฌ๋๋ฉฐ ์ด๋ฒคํธ ์ ๋ฌ์๋ฅผ ์ค์๋ก ์ญ์ ํ๋ฉด Eventarc์์ ์ด ๊ตฌ์ฑ์์๋ฅผ ๋ณต์ํฉ๋๋ค.
GKE ๋์์ ๊ฐ๋ฆฌํค๋ ๊ฐ ํธ๋ฆฌ๊ฑฐ์ ๋ํด ์ด๋ฒคํธ ์ ๋ฌ์(ํน๋ณํ ๊ตฌ์ฑ๋ gke-forwarder
ํฌ๋)๋ ๋ค์์ ์ํํฉ๋๋ค.
Pub/Sub API๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ๊ฑฐ ์ ์ก์(Pub/Sub ์ฃผ์ ๋ฐ ๊ตฌ๋ )์ ๋ํ
StreamingPull
์ฐ๊ฒฐ์ ์ด๊ณ ์ด๋ฒคํธ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ฉด ์์ ํฉ๋๋ค.์ด๋ฒคํธ๋ฅผ ์ฌ๋ฐ๋ฅธ CloudEvents ํ์์ผ๋ก ๋ณํํ๊ณ ๋์ GKE ์๋น์ค์
HTTP POST
์์ฒญ์ผ๋ก ์ธ์ฝ๋ฉํ๊ณ ์ ๋ฌํฉ๋๋ค.
gke-forwarder
์ธ์คํด์ค๋ฅผ ์คํํ๊ณ ์ ๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธํ๋ ค๋ฉด Eventarc ์๋น์ค ์์ด์ ํธ์ ๊ถํ์ด ํ์ํฉ๋๋ค. ์ด ๊ถํ์ ํ๋ก์ ํธ๋น ํ ๋ฒ ๋ถ์ฌ๋์ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ด ๋ฌธ์์์ GKE ๋์ ์ฌ์ฉ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
ํธ๋ฆฌ๊ฑฐ ๋ง๋ค๊ธฐ ์ค๋น
Eventarc๋ GKE ์๋น์ค๋ฅผ ํ๊ฒํ ํ๋ ํธ๋ฆฌ๊ฑฐ๋ณ๋ก ์ด๋ฒคํธ ์ ๋ฌ์ ๊ตฌ์ฑ์์๋ฅผ ๋ง๋ญ๋๋ค. Eventarc์์ GKE ํด๋ฌ์คํฐ์ ๊ตฌ์ฑ์์๋ฅผ ์ค์นํ๊ณ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด ํด๋น ๊ถํ์ด ํ์ํฉ๋๋ค. GKE ๋์์ ๋ํ Eventarc ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ง๋ค๊ธฐ ์ ์ ๋ค์ ์์ ์ ์๋ฃํด์ผ ํฉ๋๋ค.
์ฝ์
Google Cloud ์ฝ์์ ํ๋ก์ ํธ ์ ํ๊ธฐ ํ์ด์ง์์ Google Cloud ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ ํํฉ๋๋ค.
Eventarc, Eventarc Publishing, Google Kubernetes Engine, Resource Manager API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
ํด๋นํ๋ ๊ฒฝ์ฐ ์ง์ ์ด๋ฒคํธ์ ๊ด๋ จ๋ API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Network Connectivity ์ด๋ฒคํธ์ ๊ฒฝ์ฐNetwork Connectivity API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
์์ง ๊ณ์ ์ด ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ๊ด๋ฆฌํ ์๋น์ค ๊ณ์ ์ ๋ง๋ค๊ณ Eventarc์์ ๋์ ์๋น์ค์ ์ด๋ฒคํธ๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ํ์ํ ์ญํ ๊ณผ ๊ถํ์ ๊ณ์ ์ ๋ถ์ฌํฉ๋๋ค.
Google Cloud ์ฝ์์์ ์๋น์ค ๊ณ์ ๋ง๋ค๊ธฐ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์ ํํฉ๋๋ค.
์๋น์ค ๊ณ์ ์ด๋ฆ ํ๋์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค. Google Cloud ์ฝ์์ ์ด ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค ๊ณ์ ID ํ๋๋ฅผ ์ฑ์๋๋ค.
์๋น์ค ๊ณ์ ์ค๋ช ํ๋์ ์ค๋ช ์ ์ ๋ ฅํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด
Service account for event trigger
์ ๋๋ค.๋ง๋ค๊ณ ๊ณ์ํ๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
์ ์ ํ ์ก์ธ์ค ๊ถํ์ ์ ๊ณตํ๊ธฐ ์ํด ์ญํ ์ ํ ๋ชฉ๋ก์์ ์๋น์ค ๊ณ์ ์ ๋ถ์ฌํ ํ์ํ Identity and Access Management(IAM) ์ญํ ์ ์ ํํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ GKE ๋์์ ์ญํ ๋ฐ ๊ถํ์ ์ฐธ์กฐํ์ธ์.
์ญํ ์ ์ถ๊ฐํ๋ ค๋ฉด
๋ค๋ฅธ ์ญํ ์ถ๊ฐ๋ฅผ ํด๋ฆญํ๊ณ ๊ฐ ์ญํ ์ ์ถ๊ฐํฉ๋๋ค.๊ณ์์ ํด๋ฆญํฉ๋๋ค.
๊ณ์ ๋ง๋ค๊ธฐ๋ฅผ ๋ง์น๋ ค๋ฉด ์๋ฃ๋ฅผ ํด๋ฆญํฉ๋๋ค.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Eventarc, Eventarc Publishing, Google Kubernetes Engine, Resource Manager API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ container.googleapis.com \ cloudresourcemanager.googleapis.com
ํด๋นํ๋ ๊ฒฝ์ฐ ์ง์ ์ด๋ฒคํธ์ ๊ด๋ จ๋ API๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Network Connectivity ์ด๋ฒคํธ์ ๊ฒฝ์ฐ
networkconnectivity.googleapis.com
๋ฅผ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.์์ง ๊ณ์ ์ด ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ๊ด๋ฆฌํ ์๋น์ค ๊ณ์ ์ ๋ง๋ค๊ณ Eventarc๊ฐ GKE ๋์์ ์ด๋ฒคํธ๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ํ์ํ ์ญํ ๊ณผ ๊ถํ์ ๊ณ์ ์ ๋ถ์ฌํฉ๋๋ค.
์๋น์ค ๊ณ์ ์ ๋ง๋ญ๋๋ค.
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAME
์ ์๋น์ค ๊ณ์ ์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค. 6~30์(์๋ฌธ ๊ธฐ์ค) ์ฌ์ด์ฌ์ผ ํ๋ฉฐ ์๋ฌธ์ ์์ซ์ ๋ฌธ์์ ๋์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ์๋น์ค ๊ณ์ ์ ๋ง๋ ํ์๋ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.ํ์ํ Identity and Access Management(IAM) ์ญํ ๋๋ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ GKE ๋์์ ์ญํ ๋ฐ ๊ถํ์ ์ฐธ์กฐํ์ธ์.
GKE ๋์ ์ฌ์ฉ ์ค์
Eventarc๊ฐ GKE ํด๋ฌ์คํฐ์ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ ค๋ฉด GKE ๋์์ ์ฌ์ฉ ์ค์ ํ๊ณ Eventarc ์๋น์ค ์์ด์ ํธ๋ฅผ ํ์ํ ์ญํ ๊ณผ ๊ฒฐํฉํฉ๋๋ค.
Eventarc์ GKE ๋์์ ์ฌ์ฉ ์ค์ ํฉ๋๋ค.
gcloud eventarc gke-destinations init
ํ์ํ ์ญํ ์ ๊ฒฐํฉํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋๋ฉด
y
๋ฅผ ์ ๋ ฅํฉ๋๋ค.๋ค์ ์ญํ ์ด ๊ฒฐํฉ๋ฉ๋๋ค.
roles/compute.viewer
roles/container.developer
roles/iam.serviceAccountAdmin
ํธ๋ฆฌ๊ฑฐ ๋ง๋ค๊ธฐ
Google Cloud CLI๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ Google Cloud ์ฝ์์ ํตํด Eventarc ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ฝ์
- Google Cloud ์ฝ์์์ Eventarc ํธ๋ฆฌ๊ฑฐ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ํธ๋ฆฌ๊ฑฐ ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ํธ๋ฆฌ๊ฑฐ ์ด๋ฆ์ ์
๋ ฅํฉ๋๋ค.
ํธ๋ฆฌ๊ฑฐ์ ID์ด๋ฉฐ ๋ฌธ์๋ก ์์ํด์ผ ํฉ๋๋ค. ์ต๋ 63์(์๋ฌธ ๊ธฐ์ค)์ ์๋ฌธ์, ์ซ์, ํ์ดํ์ ํฌํจํ ์ ์์ต๋๋ค.
- ํธ๋ฆฌ๊ฑฐ ์ ํ์ผ๋ก Google ์์ค๋ฅผ ์ ํํฉ๋๋ค.
- ์ด๋ฒคํธ ์ ๊ณต์ ๋ชฉ๋ก์์ Network Connectivity๋ฅผ ์ ํํฉ๋๋ค.
์ฐ๊ฒฐ๋ Google Cloud ๋ฌธ์์ ์ฌ์ฉ๋ ์ด๋ฒคํธ ์ ๊ณต์ ์ด๋ฆ์ Cloud ๋๋ Google Cloud ํ๋ฆฌํฝ์ค๊ฐ ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฝ์์์๋ Redis์ฉ Memorystore๋ฅผ Redis์ฉGoogle Cloud Memorystore๋ผ๊ณ ํฉ๋๋ค.
- ์ด๋ฒคํธ ์ ํ ๋ชฉ๋ก์ ์ง์ ์ด๋ฒคํธ์์ ์ด๋ฒคํธ ์ ํ์ ์ ํํฉ๋๋ค.
- ์ด๋ฒคํธ ํ์ด๋ก๋์ ์ธ์ฝ๋ฉ์ ์ง์ ํ๋ ค๋ฉด ์ด๋ฒคํธ ๋ฐ์ดํฐ ์ฝํ
์ธ ์ ํ ๋ชฉ๋ก์์ application/json ๋๋ application/protobuf๋ฅผ ์ ํํฉ๋๋ค.
JSON์ผ๋ก ํ์์ด ์ง์ ๋ ์ด๋ฒคํธ ํ์ด๋ก๋๋ Protobuf๋ก ํ์์ด ์ง์ ๋ ์ด๋ฒคํธ ํ์ด๋ก๋๋ณด๋ค ํฝ๋๋ค. ๊ทธ๋ก ์ธํด ์ด๋ฒคํธ ๋์ ๋ฐ ์ด๋ฒคํธ ํฌ๊ธฐ ํ๋์ ๋ฐ๋ผ ์์ ์ฑ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ค์ง ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ธ์.
- ๋ฆฌ์ ๋ชฉ๋ก์์ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๋Google Cloud ์๋น์ค์ ๋์ผํ ๋ฆฌ์ ์ ์ ํํฉ๋๋ค.
์์ธํ ๋ด์ฉ์ Eventarc ์์น๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์ด๋ฒคํธ ์ ๊ณต์์ ํด๋นํ๋ ๊ฒฝ์ฐ ํํฐ ์ถ๊ฐ๋ฅผ ํด๋ฆญํ๊ณ ๋ค์์ ์ง์ ํฉ๋๋ค.
- ์์ฑ 1 ํ๋์์ ์ ํํ ์ง์ ์ด๋ฒคํธ์ ๋ฐ๋ผ ์ด๋ฒคํธ ํํฐ ์ญํ ์ ํ ์ ์๋ ๋ฆฌ์์ค ID๋ฅผ ์ ํํฉ๋๋ค.
- ์ฐ์ฐ์๋ฅผ ์ ํํฉ๋๋ค.
- Equal
- ๊ฒฝ๋ก ํจํด
์์ธํ ๋ด์ฉ์ ๊ฒฝ๋ก ํจํด ์ดํด๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์์ฑ ๊ฐ 1 ํ๋์์ ์ ํํ ์ฐ์ฐ์์ ๋ฐ๋ผ ์ ํํ ๊ฐ์ ์ ๋ ฅํ๊ฑฐ๋ ๊ฒฝ๋ก ํจํด์ ์ ์ฉํฉ๋๋ค.
- ๋ ๋ง์ ์์ฑ ํํฐ๋ฅผ ์ ์ฉํ ์ ์์ผ๋ฉด ํํฐ ์ถ๊ฐ๋ฅผ ํด๋ฆญํ๊ณ ์ ํฉํ ๊ฐ์ ์ง์ ํฉ๋๋ค.
- ์๋น์ค ๋๋ ์ํฌํ๋ก๋ฅผ ํธ์ถํ ์๋น์ค ๊ณ์ ์ ์ ํํฉ๋๋ค.
๋๋ ์ ์๋น์ค ๊ณ์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ด๋ ํธ๋ฆฌ๊ฑฐ์ ์ฐ๊ฒฐ๋์ด ์๊ณ ์ด์ ์ Eventarc์ ํ์ํ ํน์ ์ญํ ์ ๋ถ์ฌํ Identity and Access Management (IAM) ์๋น์ค ๊ณ์ ์ด๋ฉ์ผ์ ์ง์ ํฉ๋๋ค.
- ์ด๋ฒคํธ ๋์ ๋ชฉ๋ก์์ Kubernetes Engine์ ์ ํํฉ๋๋ค.
- ์๋น์ค๋ฅผ ์ ํํฉ๋๋ค.
ํธ๋ฆฌ๊ฑฐ์ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ์๋น์ค์ ์ด๋ฆ์ ๋๋ค. ์๋น์ค๋ ํธ๋ฆฌ๊ฑฐ์ ๋์ผํ ํ๋ก์ ํธ์ ์์ด์ผ ํ๋ฉฐ ์ด๋ฒคํธ๊ฐ ์์ฑ๋ ๋๋ง๋ค ํด๋น ์ด๋ฒคํธ๋ฅผ ๊ธฐ์ค URL ๊ฒฝ๋ก(
/
)๋ก ์ ์ก๋๋ HTTP POST ์์ฒญ์ผ๋ก ์์ ํฉ๋๋ค. - ํ์ํ ๊ฒฝ์ฐ, ๋ค์ด์ค๋ ์์ฒญ์ ๋ณด๋ผ ์๋น์ค URL ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
์ด๋ ํธ๋ฆฌ๊ฑฐ์ ์ด๋ฒคํธ๊ฐ ์ ์ก๋์ด์ผ ํ๋ ๋์ ์๋น์ค์ ์๋ ๊ฒฝ๋ก์ ๋๋ค. ์๋ฅผ ๋ค๋ฉด
/
,/route
,route
,route/subroute
์ ๋๋ค. - ์ํ๋ ๊ฒฝ์ฐ ๋ผ๋ฒจ์ ์ถ๊ฐํ๋ ค๋ฉด ๋ผ๋ฒจ์ด๋ ๋ฌด์์ธ๊ฐ์?๋ฅผ ์ฐธ์กฐํ์ธ์. ๋ผ๋ฒจ ์ถ๊ฐ๋ฅผ ํด๋ฆญํฉ๋๋ค. ๋ผ๋ฒจ์Google Cloud ๋ฆฌ์์ค๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ๋์์ด ๋๋ ํค-๊ฐ ์์ ๋๋ค. ์์ธํ ๋ด์ฉ์
- ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํธ๋ฆฌ๊ฑฐ๊ฐ ์์ฑ๋ ํ์๋ ์ด๋ฒคํธ ์์ค ํํฐ๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ๋์ ์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ง๋ค๊ณ ์ด์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ญ์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํธ๋ฆฌ๊ฑฐ ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
gcloud
ํ์ ๋ฐ ์ ํ์ ํ๋๊ทธ์ ํจ๊ป gcloud eventarc triggers create
๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
gcloud eventarc triggers create TRIGGER \ --location=LOCATION \ --destination-gke-cluster=DESTINATION_GKE_CLUSTER \ --destination-gke-location=DESTINATION_GKE_LOCATION \ --destination-gke-namespace=DESTINATION_GKE_NAMESPACE \ --destination-gke-service=DESTINATION_GKE_SERVICE \ --destination-gke-path=DESTINATION_GKE_PATH \ --event-filters="type=EVENT_FILTER_TYPE" \ --event-filters="COLLECTION_ID=RESOURCE_ID" \ --event-filters-path-pattern="COLLECTION_ID=PATH_PATTERN" \ --event-data-content-type="EVENT_DATA_CONTENT_TYPE" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
๋ค์์ ๋ฐ๊ฟ๋๋ค.
TRIGGER
: ํธ๋ฆฌ๊ฑฐ์ ID ๋๋ ์ ๊ทํ๋ ์๋ณ์์ ๋๋ค.LOCATION
: Eventarc ํธ๋ฆฌ๊ฑฐ ์์น์ ๋๋ค. ๋๋eventarc/location
์์ฑ์ ์ค์ ํ ์ ์์ต๋๋ค(์:gcloud config set eventarc/location us-central1
).์ฑ๋ฅ ๋ฐ ๋ฐ์ดํฐ ์์ฃผ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ์ด ์์น๊ฐ ์ด๋ฒคํธ๋ฅผ ์์ฑํ๋ Google Cloud ์๋น์ค์ ์์น์ ์ผ์นํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ Eventarc ์์น๋ฅผ ์ฐธ์กฐํ์ธ์.
DESTINATION_GKE_CLUSTER
: ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ๋์ GKE ์๋น์ค๊ฐ ์คํ ์ค์ธ GKE ํด๋ฌ์คํฐ์ ์ด๋ฆ์ ๋๋ค.DESTINATION_GKE_LOCATION
: (์ ํ์ฌํญ) ๋์ GKE ์๋น์ค๊ฐ ์คํ ์ค์ธ GKE ํด๋ฌ์คํฐ์ Compute Engine ๋ฆฌ์ ์ ๋๋ค. ์ง์ ํ์ง ์์ผ๋ฉด ํด๋ฌ์คํฐ๊ฐ ๋ฆฌ์ ํด๋ฌ์คํฐ์ด๋ฉฐ ํธ๋ฆฌ๊ฑฐ์ ๋์ผํ ๋ฆฌ์ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.DESTINATION_GKE_NAMESPACE
: (์ ํ์ฌํญ) ๋์ GKE ์๋น์ค๊ฐ ์คํ ์ค์ธ ๋ค์์คํ์ด์ค์ ๋๋ค. ์ง์ ํ์ง ์์ผ๋ฉดdefault
๋ค์์คํ์ด์ค๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.DESTINATION_GKE_SERVICE
: ํธ๋ฆฌ๊ฑฐ์ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ GKE ์๋น์ค์ ์ด๋ฆ์ ๋๋ค. ์๋น์ค๋ GKE์์ ์ง์ํ๋ ๋ชจ๋ ์์น์ ์์ ์ ์์ผ๋ฉฐ ํธ๋ฆฌ๊ฑฐ์ ๋์ผํ ์์น์ ์์ง ์์๋ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์๋น์ค๋ ํธ๋ฆฌ๊ฑฐ์ ๋์ผํ ํ๋ก์ ํธ์ ์์ด์ผ ํ๋ฉฐ ์ด๋ฒคํธ๊ฐ ์์ฑ๋ ๋๋ง๋ค ํด๋น ์ด๋ฒคํธ๋ฅผ ๊ธฐ์ค URL ๊ฒฝ๋ก(/
)๋ก ์ ์ก๋๋ HTTP POST ์์ฒญ์ผ๋ก ์์ ํฉ๋๋ค.DESTINATION_GKE_PATH
: (์ ํ์ฌํญ) ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ๊ฐ ์ ์ก๋ ๋์ GKE ์๋น์ค์์ ์ง์ ํ ์๋ ๊ฒฝ๋ก์ ๋๋ค. ์๋ฅผ ๋ค๋ฉด/
,/route
,route
,route/subroute
์ ๋๋ค.EVENT_FILTER_TYPE
: ์ด๋ฒคํธ์ ์๋ณ์์ ๋๋ค. ๋ฉ์๋์ API ํธ์ถ์ด ์ฑ๊ณตํ๋ฉด ์ด๋ฒคํธ๊ฐ ์์ฑ๋ฉ๋๋ค. ์ฅ๊ธฐ ์คํ ์์ ์ ๊ฒฝ์ฐ ์์ ์ด ๋๋ ๋์ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ๊ฒฝ์ฐ์๋ง ์ด๋ฒคํธ๊ฐ ์์ฑ๋ฉ๋๋ค. ์ง์๋๋ ์ด๋ฒคํธ ์ ํ ๋ชฉ๋ก์ Eventarc์์ ์ง์๋๋ Google ์ด๋ฒคํธ ์ ํ์ ์ฐธ์กฐํ์ธ์.
COLLECTION_ID
(์ ํ์ฌํญ): ์ด๋ฒคํธ ํํฐ ์ญํ ์ ํ ์ ์๋ ๋ฆฌ์์ค ๊ตฌ์ฑ์์์ด๋ฉฐ ๋ค์ ์ค ํ๋์ ๋๋ค.hub
serviceclass
serviceconnectionmap
serviceconnectionpolicy
serviceconnectiontoken
spoke
RESOURCE_ID
: ์ฐ๊ฒฐ๋ ์ปฌ๋ ์ ์ ํํฐ๋ง ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ ๋ฆฌ์์ค์ ์๋ณ์์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ฆฌ์์ค ID๋ฅผ ์ฐธ์กฐํ์ธ์.PATH_PATTERN
: ๋ฆฌ์์ค๋ฅผ ํํฐ๋งํ ๋ ์ ์ฉํ ๊ฒฝ๋ก ํจํด์ ๋๋ค.-
EVENT_DATA_CONTENT_TYPE
: (์ ํ์ฌํญ) ์ด๋ฒคํธ ํ์ด๋ก๋์ ์ธ์ฝ๋ฉ์ ๋๋ค. ์ด ๊ฐ์application/json
๋๋application/protobuf
์ ๋๋ค. ๊ธฐ๋ณธ ์ธ์ฝ๋ฉ์application/json
์ ๋๋ค.JSON์ผ๋ก ํ์์ด ์ง์ ๋ ์ด๋ฒคํธ ํ์ด๋ก๋๋ Protobuf๋ก ํ์์ด ์ง์ ๋ ์ด๋ฒคํธ ํ์ด๋ก๋๋ณด๋ค ํฝ๋๋ค. ๊ทธ๋ก ์ธํด ์ด๋ฒคํธ ๋์ ๋ฐ ์ด๋ฒคํธ ํฌ๊ธฐ ํ๋์ ๋ฐ๋ผ ์์ ์ฑ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ค์ง ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ธ์.
SERVICE_ACCOUNT_NAME
: ์ฌ์ฉ์ ๊ด๋ฆฌํ ์๋น์ค ๊ณ์ ์ ์ด๋ฆ์ ๋๋ค.PROJECT_ID
: Google Cloud ํ๋ก์ ํธ ID์ ๋๋ค.
์ฐธ๊ณ :
--event-filters="type=EVENT_FILTER_TYPE"
ํ๋๊ทธ๋ ํ์ ํญ๋ชฉ์ ๋๋ค. ๋ค๋ฅธ ์ด๋ฒคํธ ํํฐ๊ฐ ์ค์ ๋์ง ์์ผ๋ฉด ๋ชจ๋ ๋ฆฌ์์ค์ ์ด๋ฒคํธ๊ฐ ์ผ์นํฉ๋๋ค.- ์์ฑ ํ์๋
EVENT_FILTER_TYPE
์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.EVENT_FILTER_TYPE
์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ง๋ค๊ณ ์ด์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ญ์ ํฉ๋๋ค. - ๊ฐ ํธ๋ฆฌ๊ฑฐ์ ์ฌ๋ฌ ์ด๋ฒคํธ ํํฐ๋ฅผ ๋ฃ๊ฑฐ๋(
--event-filters
=[ATTRIBUTE
=VALUE
,...] ํ๋๊ทธ ํ๋์ ์ผํ๋ก ๊ตฌ๋ถํ์ฌ ์ ๋ ฅ) ํ๋๊ทธ๋ฅผ ๋ฐ๋ณตํ์ฌ ํํฐ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ชจ๋ ํํฐ์ ์ผ์นํ๋ ์ด๋ฒคํธ๋ง ๋์์ผ๋ก ์ ์ก๋ฉ๋๋ค. ์์ผ๋ ์นด๋์ ์ ๊ท ํํ์์ ์ง์๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋--event-filters-path-pattern
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฆฌ์์ค ๊ฒฝ๋ก ํจํด์ ์ ์ํ ์ ์์ต๋๋ค. --service-account
ํ๋๊ทธ๋ ํธ๋ฆฌ๊ฑฐ์ ์ฐ๊ฒฐ๋ Identity and Access Management(IAM) ์๋น์ค ๊ณ์ ์ด๋ฉ์ผ์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
gcloud eventarc triggers create helloworld-trigger \ --location=us-central1 \ --destination-gke-cluster=gke-events-cluster \ --destination-gke-location=us-central1-a \ --destination-gke-namespace=default \ --destination-gke-service=helloworld-events \ --destination-gke-path=/ \ --event-filters="type=google.cloud.networkconnectivity.serviceConnectionMap.v1.updated" \ --event-filters-path-pattern="serviceconnectionmap=my-serviceconnectionmap-*" \ --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
์ด ๋ช
๋ น์ด๋ google.cloud.networkconnectivity.serviceConnectionMap.v1.updated
๋ก ์๋ณ๋ ์ด๋ฒคํธ์ ํธ๋ฆฌ๊ฑฐ(helloworld-trigger
)๋ฅผ ๋ง๋ค๊ณ my-serviceconnectionmap-
๋ก ์์ํ๋ serviceconnectionmap
ID์ ์ด๋ฒคํธ์ ์ผ์นํฉ๋๋ค.
Terraform
Terraform์ ์ฌ์ฉํ์ฌ GKE ๋์์ ๋ํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ Terraform์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ๊ฑฐ ๋ง๋ค๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
ํธ๋ฆฌ๊ฑฐ ๋์ด
Google Cloud CLI๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ Google Cloud ์ฝ์์ ํตํด Eventarc ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋์ดํ์ฌ ํธ๋ฆฌ๊ฑฐ ์์ฑ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฝ์
Google Cloud ์ฝ์์์ Eventarc ํธ๋ฆฌ๊ฑฐ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์ด ํ์ด์ง์์๋ ๋ชจ๋ ์์น์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋์ดํ๊ณ ์ด๋ฆ, ๋ฆฌ์ , ์ด๋ฒคํธ ์ ๊ณต์, ๋์ ๋ฑ๊ณผ ๊ฐ์ ์ธ๋ถ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
ํธ๋ฆฌ๊ฑฐ๋ฅผ ํํฐ๋งํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
- ํํฐ ๋๋ ํธ๋ฆฌ๊ฑฐ ํํฐ๋ง ํ๋๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ์์ฑ ๋ชฉ๋ก์์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ํํฐ๋งํ๋ ์ต์ ์ ์ ํํฉ๋๋ค.
๋จ์ผ ์์ฑ์ ์ ํํ๊ฑฐ๋
OR
๋ ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ ๋ ฌํ๋ ค๋ฉด ์ง์๋๋ ์ด ์ ๋ชฉ ์์ ์๋
์ ๋ ฌ์ ํด๋ฆญํฉ๋๋ค.
gcloud
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋์ดํฉ๋๋ค.
gcloud eventarc triggers list --location=-
์ด ๋ช ๋ น์ด๋ ๋ชจ๋ ์์น์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋์ดํ๊ณ ์ด๋ฆ, ์ ํ, ๋์, ์ํ์ ๊ฐ์ ์ธ๋ถ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.