[AWS] CDK (with Python)

CDK๋Š” Cloud Development Kit์˜ ์ถ•์•ฝ์œผ๋กœ, AWS์—์„œ ์ง์ ‘ ์ œ๊ณตํ•˜๋Š” IaC ๋„๊ตฌ๋‹ค.
์ฝ”๋“œ๋กœ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ…Œ๋ผํผ ๊ฐ™์€ ๋„๊ตฌ๋“ค๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” AWS Cloudformation์„ ์‚ฌ์šฉํ•ด์„œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•œ๋‹ค.
https://blog.naver.com/sssang97/222801645516

์–ธ์–ด๋Š” Node.js, Python, C#, Go, Java ์ •๋„๊ฐ€ ์ œ๊ณต๋˜๋‚˜, ํŒŒ์ด์ฌ์„ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๊ณ  ๊ณต์‹ ๋ ˆํฌ์— ์˜ˆ์ œ๊ฐ€ ๋งŽ์€ ๊ฒƒ๋„ ํŒŒ์ด์ฌ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋„ ํŒŒ์ด์ฌ์œผ๋กœ ํ•˜๊ฒ ๋‹ค.




cdk ๊ธฐ๋ณธ๊ตฌ์„ฑ

์‚ฌ์ „์— aws-cli ์„ค์น˜์™€ aws configure๊ฐ€ ์ „๋ถ€ ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค.

CLI๋Š” npm์œผ๋กœ ์„ค์น˜ํ•œ๋‹ค.

npm install -g aws-cdk

์ด๋ ‡๊ฒŒ ๊น”๊ณ 

๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋ช…๋ น์„ ๋‚ ๋ ค์„œ ๊ธฐ๋ณธ cloudformation ์„ธํŒ…์„ ํ•ด์ค€๋‹ค.

๊ทธ๋Ÿผ ์ด๋Ÿฐ์‹์œผ๋กœ ์ค‘์•™ ๊ตฌ์„ฑ์ด ์ƒ์„ฑ๋œ๋‹ค.
์ด๊ฑด ์ผ์ข…์˜ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด๋‹ค. ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.





CDK ์ฝ”๋“œ ๊ตฌ์„ฑ

๋จผ์ € aws cdk ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•œ๋‹ค.

python3 -m pip install aws-cdk-lib

๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ ์ ˆํžˆ ๊ตฌ์„ฑํ•œ๋‹ค.

cdk.json์—๋Š” ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ ์–ด๋†“๊ณ 

์†Œ์Šค์ฝ”๋“œ์—๋Š” ์ด๋Ÿฐ ๊ตฌ์„ฑ์„ ๊ฐ–์ถฐ์ค€๋‹ค.

env์— account number์™€ ๋ฆฌ์ „์„ ํ• ๋‹นํ•ด์ฃผ๊ณ 


์ด๋Ÿฐ์‹์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•ด์„œ ์Šคํƒ์— ๋“ค์–ด๊ฐˆ ๋ฆฌ์†Œ์Šค๋“ค์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ์ •๋„๋งŒ ๋“ค์–ด์žˆ๋‹ค.
์ด๊ฒƒ ์ž์ฒด๋กœ๋Š” ๊ทธ์ € ํ…œํ”Œ๋ฆฟ์ผ ๋ฟ์ด๋‹ค. ์ด ์Šคํƒ์„ ์ƒ์„ฑํ• ๋•Œ ์—ฌ๊ธฐ์„œ ์ •์˜ํ•œ ๋ฆฌ์†Œ์Šค๋“ค์ด ๋‹ค ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ด ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ.

๋งˆ์ง€๋ง‰์€ cdk ์•ฑ์„ ์ƒ์„ฑํ•˜๊ณ , ์ฐจ๋ก€๋Œ€๋กœ ์Šคํƒ์„ ์ƒ์„ฑํ•˜๊ณ , synth๋กœ ๋งˆ๋ฌด๋ฆฌ๋ฅผ ํ•œ๋‹ค. ๋Œ€์ฒด๋กœ ์ด๋Ÿฐ ๋А๋‚Œ์œผ๋กœ ๊ฐ€๋ฉด ๋œ๋‹ค.
์—ฌ๊ธฐ์„œ ๋‘๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋„ฃ์€ id๊ฐ€ ์Šคํƒ์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์—๋„ ์ €๊ฒŒ ๋‹ค ์ ‘๋‘์‚ฌ๋กœ ๋ถ™๋Š”๋‹ค.

๊ทธ๋Ÿฌ๊ณ  ๋‚˜์„œ cdk deploy ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”๋กœ ๋ฆฌ์†Œ์Šค ๋ฐฐํฌ๊ฐ€ ์‹œ์ž‘๋œ๋‹ค.
์ฝ”๋“œ์— ์Šคํƒ์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ๋•Œ๋Š” --all ์˜ต์…˜์„ ์ค˜์„œ ๋‹ค ์‹คํ–‰์‹œํ‚ค๊ฑฐ๋‚˜ ์‹๋ณ„์ž๋ฅผ ์ง์ ‘ ์ง€์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ, ๋‹จ์ผ ์Šคํƒ์ผ๋•Œ๋Š” ์•„๋ฌด ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

์ฒ˜์Œ ์ƒ์„ฑํ• ๋•Œ๋Š” ๋ญ๊ฐ€ ์ƒ๊ธฐ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ณ  ๊ณ„์†ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๋ฌผ์–ด๋ณธ๋‹ค.


๊ฐ ์Šคํƒ์— ๋Œ€ํ•œ cloudformation ์Šคํƒ์ด ์ƒ์„ฑ๋˜๊ณ 


์ธ์Šคํ„ด์Šค๋„ ์ƒ๊ธด๋‹ค.




๋ฉ€ํ‹ฐ์Šคํƒ

ํ•˜๋‚˜์˜ cdk ์ฝ”๋“œ์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šคํƒ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
๋ณ„๋‹ค๋ฅธ ์ œ์•ฝ์€ ์—†๋‹ค.

์ด๋Ÿฐ๋А๋‚Œ์œผ๋กœ ์Šคํƒ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์Šคํƒ์„ ์ฐ์–ด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค.


๊ทธ๋Ÿฌ๋ฉด


์Šคํƒ๋„ ๋ณ„๋„๋กœ ์ƒ์„ฑ๋˜๊ณ 


์ด๋Ÿฐ ๋А๋‚Œ์œผ๋กœ ๋˜ ์ž˜ ๋ฝ‘ํžŒ๋‹ค.




์ˆ˜์ •

๋งŒ์•ฝ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ 

๋ฐฐํฌ๋งŒ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.

์ด๋•Œ๋ถ€ํ„ฐ๋Š” y/n์„ ๋ฌผ์–ด๋ณด์ง€ ์•Š์•„์„œ ์‹ ์ค‘ํ•˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.


๋ณ€๊ฒฝ์‚ฌํ•ญ์€ diff ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•œ๋‹ค.

์•„๋ฌดํŠผ ๊ทธ๋ž˜์„œ ์ ์šฉ์„ ํ•˜๋ฉด

์•Œ์•„์„œ ์ž˜ ๋งž์ถฐ ๋„์›Œ์ค„ ๊ฒƒ์ด๋‹ค.




์‚ญ์ œ

์‚ญ์ œํ• ๋•Œ๋Š” deploy ๋Œ€์‹  destroy ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋ช…๋ น ๊ทœ์น™์€ deploy์™€ ๋™์ผํ•˜๋‹ค.

ํ•œ๋ฒˆ ๋ฌผ์–ด๋ณด๊ณ 


์ง€์šด๋‹ค.


๊ทธ๋Ÿผ ์Šคํƒ๋„ ์ง€์šฐ๊ณ 


๋ฆฌ์†Œ์Šค๋„ ์ง€์›Œ์งˆ ๊ฒƒ์ด๋‹ค.



์ฐธ์กฐ
https://aws.amazon.com/ko/cdk/
https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html
https://docs.aws.amazon.com/ko_kr/cdk/v2/guide/cli.html
https://docs.aws.amazon.com/cdk/v2/guide/environments.html