Aws-cli: Cloudformation ๋ฐฐํฌ๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜ ํŒŒ์ผ์„ ์ˆ˜๋ฝํ•˜๋„๋ก ํ—ˆ์šฉ

์— ๋งŒ๋“  2017๋…„ 09์›” 13์ผ  ยท  55์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: aws/aws-cli

cloudformation deploy ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ create-stack ๋ฐ update-stack์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํŒŒ์ผ( --parameter-override ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ)๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์—ฌ๊ธฐ์—์„œ ์š”์ฒญ: https://github.com/awslabs/serverless-application-model/issues/111

closed-for-staleness cloudformation packagdeploy customization feature-request

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด jq ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
aws cloudformation deploy --parameter-overrides $(jq -r '.[] | [.ParameterKey, .ParameterValue] | join("=")' param.json) ...
๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์— ๋”ฐ๋ผ ์ถ”๊ฐ€ ์ด์Šค์ผ€์ดํ”„๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  55 ๋Œ“๊ธ€

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์—ฌ๊ธฐ์— ํ•„์š”ํ•œ ๊ฒƒ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://github.com/aws/aws-cli/blob/develop/awscli/customizations/cloudformation/deploy.py#L178

JSON ํŒŒ์ผ์„ ์ฝ๊ณ  ๋น ๋ฅธ ์˜จ์ „์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•œ ๋‹ค์Œ deploy() ํ•ฉ๋‹ˆ๋‹ค.

Cloudformation ๋ฐฐํฌ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

@sanathkr ์ƒ๊ฐ?

์ด ๊ธฐ๋Šฅ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ‘

๋˜ํ•œ package ์ž‘์—…์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”! ๐Ÿ‘

create-stack ๋ฐ update-stack CF ๋ช…๋ น์—์„œ์™€ ๊ฐ™์ด --parameters ์™€ ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜ ํŒŒ์ผ์„ ์ „๋‹ฌํ•˜๋ฉด(์ด์ƒ์ ์œผ๋กœ๋Š” ๋™์ผํ•œ ํŒŒ์ผ ๋‚ด์šฉ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ) CF ํ…œํ”Œ๋ฆฟ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ๊ฐ€ ์ข€ ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ๋‚˜. ๊ทธ ๊ธฐ๋Šฅ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด +1์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

์•ˆ๋…•ํ•˜์„ธ์š”!

AWS CLI์™€ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์œ„ํ•ด UserVoice ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ณผ์ •์˜ ์ผํ™˜์œผ๋กœ GitHub์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋กœ ๋Œ€ํ™”๋ฅผ ํฌ์„ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ€์žฅ ๊ด€์‹ฌ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋” ์‰ฝ๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ง€์›์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ UserVoice ์ž…๋ฌธ์„œ(์•„์ง ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ): ์•„์ด๋””์–ด๊ฐ€ ๊ฒŒ์‹œ๋œ ํ›„ ์‚ฌ๋žŒ๋“ค์€ ์•„์ด๋””์–ด์— ํˆฌํ‘œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ œํ’ˆ ํŒ€์€ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์ œ์•ˆ์— ์ง์ ‘ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

GitHub์—์„œ ๊ธฐ์กด ๊ธฐ๋Šฅ ์š”์ฒญ์„ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์„ธ์š”!

๊ทธ๋ฆฌ๊ณ  ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด ๋ฌธ์ œ๋Š” ํ›„์†์„ ์œ„ํ•ด GitHub์— ๊ณ„์† ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ ๊ฒŒ์‹œ๋ฌผ์„ UserVoice๋กœ ํ…์ŠคํŠธ ์ „์šฉ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— GitHub ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์˜๊ฒฌ๊ณผ ํ† ๋ก ์„ ๊ณ„์† ์—ผ๋‘์— ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

GitHub๋Š” ๋ฒ„๊ทธ ๋ณด๊ณ  ์ฑ„๋„๋กœ ๋‚จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ ๋ฒˆ, ์ด ๋ฌธ์ œ๋Š” ์ด์ œ https://aws.uservoice.com/forums/598381-aws-command-line-interface ์—์„œ ์ œ๋ชฉ์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-AWS SDK ๋ฐ ๋„๊ตฌ ํŒ€

์ด ํ•ญ๋ชฉ์€ ํŠนํžˆ UserVoice( https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168409-allow-cloudformation-deploy-to-accept-a-paramater) ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด +1์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

์ปค๋ฎค๋‹ˆํ‹ฐ ํ”ผ๋“œ๋ฐฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ GitHub ๋ฌธ์ œ์— ๊ธฐ๋Šฅ ์š”์ฒญ์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด jq ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
aws cloudformation deploy --parameter-overrides $(jq -r '.[] | [.ParameterKey, .ParameterValue] | join("=")' param.json) ...
๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์— ๋”ฐ๋ผ ์ถ”๊ฐ€ ์ด์Šค์ผ€์ดํ”„๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ๋„ +1ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ํ•œ jq ๋ฅผ jp ๋ฐ”๊พธ๊ฒ ์Šต๋‹ˆ๋‹ค. JMESPath ๋Š” ๋ฐฐ์šธ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

$ jp \
  --unquoted \
  --filename example-app-params-staging.json  \
  "join(' ', @[].join('=', [ParameterKey, ParameterValue])[])"
HostedZone=example.com KeyName=example-ap-southeast-2 TargetPort=8080 VpcStackName=vpc-example

AWS CodePipeline CloudFormation ๋ฐฐํฌ ์ž‘์—…์— ํŠน์ • ํ…œํ”Œ๋ฆฟ ๊ตฌ์„ฑ ํŒŒ์ผ ํ˜•์‹์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด ํ˜•์‹๋„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•ด +1. "aws cloudformation deploy"๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ ์ดํ•ดํ•˜์ง€๋งŒ ์ด ๋ช…๋ น์—๋Š” ๊ธฐ๋Šฅ, ํƒœ๊ทธ ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜(๋‹ค๋ฅธ ๋ชจ๋“  aws cloudformation ๋ช…๋ น๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ)์— ๋Œ€ํ•œ ๊ฐœ๋ณ„ ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์˜ JSON ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ช…๋ น์ค„์˜ string=string). ๋ชจ๋“  "aws cloudformation" ๋ช…๋ น์ด ์ผ๊ด€๋˜๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ฑฐ์˜ ๋ชจ๋“  aws CLI ๋ช…๋ น๊ณผ ๊ฐ™์€ cli-input-json ์‚ฌ์šฉ ํฌํ•จ). "aws cloudformation deploy"์— ๋Œ€ํ•œ ํƒœ๊ทธ ๊ตฌ์„ฑ์„ ๋‹จ์ˆœํ™”ํ•˜๋ ค๋ฉด --tags-overrides ๋˜๋Š” --parameters-overrides์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋„์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ ๊ธฐ๋Šฅ ์š”์ฒญ ์‹œ, ์ด๊ฒƒ์ด ์ง€์›๋œ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์žˆ์œผ๋ฉด ์ข‹์€ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค! cli๋กœ cf ์Šคํƒ์„ ์ƒ์„ฑํ•  ๋•Œ ๋ฉฑ๋“ฑ์„ฑ์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘

+1

+1

+1

@ColdFire87 @dan-lind @mnwk ์ฒซ ๋ฒˆ์งธ ํ˜ธ๋งŒ ๐Ÿ‘ ํ•˜๊ณ  ์ด ํ˜ธ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ŠคํŒธ ๋ฉ”์ผ์„ ๋ณด๋‚ด์ง€ ์•Š์œผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๐Ÿ‘๊ฐ€ ์žˆ๋Š” ๋Œ“๊ธ€์€ 20๋ช…์—๊ฒŒ ํ•‘์ž…๋‹ˆ๋‹ค....
(๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฏธ์•ˆํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์‹ธ์›Œ์•ผํ•ฉ๋‹ˆ๋‹ค ...)

@pierreozoux ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์„ ๊ท€์ฐฎ๊ฒŒ ํ•  ์˜๋„๋Š” ์•„๋‹ˆ์—ˆ์–ด์š” :)

@cervantek์ด ๋งํ•œ ๊ฒƒ. ์ด ํ‹ฐ์ผ“์ด create-stack ์™€์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์ด ๋ชจ๋“  ์˜ต์…˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

          [--template-body <value>]
          [--template-url <value>]
          [--parameters <value>]
          [--capabilities <value>]
          [--tags <value>]

๋‚˜ ๊ฐ™์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑ๋œ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค create-stack ๋ฐ update-stack ๊ทธ๋“ค์ด ์‚ฌ์šฉํ•˜๋„๋ก ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค deploy . ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

--parameters์— +1์€ JSON ํŒŒ์ผ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํŒ€์€ ์ตœ๊ทผ์— S3 ๋ฒ„ํ‚ท์— ์—…๋กœ๋“œํ•ด์•ผ ํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ํฐ cloudformation ํ…œํ”Œ๋ฆฟ์„ ์ƒ์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ์€ create-stack ๋ฐ update-stack์—์„œ ๋ฐฐํฌ๋กœ ์ „ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒˆ ๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•  ๋งค๊ฐœ๋ณ€์ˆ˜ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด +1

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด +1

+1

+1

+1

+1

@olivier-schmitt-sonarsource @anshul0915 @lmunro @MiMo42 @markusbecker @benjammin12 ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋‹จ์ง€ ๋ฌธ์ œ๋ฅผ +1ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌ๋…ํ•œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ŠคํŒธ์„ ๋ณด๋‚ด๋Š” ๋Œ€์‹  ์ƒ์œ„ ๋ฌธ์ œ๋ฅผ ๐Ÿ‘๋งŒ ํ•ด์ฃผ์„ธ์š”. ๊ฐ์‚ฌ ํ•ด์š”.

๐Ÿ‘

์ด์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ key=value ๋งค๊ฐœ๋ณ€์ˆ˜ ์Œ ๋ชฉ๋ก์ด ์žˆ๋Š” .ini ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
aws cloudformation deploy --parameter-overrides $(cat parameters.ini)
ํƒœ๊ทธ์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ key=value ๋งค๊ฐœ๋ณ€์ˆ˜ ์Œ ๋ชฉ๋ก์ด ์žˆ๋Š” .ini ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
aws cloudformation deploy --parameter-overrides $(cat parameters.ini)
ํƒœ๊ทธ์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ํ›Œ๋ฅญํ•˜๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ('json' ์ž…๋ ฅ์„ ์ง€์›ํ•˜๋Š”) ๋‹ค๋ฅธ ๋ชจ๋“  ๋ช…๋ น๊ณผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 'json' ํŒŒ์ผ ํ˜•์‹์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  '๋ฐฐํฌ'๋ฅผ ์œ„ํ•œ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ํŒŒ์ผ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ช…๋ น. ์ด๊ฒƒ์€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ชจ๋“  'jq' ๋ช…๋ น ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cat parameters.json | jq -r '.[] | .ParameterKey + "=" + .ParameterValue'

๋˜ํ•œ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐฐํฌ ๋ช…๋ น์˜ ์ž…๋ ฅ์œผ๋กœ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

aws cloudformation deploy --template-file ./sample-template.yaml --stack-name sample-stack --parameter-overrides $(cat parameters.json | jq -r '.[] | .ParameterKey + "=" + .ParameterValue')

๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

์šด ์ข‹๊ฒŒ๋„ ์ด ๋ชจ๋“  ๋ฌธ์ œ๋Š” CDK์— ์˜ํ•ด ์™„์ „ํžˆ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋™ํ–ˆ๋‹ค.

์ €๋Š” create-stack/update-stack์—์„œ ๋ฐฐํฌ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋™ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ์ด ๋ฌธ์ œ์™€ ํ•จ๊ป˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. 3๋…„ ํ›„์—๋„ ์—ฌ์ „ํžˆ ์ด์ „ ๋ฐฉ๋ฒ•๊ณผ ๋™๋“ฑํ•˜์ง€ ์•Š๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ํƒœ๊ทธ์˜ ๊ฐ’์— ๊ณต๋ฐฑ์ด ์žˆ๋Š” ํƒœ๊ทธ ํŒŒ์ผ์— ๋Œ€ํ•ด ์œ„์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ ๋‚ด ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๋” ๊ทผ๋ณธ์ ์ž…๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์˜ ์ถœ๋ ฅ์€ ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ ์ง‘ํ•ฉ ID๋ฅผ ์–ป์œผ๋ ค๋ฉด ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š์€ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ create-change-set ๋ฉ”์†Œ๋“œ๊ฐ€ json์—์„œ id๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋งค์šฐ ์—‰๋šฑํ•œ(!) ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์˜ ์ด์ „ ๋ฉ”์‹œ์ง€์— ์žˆ๋Š” uservoice ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ๋Š์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ํ˜„์žฌ ์–ด๋””์—์„œ ์ถ”์ ๋˜๊ณ  ์žˆ๋Š”์ง€ ๋˜๋Š” ์—ฌ์ „ํžˆ ์ž‘์—… ์ค‘์ธ์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๋Ÿฌ๋ถ„, ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋ณด์‹ญ์‹œ์˜ค. cat ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ SSM ๋ฅผ ํ†ตํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ• - ์ด๋Š” ๋งค์šฐ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์ด๋ฉฐ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ CFN ๋Œ€ํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ๋‹ค๋ฅธ ๋Œ€์•ˆ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

create-stack ๋ฐ update-stack ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๋™์•ˆ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฐพ์•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋„ ๐Ÿ‘๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ์š”์ฒญ์— ์ „๋‹ฌํ•  ์˜ต์…˜์ด ์žˆ๋‹ค๋Š” ์š”์ฒญ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. CodePipeline์ด CloudFormation์— ๋Œ€ํ•ด ํ—ˆ์šฉํ•˜๋Š” JSON ํ˜•์‹์„ ๋”ฐ๋ฅด๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

CloudFormation ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด CodePipeline์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์—์„œ ์ปค๋ฐ‹๋œ CodePipeline ํ˜•์‹์˜ CloudFormation ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด๋ฏธ ๊ด€๋ก€์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์ „์ฒด CI/CD ์‹คํ–‰์„ ์‹คํ–‰ํ•  ๋•Œ ์œ ์šฉํ•˜์ง€๋งŒ ๋งค์šฐ ์ง€๋ฃจํ•œ ๋กœ์ปฌ ๊ฐœ๋ฐœ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. CodePipeline JSON์„ aws cloudformation create-stack ๋ฐ update-stack --parameters file://params.json ๋ฅผ ํ†ตํ•ด ์ˆ˜๋ฝํ•˜๋Š” JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์ž‘์—…์œผ๋กœ ์ผ๋ถ€ ํ•ดํ‚น์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์‚ฌ๋žŒ๋“ค์€ jq ๋“ฑ์œผ๋กœ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ํ•ดํ‚น์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”!

์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜์‹ญ์‹œ์˜ค! ์–ด์„œ AWS, ์ด๊ฒƒ์€ ๊ฑฐ์˜ 3๋…„ ๋™์•ˆ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

๋งค์šฐ ์„ฑ๊ฐ€์‹œ๊ณ  ์ฃผ์ œ์™€ ๋‹ค์†Œ ๊ด€๋ จ์ด ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฒƒ์€ CLI๋ฅผ ํ†ตํ•ด CFN ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ํ˜•์‹ ๊ฐ„์˜ ๋ถˆ์ผ์น˜ ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ํ˜„์žฌ deploy ์‚ฌ์šฉ์ž์ด๋ฉฐ ์ง€๊ธˆ๊นŒ์ง€ cat - ์ฆ‰ --parameter-overrides $(shell cat configs/${LNMS_ENV}.properties) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ๋ผ์ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ CFN์˜ ๋ณ€๊ฒฝ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Terraform์˜ plan ์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. aws cloudformation create-change-set ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ์žฌ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ deploy ํ˜•์‹๊ณผ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๋ฐฐ์†ก๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค!

deploy ๋Œ€ํ•œ CLI ๋ฌธ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ParameterKey1=ParameterValue1

create-stack , update-stack ๋ฐ create-change-set ๋Œ€ํ•œ CLI ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ParameterKey=string,ParameterValue=string

JSON์„ ์ œ๊ณตํ•˜๋Š” ์˜ต์…˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋“ค์ด ์™œ ๋‹ค๋ฅธ์ง€, ์™œ deploy ๊ฐ€ ๋™์ผํ•œ JSON ํ˜•์‹์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ๋ณธ์งˆ์ ์œผ๋กœ ๋™์ผํ•œ ๋‘ ๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํŒŒ์ผ์„ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์†”์งํžˆ ์ •๋ง ์ด์ƒํ•œ ๋””์ž์ธ์ž…๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ์ด ์—†๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜ ํŒŒ์ผ์˜ ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ ค๋Š” ์ •๋‹นํ•˜์ง€ ๋ชปํ•œ ๋™๊ธฐ์ž…๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ์ž‘์€(๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ๋“ค์ด ์ž‘๋‹ค๋Š” ๊ฒƒ์€ ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค) ์‹ค์ œ๋กœ ์ƒ์‚ฐ์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

์ถ”์‹  @pablods90 ์ด ์ด๊ฒƒ์„ ์ทจํ•˜๋Š” ๊ฒƒ์„ ๋ˆˆ์น˜์ฑ„์ง€

+1

Captain Consistency์˜ ๋ชจํ—˜์€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

update-stack ์™€๋„ ํ˜ธํ™˜๋˜๋Š” ํ˜•์‹์œผ๋กœ deploy ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด cat ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[
    {
        "ParameterKey": "ParamEnv",
        "ParameterValue": "prod"
    }
]

Deploy:CloudFormation ์œ ํ˜•์˜ ์ž‘์—…์ด ํฌํ•จ๋œ CodePipeline ๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ CFN์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

{ 
  "Parameters": {
     "ParamEnv": "prod"
  }
}

๋” ์ด์ƒ ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค... ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ณ„์†ํ•ด์„œ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์— ์ •๋ง ์ง€์ณค์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚˜์˜๋‹ค.

cat ๋˜๋Š” jq ํ—›์†Œ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ aws cloudformation deploy ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ•œ ์ค„ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ CodePipeline์šฉ ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ทธ๋“ค์ด ์ˆ˜์ •ํ•˜์ง€ ์•Š์„ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๋“ค์˜ ์ดˆ์ ์ด ์ง€๊ธˆ cdk์ด๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ๋‚˜๋Š” ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์„ ํฌ๊ธฐํ•˜๊ณ  ๋‚ด๊ฐ€ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ผ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐํฌ๋ฅผ ์‹œ๋„ํ–ˆ๊ณ  ๊ฒฐ๊ตญ ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ผ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. create ๋ฐ update stack cli ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด ์ž์‹ ์˜ "upsert" bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค. 100์ค„ ๊ธธ์ด์ง€๋งŒ ์ ์–ด๋„ ์ง€๊ธˆ์€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” ์ด๊ฒƒ์ด ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ˆ˜๋…„ ๋™์•ˆ ์ด๊ฒƒ์„ ๋งŒ๋“ค ๊ฒƒ์„ ์š”์ฒญํ–ˆ์ง€๋งŒ CloudFormation์ด ์•„์ง ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์ด ์ƒํ™ฉ์„ ๋ณด๊ณ  ์ •๋ง ์‹ค๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด๋กœ ํŒ€์„ ์ด๋Œ๊ณ  ์žˆ๋Š”์ง€ ์ด๊ฒƒ์€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. . . . . . .

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋˜์–ด ์ •๋ง ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

PR์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ณด๊ณ  ๊ทธ๋Ÿฌํ•œ ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

๋˜ํ•œ ์—ฌ๋Ÿฌ ์ค„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•(์ ์–ด๋„ Windows ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ CLI์—์„œ๋Š”)์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ๋งค๊ฐœ๋ณ€์ˆ˜ ํŒŒ์ผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ค„ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฌธ์ œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ํ›Œ๋ฅญํ•œ ์ผ์„ ํ•ด์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด PR์€ AWS CLI v.2.0.39์—์„œ ๋ณ‘ํ•ฉ ๋ฐ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@vz10 ์—…๋ฐ์ดํŠธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Btw, ์ด ๊ตฌํ˜„(๋งค๊ฐœ๋ณ€์ˆ˜ ํŒŒ์ผ์„ ํ†ตํ•ด)์ด ์—ฌ๋Ÿฌ ์ค„ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ—ˆ์šฉํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ AWS CLI๋ฅผ ์‹คํ–‰ํ•˜๋Š” Windows ๋ฐฐ์น˜ ํ™˜๊ฒฝ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@bs-thomas ์—ฌ๋Ÿฌ ์ค„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ JSON ํ˜•์‹์ด ์ง€์›ํ•œ๋‹ค๋ฉด ์ž˜ ์ž‘๋™ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•ด๋ณด์‹œ๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@vz10 Multi-line์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ \n์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ์ถ”ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ CLI๊ฐ€ CLI ๋งค๊ฐœ๋ณ€์ˆ˜ ์žฌ์ •์˜์— ๋Œ€ํ•ด YAML ํ˜•์‹์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค ;-)

@bs-thomas ๋˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ ์š”์ฒญ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ƒ์„ฑํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜ ์žฌ์ •์˜๊ฐ€ YAML์„ ์ดํ•ดํ•˜๋„๋ก ํ•˜๋Š” ์ „ํˆฌ์˜ ์ ˆ๋ฐ˜์ด ๋ฉ๋‹ˆ๋‹ค.

@vz10 ๋„ค, ๋ฐ”๋กœ ํ• ๊ฒŒ์š”.

Btw, JSON ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ธฐ์— ๋Œ€ํ•ด ๋ถˆ์พŒํ•œ ์ ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •์ˆ˜๋‚˜ ๋ถ€์šธ ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌธ์ž์—ด๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‘๋‹ต์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

image

๊ทธ ๋‹ค์Œ์—!

@bs-thomas ์˜ˆ, ์•ฝ๊ฐ„ ์ด์ƒํ•˜์ง€๋งŒ cloudformation create-stack ์˜ˆ์ƒํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋™์ž‘์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ’์€ ๋ฌธ์ž์—ด์ด๋ฉฐ ์ดํ›„์— ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋ฉฐ ๋ถ€์šธ ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ ํ˜•์ด ์—†์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰