cloudformation deploy
๋ช
๋ น์ ์คํํ ๋ create-stack ๋ฐ update-stack์ผ๋ก ์ํํ ์ ์๋ ๊ฒ์ฒ๋ผ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ผ( --parameter-override
๋งค๊ฐ๋ณ์๋ก)๋ก ์ ๋ฌํ ์ ์์ผ๋ฉด ์ ์ฉํ ๊ฒ์
๋๋ค.
๋ํ ์ฌ๊ธฐ์์ ์์ฒญ: https://github.com/awslabs/serverless-application-model/issues/111
์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ์ฌ๊ธฐ์ ํ์ํ ๊ฒ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
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 ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ์ ๋ํด ๋ถ์พํ ์ ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ ์๋ ๋ถ์ธ ๊ฐ์ ํ์ฉํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ ๋ฌธ์์ด๋ก ์ง์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ต์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
๊ทธ ๋ค์์!
@bs-thomas ์, ์ฝ๊ฐ ์ด์ํ์ง๋ง cloudformation create-stack
์์ํ๋ ๊ฒ๊ณผ ๋์ผํ ๋์์
๋๋ค. ๋ชจ๋ ๊ฐ์ ๋ฌธ์์ด์ด๋ฉฐ ์ดํ์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ฉฐ ๋ถ์ธ ๋งค๊ฐ๋ณ์ ์ ํ์ด ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๊ตฐ๊ฐ๊ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด jq ๋ฅผ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๋ค.
aws cloudformation deploy --parameter-overrides $(jq -r '.[] | [.ParameterKey, .ParameterValue] | join("=")' param.json) ...
๋งค๊ฐ๋ณ์ ๊ฐ์ ๋ฐ๋ผ ์ถ๊ฐ ์ด์ค์ผ์ดํ๊ฐ ํ์ํ ์ ์์ต๋๋ค.