๊ณต์ง€
๋‰ด์Šค๋ ˆํ„ฐ ํ”Œ๋žซํผ ๋ณ€๊ฒฝ ์•ˆ๋‚ด

์ฃผ๊ฐ„ ์†Œ์‹์ง€

๐Ÿ”ญPulumi๋ฅผ ํ™œ์šฉํ•˜์—ฌ Python ์–ธ์–ด๋กœ AWS ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌํ•˜๊ธฐ - ๋ฐ”๋กœ ๋”ฐ๋ผํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” Pulumi ๋„์ž… ํ•ต์‹ฌ ๊ฐ€์ด๋“œ

Pulumi๋ฅผ ํ™œ์šฉํ•˜์—ฌ Python ์–ธ์–ด๋กœ AWS ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๊ฐ€์ด๋“œ๋ฅผ ๊ณต์œ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

2025.06.02 | ์กฐํšŒ 195 |
0
|
Aidens Lab ๋‰ด์Šค๋ ˆํ„ฐ์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€

Aidens Lab ๋‰ด์Šค๋ ˆํ„ฐ

๋Š์ž„์—†์ด ๋ณ€ํ™”ํ•˜๋Š” DevOps์™€ ํด๋ผ์šฐ๋“œ ๊ธฐ์ˆ  ์†์—์„œ ๊ธธ์„ ์žƒ์ง€ ์•Š๋„๋ก, 1์ธ ๊ฐœ๋ฐœ์ž์™€ ํŒ€์˜ ์„ฑ์žฅ์„ ๋•๋Š” ์ฃผ๊ฐ„ IT/๊ฐœ๋ฐœ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ „๋‹ฌํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ๊ตฌ๋…์ž๋‹˜, IT ์—ฌํ–‰์ž๋ฅผ ์œ„ํ•œ ์†Œ์‹์ง€์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ง€๋‚œ ๊ธ€์—์„œ IaC๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ์™€ Pulumi์˜ ๋™์ž‘ ๋ฐฉ์‹๊นŒ์ง€ ์‚ดํŽด๋ดค๋Š”๋ฐ์š”.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Pulumi๋ฅผ ํ™œ์šฉํ•ด์„œ AWS SQS๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด Pulumi์˜ ํ•ต์‹ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ์ž‘์„ฑํ•œ ๊ฐ€์ด๋“œ์ด๋‹ˆ, IaC์™€ Pulumi์— ๊ด€์‹ฌ ์žˆ์œผ์‹œ๋‹ค๋ฉด ๊ผญ ํ™•์ธํ•ด์ฃผ์„ธ์š”!

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

 

* ํ˜„์žฌ ๋ณธ ํ”Œ๋žซํผ์— ์‹ค์Šต ๊ฐ€์ด๋“œ์— ํ•„์š”ํ•œ ๋งˆํฌ๋‹ค์šด ๋ฌธ๋ฒ•์ด ๋ชจ๋‘ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ด€๊ณ„๋กœ, ๋ณด๋‹ค ๋‚˜์€ ์‹ค์Šต ๊ฒฝํ—˜์„ ์œ„ํ•ด ์•„๋ž˜ ํŽ˜์ด์ง€์—์„œ ๊ฐ€์ด๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋Š” ๊ฑธ ์ถ”์ฒœ๋“œ๋ ค์š”!

(๊ฐ€์ด๋“œ ๋‚ด์šฉ์€ ๋ชจ๋‘ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.)

 

๐Ÿ‘‰https://aidenslab-newsletter.beehiiv.com/p/pulumi-python-aws-pulumi-cd04fed1b6a229e8

 


1๏ธโƒฃPulumi ์„ค์น˜ ๋ฐ AWS ๊ณ„์ • ์„ค์ •

 

Pulumi๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์‚ฌ์šฉ ์ค‘์ธ PC์— Pulumi CLI๋ฅผ ์„ค์น˜ํ•˜๊ณ , AWS ๊ณ„์ • ์„ค์ •์„ ๋งˆ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Python ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž pip์™€ ๊ฐ€์ƒ ํ™˜๊ฒฝ venv๊ฐ€ ๋ฏธ๋ฆฌ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” WSL ํ™˜๊ฒฝ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰ํ•ด Pulumi๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

curl -fsSL https://get.pulumi.com | sh

 

์ž๋™์œผ๋กœ Pulumi ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด์„œ ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด Pulumi ๋ฒ„์ „์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

Pulumi๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Pulumi ํด๋ผ์šฐ๋“œ์— ๋กœ๊ทธ์ธ์„ ํ•˜๊ฑฐ๋‚˜ ๋กœ์ปฌ ๋กœ๊ทธ์ธ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋น ๋ฅธ ์‹ค์Šต์„ ์œ„ํ•ด ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๋กœ์ปฌ ๋กœ๊ทธ์ธ์„ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

pulumi login --local

 

๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์ด ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ ๋กœ๊ทธ์ธ๋˜์—ˆ๋‹ค๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

๋‹ค์Œ์€ ํด๋ผ์šฐ๋“œ ๊ณ„์ • ์„ค์ •์ธ๋ฐ์š”. Pulumi CLI๊ฐ€ AWS ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์‚ฌ์šฉ ์ค‘์ธ AWS ๊ณ„์ • ์ •๋ณด๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋กœ์ปฌ์— ์ด๋ฏธ AWS CLI๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด ๋ณ„๋„์˜ ๊ณ„์ • ์„ค์ •์€ ํ•„์š” ์—†์ง€๋งŒ, AWS CLI๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ CI/CD์—์„œ Pulumi๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ AWS Access Key ID์™€ AWS Secret Access Key๊ฐ€ ๋กœ์ปฌ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์ €์žฅ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

export AWS_ACCESS_KEY_ID="<AWS ๊ณ„์ •์˜ ACCESS KEY ID>"

export AWS_SECRET_ACCESS_KEY="<AWS ๊ณ„์ •์˜ SECRET ACCESS KEY>"

 


2๏ธโƒฃ์ƒˆ๋กœ์šด Pulumi ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

 

์ด์ œ Pulumi๋ฅผ ์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ํด๋”๋กœ ์ด๋™ํ•œ ๋‹ค์Œ ์ƒˆ๋กœ์šด Pulumi ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ฃ . ๋ณธ ๊ฐ€์ด๋“œ๋Š” AWS ์ธํ”„๋ผ ๊ด€๋ฆฌ๋ฅผ Python์œผ๋กœ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— aws-python์ด๋ž€ ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„์„ ๋ถ™์ธ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

pulumi new aws-python

 

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ํ„ฐ๋ฏธ๋„ ์ƒ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ์„ค๋ช…, ์Šคํƒ ์ด๋ฆ„, ๋น„๋ฐ€๋ฒˆํ˜ธ, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž, AWS ๋ฆฌ์ „์„ ์„ค์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

์ด ๊ณผ์ •๊นŒ์ง€ ๋ฌด์‚ฌํžˆ ๋งˆ์น˜๋ฉด Pulumi ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์— ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค!๐ŸŽ‰

ํ•ด๋‹น ๊ฒฝ๋กœ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์™€ ์˜ˆ์ œ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

Pulumi ๋™์ž‘์— ํ•„์š”ํ•œ ํ•ต์‹ฌ ํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Pulumi.yaml: ํ”„๋กœ์ ํŠธ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ
  • Pulumi.<์Šคํƒ๋ช…>.yaml: ํŠน์ • ์Šคํƒ(์˜ˆ: dev, prod)์˜ ๊ตฌ์„ฑ ๊ฐ’์„ ์ €์žฅ๋œ ํŒŒ์ผ
  • __main__.py: ์‹ค์ œ ์ธํ”„๋ผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํŒŒ์ผ
  • requirements.txt: ์˜์กด์„ฑ ๊ด€๋ฆฌ ํŒŒ์ผ

 

"๊ทธ๋ ‡๊ตฐ์š”... ๊ทผ๋ฐ ์Šคํƒ์ด ๋ญ์˜ˆ์š”?"

 

์•„๊นŒ๋ถ€ํ„ฐ ์Šคํƒ์ด๋ž€ ์šฉ์–ด๊ฐ€ ๊ณ„์† ๋‚˜์™€์„œ ๊ถ๊ธˆํ•˜์‹ค ์ˆ˜ ์žˆ๋Š”๋ฐ์š”.

Pulumi๋Š” ๋™์ผํ•œ ์ธํ”„๋ผ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋˜, ์„œ๋กœ ๊ฒฉ๋ฆฌ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฑธ Pulumi์—์„œ ์Šคํƒ์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, dev, staging, production๊ณผ ๊ฐ™์ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ชฉ์ ์˜ ํ™˜๊ฒฝ์„ ๋™์ผํ•œ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์ฃ .

๊ฐ ์Šคํƒ์€ ์ž์‹ ๋งŒ์˜ ๊ตฌ์„ฑ ์„ค์ •๊ณผ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์Šคํƒ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œ ๋‹ค๋ฅธ ์Šคํƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 


3๏ธโƒฃPulumi ์ธํ”„๋ผ ๊ด€๋ฆฌ ์ฝ”๋“œ ์ž‘์„ฑ

 

๋‹ค์‹œ Pulumi ํ”„๋กœ์ ํŠธ๋กœ ๋Œ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•  ๋•Œ ๋งŒ๋“ค์–ด์ง„ ์‹ค์ œ ์ธํ”„๋ผ ์ฝ”๋“œ(__main__.py)์—๋Š” AWS S3 ๋ฒ„ํ‚ท์„ ์ƒ์„ฑํ•˜๋Š” ์˜ˆ์ œ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด์žˆ์„ ํ…๋ฐ์š”.

S3 ๋ฒ„ํ‚ท์„ ์ƒ์„ฑํ•˜๋Š” ์˜ˆ์ œ ์ฝ”๋“œ๋„ ์ข‹์ง€๋งŒ, ๋ณธ ๊ฐ€์ด๋“œ์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™•์žฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” AWS SQS ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์˜ˆ์ œ๋ฅผ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.

AWS SQS๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋„ ๊ณ„์‹ค ํ…๋ฐ์š”.

SQS๋Š” ์™„์ „ ๊ด€๋ฆฌํ˜• ๋ฉ”์‹œ์ง€ ๋Œ€๊ธฐ์—ด ์„œ๋น„์Šค๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์— ์–ด๋–ค ๋ฉ”์‹œ์ง€๋“  ์•ˆ์ •์ ์œผ๋กœ ์ „์†ก, ์ €์žฅ, ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

์ข€ ๋” ์ž์„ธํ•œ ์„ค๋ช…์ด ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด ์ œ๊ฐ€ ์ง€๋‚œ๋ฒˆ์— AWS SQS์™€ SNS๋ฅผ ๋น„๊ตํ•œ ๊ธ€์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

๊ทธ๋Ÿผ, ์ด์ œ ์ธํ”„๋ผ ์ฝ”๋“œ ํŒŒ์ผ(__main__.py)์— ์•„๋ž˜ AWS SQS ์ƒ์„ฑ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

 

import pulumi

import pulumi_aws as aws

# SQS ์ƒ์„ฑ

# mySimpleQueue๋Š” Pulumi ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ์ด ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋…ผ๋ฆฌ์  ์ด๋ฆ„

my_queue = aws.sqs.Queue("mySimpleQueue",

name="my-app-queue", # ์‹ค์ œ ์ƒ์„ฑ๋  ํ ์ด๋ฆ„ (์„ ํƒ ์‚ฌํ•ญ, ์ง€์ • ์•ˆํ•˜๋ฉด Pulumi๊ฐ€ ์ž๋™ ์ƒ์„ฑ)

tags={

"Environment": "dev",

"Project": "MyNewsletterApp",

})

# ์ƒ์„ฑ๋œ SQS Queue์˜ ์ •๋ณด ์ถœ๋ ฅ

# pulumi.export()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด `pulumi up` ์‹คํ–‰ ํ›„ ํ„ฐ๋ฏธ๋„์— ํ•ด๋‹น ๊ฐ’ ์ถœ๋ ฅ

pulumi.export("queue_url", my_queue.id) # ์ƒ์„ฑ๋œ SQS์˜ URL ๋ฐ˜ํ™˜

pulumi.export("queue_arn", my_queue.arn) # ์ƒ์„ฑ๋œ SQS์˜ Amazon Resource Name (ARN) ๋ฐ˜ํ™˜

 


4๏ธโƒฃPulumi๋กœ ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค ๋ฐฐํฌ

 

์ธํ”„๋ผ ๊ด€๋ฆฌ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์™„๋ฃŒํ–ˆ๋‹ค๋ฉด ์ด์ œ Pulumi๋กœ ์‹ค์ œ ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•ด์•ผ๊ฒ ์ฃ ?

๋ฌผ๋ก  ๋ฐ”๋กœ ๋ฐฐํฌํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ธํ”„๋ผ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋”ฐ๋ฅผ ๊ฒƒ์„ ๊ถŒ์žฅ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

1. pulumi preview ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‹ค์ œ ์ธํ”„๋ผ ๋ณ€๊ฒฝ ์—†์ด ์˜ˆ์ •๋œ ์ž‘์—…์„ ๋ฏธ๋ฆฌ ํ™•์ธ

2. pulumi up ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‹ค์ œ ์ธํ”„๋ผ๋ฅผ ์ƒ์„ฑ ๋ฐ ์—…๋ฐ์ดํŠธ

pulumi preview ๋ช…๋ น์–ด๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ์•ˆ๋‚ด ํ›„, ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

์•„๊นŒ ์ธํ”„๋ผ ๊ด€๋ฆฌ ์ฝ”๋“œ์—์„œ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ–ˆ๋˜ SQS๊ฐ€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์—๋„ ์ž˜ ํ‘œ์‹œ๋˜๊ณ  ์žˆ๋„ค์š”.

๊ทธ๋Ÿผ pulumi up ๋ช…๋ น์–ด๋กœ ์‹ค์ œ AWS SQS๋ฅผ ๋ฐฐํฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๊นŒ pulumi preview ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ์ฒ˜๋Ÿผ ๋จผ์ € ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ์•ˆ๋‚ด ํ›„, ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

๊ทธ ๋‹ค์Œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒ ๋ƒ๋Š” ์งˆ๋ฌธ์— yes๋ฅผ ์„ ํƒํ•˜๋ฉด, ์•„๋ž˜์ฒ˜๋Ÿผ ์‹ค์ œ ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋œ ๋‹ค์Œ SQS URL๊ณผ ARN์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

์•„๋ž˜๋Š” pulumi up ๋ช…๋ น์–ด ์‹คํ–‰ ์ „ AWS ์ฝ˜์†”์˜ SQS ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค. ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์•„์ง ์ƒ์„ฑ๋œ ํ๊ฐ€ ์—†์ฃ .

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

ํ•˜์ง€๋งŒ pulumi up ๋ช…๋ น์–ด ์‹คํ–‰์ด ์™„๋ฃŒ๋˜์ž, ์•„๋ž˜์ฒ˜๋Ÿผ ์ธํ”„๋ผ ์ฝ”๋“œ์—์„œ ์ •์˜ํ•œ ์ด๋ฆ„(my-app-queue)์˜ ์ƒˆ๋กœ์šด ํ๊ฐ€ AWS ์ฝ˜์†” ํŽ˜์ด์ง€์— ํ‘œ์‹œ๋œ ๊ฒƒ์ด ๋ณด์ž…๋‹ˆ๋‹ค.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

ํ•ด๋‹น ํ์˜ ์ด๋ฆ„์„ ๋ˆŒ๋Ÿฌ์„œ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๋ณด๋ฉด, ์ธํ”„๋ผ ์ฝ”๋“œ์—์„œ ์ •์˜ํ–ˆ๋˜ ํƒœ๊ทธ("Environment": "dev", "Project": "MyNewsletterApp")๊ฐ€ ์ •์ƒ ๋ฐ˜์˜๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

 


5๏ธโƒฃPulumi๋กœ ๋ฐฐํฌํ•œ ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ

 

์ง€๊ธˆ๊นŒ์ง€ ์ธํ”„๋ผ ์ฝ”๋“œ ์ž‘์„ฑ๊ณผ ๋ฐฐํฌ ๊ณผ์ •์„ ์‹ค์Šต์œผ๋กœ ์ง„ํ–‰ํ•ด๋ดค๋Š”๋ฐ์š”.

์ด๋ ‡๊ฒŒ ๋ฐฐํฌํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค์‹œ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ๋„ ๋ฐฐํฌ๋งŒํผ์ด๋‚˜ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ ๊ฒฝ๋กœ์˜ ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜์ฒ˜๋Ÿผ pulumi destroy ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ, ๋น„๋ฐ€๋ฒˆํ˜ธ๋งŒ ์ž…๋ ฅํ•˜๋ฉด ๋˜๊ฑฐ๋“ ์š”.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

pulumi destroy ๋ช…๋ น์–ด๋Š” ํ•ด๋‹น ์Šคํƒ์˜ ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ œ๊ฑฐํ•ด์ฃผ์ง€๋งŒ, ์Šคํƒ๊ณผ ๊ด€๋ จ๋œ ์„ค์ •๊ณผ ํžˆ์Šคํ† ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ „์— ์‚ดํŽด๋ดค๋˜ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์— ์Šคํƒ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฑด๋ฐ์š”.

๋งŒ์•ฝ ์ด๋Ÿฐ ์Šคํƒ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋„ ๋ชจ๋‘ ์ง€์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด pulumi stack rm ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋‹จ, ์œ ์˜ํ•  ์ ์ด ๋‘ ๊ฐ€์ง€ ์žˆ์œผ๋‹ˆ ๊ผญ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

 

1. pulumi stack rm ๋ช…๋ น์–ด ์‹คํ–‰ ์ „์— ๋ฐ˜๋“œ์‹œ ๋จผ์ € pulumi destroy ๋ช…๋ น์–ด๋กœ ํ•ด๋‹น ์Šคํƒ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๋ชจ๋“  ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ฑฐํ•  ๊ฒƒ

2. ํ•œ๋ฒˆ ์ œ๊ฑฐ๋œ ์Šคํƒ ์ •๋ณด๋Š” ๋ณต๊ตฌ๊ฐ€ ์–ด๋ ค์šฐ๋ฏ€๋กœ ์‹ ์ค‘ํ•  ๊ฒƒ

 

ํ„ฐ๋ฏธ๋„์—์„œ pulumi stack rm ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ œ๊ฑฐํ•˜๋ ค๋Š” ์Šคํƒ์˜ ์ด๋ฆ„(dev)์„ ์ง์ ‘ ํƒ€์ดํ•‘ํ•ด์•ผ ์Šคํƒ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒจ๋ถ€ ์ด๋ฏธ์ง€

์ง€๊ธˆ๊นŒ์ง€ Pulumi๋กœ AWS ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณผ์ •์„ ์•„๋ž˜์˜ ํ•ต์‹ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋”ฐ๋ผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

1. Pulumi ์„ค์น˜ ๋ฐ ๊ณ„์ • ์„ค์ •

2. ์ƒˆ๋กœ์šด Pulumi ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

3. Pulumi ์ธํ”„๋ผ ๊ด€๋ฆฌ ์ฝ”๋“œ ์ž‘์„ฑ

4. Pulumi๋กœ ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค ๋ฐฐํฌ

5. Pulumi๋กœ ๋ฐฐํฌํ•œ ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ

 


๐Ÿ”ญ๋งˆ์น˜๋ฉฐ...

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Pulumi ๋„์ž…์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋„๋ก Pulumi ์„ค์น˜๋ถ€ํ„ฐ ๊ณ„์ • ์„ค์ •, ์ธํ”„๋ผ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ๋ฐฐํฌ๊นŒ์ง€ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ์ฐจ๊ทผ์ฐจ๊ทผ ๋‹ค๋ค„๋ดค๋Š”๋ฐ์š”.

Pulumi์™€ IaC ๋„์ž…์— ๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค๊ป˜ ๋„์›€์ด ๋˜์—ˆ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ, ๋‹ค์Œ ์†Œ์‹์ง€์—์„œ ๋ณด๋‹ค ์•Œ์ฐจ๊ณ  ํฅ๋ฏธ๋กœ์šด ๋‚ด์šฉ์œผ๋กœ ์ฐพ์•„๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜๋„ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ๊ตฌ๋…์ž๋‹˜ ๐Ÿ˜บ

 


๐Ÿ”—References

- https://spacelift.io/blog/infrastructure-as-code-toolsfrastructure-as-code-tools

- https://www.pulumi.com/docs/iac/concepts/testing/unit/

 

 

์ด๋ฒˆ ์†Œ์‹์ง€ ๋‚ด์šฉ์€ ์–ด๋– ์…จ๋‚˜์š”? ์†Œ์‹์ง€๋ฅผ ๋” ๋‚˜์€ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ํผ์—์„œ 1~2๋ถ„ ์ •๋„๋ฉด ๋๋‚˜๋Š” ์งง์€ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์žˆ์–ด์š”.๐Ÿ‘‡

https://forms.gle/jjkvp9htV3atYLHG8

์—ฌ๋Ÿฌ๋ถ„๋“ค์˜ ์†Œ์ค‘ํ•œ ์˜๊ฒฌ์— ํ•ญ์ƒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

 

๋ณธ ์†Œ์‹์ง€๋ฅผ ์•„์นด์ด๋น™ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ธ”๋กœ๊ทธ๋„ ์šด์˜ ์ค‘์ž…๋‹ˆ๋‹ค :)

๐Ÿ”ญAiden's Lab ๋‘˜๋Ÿฌ๋ณด๊ธฐ

 

๋‹ค๊ฐ€์˜ฌ ๋‰ด์Šค๋ ˆํ„ฐ๊ฐ€ ๊ถ๊ธˆํ•˜์‹ ๊ฐ€์š”?

์ง€๊ธˆ ๊ตฌ๋…ํ•ด์„œ ์ƒˆ๋กœ์šด ๋ ˆํ„ฐ๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”

โœ‰๏ธ

์ด๋ฒˆ ๋‰ด์Šค๋ ˆํ„ฐ ์–ด๋– ์…จ๋‚˜์š”?

Aidens Lab ๋‰ด์Šค๋ ˆํ„ฐ ๋‹˜์—๊ฒŒ โ˜•๏ธ ์ปคํ”ผ์™€ โœ‰๏ธ ์ชฝ์ง€๋ฅผ ๋ณด๋‚ด๋ณด์„ธ์š”!

๋Œ“๊ธ€

์˜๊ฒฌ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”

ํ™•์ธ
์˜๊ฒฌ์ด ์žˆ์œผ์‹ ๊ฐ€์š”? ์ œ์ผ ๋จผ์ € ๋Œ“๊ธ€์„ ๋‹ฌ์•„๋ณด์„ธ์š” !

๋‹ค๋ฅธ ๋‰ด์Šค๋ ˆํ„ฐ

ยฉ 2025 Aidens Lab ๋‰ด์Šค๋ ˆํ„ฐ

๋Š์ž„์—†์ด ๋ณ€ํ™”ํ•˜๋Š” DevOps์™€ ํด๋ผ์šฐ๋“œ ๊ธฐ์ˆ  ์†์—์„œ ๊ธธ์„ ์žƒ์ง€ ์•Š๋„๋ก, 1์ธ ๊ฐœ๋ฐœ์ž์™€ ํŒ€์˜ ์„ฑ์žฅ์„ ๋•๋Š” ์ฃผ๊ฐ„ IT/๊ฐœ๋ฐœ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ „๋‹ฌํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋‰ด์Šค๋ ˆํ„ฐ ๋ฌธ์˜eduukulelekim@gmail.com

๋ฉ”์ผ๋ฆฌ ๋กœ๊ณ 

๋„์›€๋ง ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ ์˜ค๋ฅ˜ ๋ฐ ๊ธฐ๋Šฅ ๊ด€๋ จ ์ œ๋ณด ๋‰ด์Šค๋ ˆํ„ฐ ๊ด‘๊ณ  ๋ฌธ์˜

์„œ๋น„์Šค ์ด์šฉ ๋ฌธ์˜admin@team.maily.so

๋ฉ”์ผ๋ฆฌ ์‚ฌ์—…์ž ์ •๋ณด

๋ฉ”์ผ๋ฆฌ (๋Œ€ํ‘œ์ž: ์ดํ•œ๊ฒฐ) | ์‚ฌ์—…์ž๋ฒˆํ˜ธ: 717-47-00705 | ์„œ์šธ ์„œ์ดˆ๊ตฌ ๊ฐ•๋‚จ๋Œ€๋กœ53๊ธธ 8, 8์ธต 11-7ํ˜ธ

์ด์šฉ์•ฝ๊ด€ | ๊ฐœ์ธ์ •๋ณด์ฒ˜๋ฆฌ๋ฐฉ์นจ | ์ •๊ธฐ๊ฒฐ์ œ ์ด์šฉ์•ฝ๊ด€ | ๋ผ์ด์„ ์Šค