• Aiden's Lab แ„‚แ…ฒแ„‰แ…ณแ„…แ…ฆแ„แ…ฅ
  • Posts
  • ๐Ÿ”ญPulumiแ„…แ…ณแ†ฏ แ„’แ…ชแ†ฏแ„‹แ…ญแ†ผแ„’แ…กแ„‹แ…ง Python แ„‹แ…ฅแ†ซแ„‹แ…ฅแ„…แ…ฉ AWS แ„…แ…ตแ„‰แ…ฉแ„‰แ…ณ แ„€แ…ชแ†ซแ„…แ…ตแ„’แ…กแ„€แ…ต - แ„‡แ…กแ„…แ…ฉ แ„„แ…กแ„…แ…กแ„’แ…ขแ„‡แ…ฉแ†ฏ แ„‰แ…ฎ แ„‹แ…ตแ†ปแ„‚แ…ณแ†ซ Pulumi แ„ƒแ…ฉแ„‹แ…ตแ†ธ แ„’แ…ขแ†จแ„‰แ…ตแ†ท แ„€แ…กแ„‹แ…ตแ„ƒแ…ณ

๐Ÿ”ญPulumiแ„…แ…ณแ†ฏ แ„’แ…ชแ†ฏแ„‹แ…ญแ†ผแ„’แ…กแ„‹แ…ง Python แ„‹แ…ฅแ†ซแ„‹แ…ฅแ„…แ…ฉ AWS แ„…แ…ตแ„‰แ…ฉแ„‰แ…ณ แ„€แ…ชแ†ซแ„…แ…ตแ„’แ…กแ„€แ…ต - แ„‡แ…กแ„…แ…ฉ แ„„แ…กแ„…แ…กแ„’แ…ขแ„‡แ…ฉแ†ฏ แ„‰แ…ฎ แ„‹แ…ตแ†ปแ„‚แ…ณแ†ซ Pulumi แ„ƒแ…ฉแ„‹แ…ตแ†ธ แ„’แ…ขแ†จแ„‰แ…ตแ†ท แ„€แ…กแ„‹แ…ตแ„ƒแ…ณ

Pulumiแ„…แ…ณแ†ฏ แ„’แ…ชแ†ฏแ„‹แ…ญแ†ผแ„’แ…กแ„‹แ…ง Python แ„‹แ…ฅแ†ซแ„‹แ…ฅแ„…แ…ฉ AWS แ„…แ…ตแ„‰แ…ฉแ„‰แ…ณแ„…แ…ณแ†ฏ แ„€แ…ชแ†ซแ„…แ…ตแ„’แ…กแ„‚แ…ณแ†ซ แ„’แ…ขแ†จแ„‰แ…ตแ†ท แ„€แ…กแ„‹แ…ตแ„ƒแ…ณแ„…แ…ณแ†ฏ แ„€แ…ฉแ†ผแ„‹แ…ฒแ„ƒแ…ณแ„…แ…ตแ†ธแ„‚แ…ตแ„ƒแ…ก.

์•ˆ๋…•ํ•˜์„ธ์š”, Aidenโ€™s Lab ๋‰ด์Šค๋ ˆํ„ฐ์ž…๋‹ˆ๋‹ค.

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

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

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

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

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

์ด๋ฒˆ ๊ธ€์—์„œ ๋‹ค๋ฃฌ ์ฃผ์ œ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”! ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ๋” ๋‚˜์€ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ํผ์—์„œ ์งง์€ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์žˆ์–ด์š”.

๐Ÿ‘‰ ํ”ผ๋“œ๋ฐฑ ๋ณด๋‚ด๊ธฐ (1~2๋ถ„ ์†Œ์š”)

์—ฌ๋Ÿฌ๋ถ„๋“ค์˜ ์†Œ์ค‘ํ•œ ์˜๊ฒฌ์€ Aidenโ€™s Lab ๋‰ด์Šค๋ ˆํ„ฐ์—๊ฒŒ ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค!

๐Ÿ”ญAidenโ€™s Lab์—์„œ ๋” ๋งŽ์€ ์•„ํ‹ฐํด์„ ๋งŒ๋‚˜๋ณด์„ธ์š”

๋ฐœํ–‰๋œ ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ์•„์นด์ด๋น™ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ ์ค‘์ž…๋‹ˆ๋‹ค.