๐ง Vault ๋
HashiCorp ์ฌ์์ ๋ง๋ ๋น๋ฐ์ ๋ณด, ์ฆ ๊ณต๊ฐ๋๋ฉด ์ ๋๋ ๋น๋ฐ๋ฒํธ๋(DB ์ฐ๊ฒฐ ์ ๋ณด), API ํค, ํ ํฐ ๋ฑ์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ํ๋ซํผ์ด๋ค.
๐ฉ๐ป ํ์ฌ ์กฐ์ง ๋ด์์ Airflow ๊ด๋ฆฌ ๋ฐฉ์
์ง๊ธ ์ฐ๋ฆฌ ํ์ ๋ฐ์ดํฐ์์ง๋์ด ์๊ฐ ๋ง์ง ์์ Airflow ๋ฅผ GCP์ managed service ์ธ Composer๋ฅผ ํตํด ๊ด๋ฆฌํ๊ณ ์๋ค. Composer๋ก Airflow๋ฅผ ์ด์ํ๋ฉด Connection์ ๊ด๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๊ธฐ๋ณธ์ ์ผ๋ก 2๊ฐ์ง๊ฐ ์๋ค.
- Secret Manager ์ airflow prefix๋ฅผ ํตํ ์ ์ฅ
- ๋์ผํ๊ฒ airflow connection_id ๋ฅผ ํตํด ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ๋จ์ Airflow UI์์ Connection ์ ์์ฑํ๋ค.
- ๋ฌผ๋ก API ๋ก๋ ์์ฑํ ์ ์๋ค.
์ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก Connection์ ์์ฑํ๊ฒ ๋๋ฉด Hook์์ connection ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ๋ Secret Manager์ Composer์ ์ฐ๊ฒฐ๋ DB ๋ชจ๋์์ Connection_id ๊ฐ ์๋์ง ์ฒดํฌํ๊ณ ์๋ ๊ณณ์์ ๊ฐ์ ธ์ค๊ฒ ๋๋ค.
โ ๋ฌธ์ ๋ ๋ฌด์์ด์๋๊ฐ
๋ฌธ์ ๋ ์๋ก์ด Airflow ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ ํ๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค. ํ์ฌ GCP Composer์ ๊ฒฝ์ฐ Airflow Version์ ์ ๊ทธ๋ ์ด๋ํ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ์ฌํ๊น์ง ์์ธ log ์ ๋ณด์ ๋ํ migration๊ณผ worker๋ค์ด ๋ค์ ๋์์ง๋ ์๊ฐ ๋ฑ๋ฑ์ ๊ณ ๋ คํ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฑด ๋น์ฐํ ๊ฒ ๊ฐ๋ค. ๋ํ, ์ ๊ทธ๋ ์ด๋๊ฐ ๋๋ฉด์ ๊ธฐ์กด์ ์๋น์ค๋ค๋ ์ ๋์๊ฐ๊ฒ๋ ํด์ฃผ๋ ์ดํดํ ์ ์์๋ค.
ํ์ง๋ง, ์ญ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ ๊ทธ๋ ์ด๋ ๋์ค Composer ๊ฐ ์ ์ ์ ์๊ณ ์ฃฝ์ด๋ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค...
์ฃฝ์ด๋ฒ๋ฆฐ Composer ๋ webserver ๋ ์ฃฝ์ด๋ฒ๋ ค์ ๊ธฐ์กด์ ์๋ Connection ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๊ฒ ๋์๋ค. ๋์ค์ ์ ์ฌ์ค์ด์ง๋ง GCP์ vm์ ๋์์ airflow db์ ์ฐ๊ฒฐํ๋ฉด ๊ทธ ์์ ์๋ ๋ด์ฉ์ ํ์ธํ ์ ์์๋ ๊ฒ ๊ฐ๋ค.
์ด๋ ์๋์ผ๋ก Composer ํ๊ฒฝ์ ์๋ก ๋ง๋ค๋ฉด์ connection ์ ๋ณด๋ฅผ ๋ค์ ์ง์ด๋ฃ์๋ ์ฌํ ๊ธฐ์ต์ด ์๋ค...
๐ก Secret Manager ์ Composer๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ค!
์ ๊ทธ๋ ์ด๋ํ ๋ worker, webserver, scheduler ๊ฐ ๋ชจ๋ ์ฃฝ์ด๋ฒ๋ ค์ ์๋ก์ด ํ๊ฒฝ์ ๋ง๋ค ์๋ฐ์ ์์ ๋ Connection๊ณผ Variable์ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ญ๊ฐ ์์๊น ์๊ฐํ๋ค๊ฐ GCP์ Secret Manager๋ฅผ ์ด์ฉํ๊ธฐ๋ก ํ๋ค. ์ด๋ ๋ ํ ๋ฒ Connection์ ์ ์ ์กฐ์ฌํด API๋ฅผ ํตํด Secret Manager๋ก ์ด๊ดํ๋ ์์ ์ ๊ฑฐ์ณค๋ค.. ์ ๋ง ๋ง์ผ์๋ค..
https://cloud.google.com/composer/docs/secret-manager
ํ์ง๋ง ์ด๊ฒ๋ Airflow DB์ ์ ์ฅํ ๋์ฒ๋ผ์ ํฐ ๋ฌธ์ ๋ ์๋์ง๋ง ๋ฌธ์ ๋ ์กด์ฌํ๋ค.
- Airflow ์ฉ Prefix๋ฅผ ์ค์ ํด์ ์ฌ์ฉํด์ ๊ตฌ๋ถ์ ๊ฐ์ง๋ง ์๋น์ค์์ ์ฌ์ฉํ๋ Secret ๋ณ์๋ค์ด ๋ชจ๋ ๋ค์ด์๋ค ๋ณด๋ ์ง์ ๋ถํด์ง
- Secret Manager๋ก ์ฌ๋ฆด ๋ ๊ฐ๊ฐ์ Connection ์ ๋ณด๋ค์ uri๋ก ๋ณํํด์ ์ ์ฅํด์ผ ํจ
- ์ด๋, uri๋ก ๋ณํ ํ secret manger ๊น์ง ์ ์ฅํ๋ DAG ๋ฅผ ๋ง๋ค์์ง๋ง ์ฌ์ฉ์๊ฐ configuration ์ ์๋ชป๋ ์ ๋ณด๋ฅผ ์ ๋ ฅํด๋ ์ํธํ๋ uri ๋ก ๋ณํ๋๋ฉด์ ์ด๋ ํ ์ ๋ณด๋ฅผ ์๋ชป ๋ฃ์ ๊ฑด์ง ํ๋์ ํ์ ์ ๋๋ ์ด์๊ฐ ์์์
์ด๋ฐ ๋ฌธ์ ๋ฑ์ผ๋ก ์ด๋ป๊ฒ ์ด ๋ณ์๋ค์ ๊ด๋ฆฌํ ๊น ๊ณ ๋ฏผํ๋ ์ฐฐ๋์ ํ์ฌ ์ธํ๋ผํ์์ vault๋ฅผ ๋์ ํด์ ์ฌ์ฉํ์๋ ์๊ฒฌ์ ์ฃผ์ จ๋ค.
๐ ๋ณธ๊ฒฉ Vault ๋์
Python์์ Vault๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค.
- VaultClient ๋ชจ๋์ธ hvac ์ค์น
- Vault Rest API ์ด์ฉ
vault๋ฅผ Airflow์ ์ฒ์ ๋์ ํ๋ ํ์์ด VaultClient ๋ชจ๋์ ๋ฌธ์ ๊ฐ ์์ด ์ ์๋๋ค๊ณ ํ์ฌ ํ์ฌ ์ฐ๋ฆฌ ํ์ VaultRestAPI๋ก ๊ด๋ฆฌํ๊ณ ์๋ค. ์ถํ ์ด๋ ํ ๋ฌธ์ ๊ฐ ์์ด์ VaultClient๋ ๋์ ํ์ง ์์๋์ง ๋ ์์ธํ ์์๋ด์ผ๊ฒ ๋ค.
Vault์ ์ข์ ์ ์ ์ผ๋จ ๊ฐ๊ฐ ํด๋๋ฅผ ๋๋ ์ ๊ด๋ฆฌํ ์ ์๋ค๋ ๊ฑฐ๋ค. ๋ฐ๋ผ์ ์ด๋ฐ์ ๋ฐ ์๋น์ค์์์ secret value ๋ค์ ๋ชจ๋ Vault๋ฅผ ํตํด ๊ด๋ฆฌํ๋ค๊ณ ํ๋๋ผ๋ ๊ฐ ์๋น์ค ๋ณ๋ก ํด๋๋ฅผ ๋๋ ์ ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ด๋ฆฌ ํฌ์ธํธ๊ฐ ์ค์ด๋ค๊ณ ๋ค๋ฅธ ์ฌ์ฉ์๋ ํ๋์ ์์๋ณด๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌ๋๋ค.
๋ํ, ๊ธฐ์กด Secret Manager ์ฌ์ฉ ์ Airflow Connection ์ ๋ณด๊ฐ uri๋ก ์ํธํ๋๋ฉด์ ์ ์ฅ๋์ด ๊ธฐ์กด ๊ฐ์ด ์ด๋ค ๊ฐ์ด ๋ค์ด๊ฐ ์๋์ง ํ์ ํ๊ธฐ ์ด๋ ค์ ๋๋ฐ vault์์๋ ๊ถํ์ด ์์ผ๋ฉด ์ํธํ๋์ง ์๋ json ํํ๋ก key-value๋ฅผ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ ํ์คํ ๋ฆฌ๋ฅผ ๋ชจ๋ฅด๊ณ ์๋ ์ฌ๋์ด ๋ด๋ ๋ฐ๋ก ํ์ธํ ์ ์์ ๊ฒ ๊ฐ๋ค๋ ์ฅ์ ์ด ์๋ค.
๋ค์ ํฌ์คํ ์๋ ์ด Vault๋ฅผ ์ด์ฉํ์ฌ ์ด๋ป๊ฒ Airflow Connection์ ์์ฑํ์ฌ ๊ด๋ฆฌํ๋์ง์ ๋ํด์ ์ ๋ฆฌํด ๋ด์ผ๊ฒ ๋ค.
'Airflow' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Airflow] Sensor - ExternalTaskSensor | LIM (0) | 2023.05.12 |
---|---|
[Airflow] DAG Creation Boilerplate CLI ๋๊ตฌ ์์ฑ | LIM (0) | 2023.01.14 |
[Airflow] Custom UI for Airflow | LIM (0) | 2022.12.29 |
[Operator] SimpleHttpOperator | LIM (0) | 2022.12.21 |
Airflow ํน์ Task ์ฌ์คํ | LIM (0) | 2022.12.07 |
๋๊ธ