22C. EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์น ์๋ฒ๋ฅผ ์ค์น, ์คํํ๋ CloudFormation ํ ํ๋ฆฟ
About 1 min
22C. EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์น ์๋ฒ๋ฅผ ์ค์น, ์คํํ๋ CloudFormation ํ ํ๋ฆฟ ๊ด๋ จ
๋ชฉ์ฐจ
์๋ง์กด ์น ์๋น์ค๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์
22์ฅ - 3. EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์น ์๋ฒ๋ฅผ ์ค์น, ์คํํ๋ CloudFormation ํ
ํ๋ฆฟ
์๋ง์กด ์น ์๋น์ค๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์
๋ค์์ EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ํ์น ์น ์๋ฒ๋ฅผ ์ค์น, ์คํํ๋ ํ ํ๋ฆฟ์ ๋๋ค. ์ด์ ํ ํ๋ฆฟ์ด ์ ์ ๋ณต์กํด์ง๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์์์ ์ค๋ช ํ ๋ถ๋ถ์ ์๋ตํ๊ณ ์๋ก ์ถ๊ฐ๋ ๋ถ๋ถ๋ง ์ค๋ช ํ๊ฒ ์ต๋๋ค.
Ec2Instance
โProperties
โUserData
: EC2 ์ธ์คํด์ค๊ฐ ์์ฑ๋ ์งํ ์คํํ ์คํฌ๋ฆฝํธ์ ๋๋ค. ์์ ์์๋ bash ์คํฌ๋ฆฝํธ๋ก ์์ฑํ์ต๋๋ค./opt/aws/bin/cfn-init
์ CloudFormation์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ Bootstrap ์คํฌ๋ฆฝํธ์ ๋๋ค. ์ฌ๊ธฐ์ cfn-init์ ์คํํด์ผ ์๋ packages์์ ์ ์ํ ํจํค์ง๋ฅผ ์ค์นํ ์ ์๊ณ , services์์ ์ ์ํ ํจํค์ง๋ฅผ ์คํํ ์ ์์ต๋๋ค. cfn-init์ -r ์ต์ ์๋ ์์ฑ๋ EC2 ์ธ์คํด์ค์ ๋ฆฌ์์ค ID๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ฆฌ์์ค ID๋ Resources์ Ec2Instance์ ๊ฐ์ด ์ฌ์ฉ์๊ฐ ์ํ๋ ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.Ec2Instance
โMetadata
โAWS::CloudFormation::Init
โconfig
:packages
: cfn-init์ด ์ค์นํ ํจํค์ง์ ๋๋ค. apt, rpm, yum, python, rubygems์ Windows์ msi ํจํค์ง๋ฅผ ์ง์ํฉ๋๋ค. ์์ ์์๋ yum์ ์ด์ฉํ์ฌ ์ํ์น ์น ์๋ฒ์ธ httpd๋ฅผ ์ค์นํฉ๋๋ค.- "httpd" :
[2.4.9]
์ฒ๋ผ ํจํค์ง ๋ฒ์ ์ ์ค์ ํ ์ ์์ต๋๋ค. - "rpm" :
{ "epel" : http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm }
์ฒ๋ผ ํจํค์ง ํ์ผ์ URL์ ์ค์ ํ ์ ์์ต๋๋ค.
- "httpd" :
services
: cfn-init์ด ์คํํ ํจํค์ง์ ๋๋ค. Linux์์๋ sysvinit์ ์ง์ํ๊ณ Windows์์๋ Windows ์๋น์ค ๋งค๋์ (ํค: windows)๋ฅผ ์ง์ํฉ๋๋ค.enabled
: ๋ถํ ํ ๋ ํจํค์ง๋ ์๋น์ค๋ฅผ ์คํํ๋ ์ต์ ์ ๋๋ค.ensureRunning
: cfn-init ์คํฌ๋ฆฝํธ ์คํ ์ข ๋ฃ ํ ํจํค์ง๋ ์๋น์ค๋ฅผ ์คํํ๋ ์ต์ ์ ๋๋ค.
EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ yum์ผ๋ก ์ํ์น ์น ์๋ฒ(httpd)๋ฅผ ์ค์นํ๋ ํ ํ๋ฆฟ(
installhttpd.template
{
"Description" : "Create an EC2 instance running the Amazon Linux 64 bit AMI.",
"Parameters" : {
"KeyPair" : {
"Description" : "The EC2 Key Pair to allow SSH access to the instance",
"Type" : "String",
"Default" : "awskeypair"
}
},
"Resources" : {
"Ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"KeyName" : { "Ref" : "KeyPair" },
"ImageId" : "ami-c9562fc8",
"InstanceType" : "t1.micro",
"UserData": {
"Fn::Base64": {
"Fn::Join": [ "",
[ "#!/bin/bash\n",
"/opt/aws/bin/cfn-init --region ", { "Ref": "AWS::Region" },
" -s ", { "Ref": "AWS::StackName" },
" -r Ec2Instance\n" ]
]
}
}
},
"Metadata" : {
"AWS::CloudFormation::Init" : {
"config" : {
"packages" : {
"yum" : {
"httpd" : []
}
},
"services" : {
"sysvinit" : {
"httpd" : {
"enabled" : "true",
"ensureRunning" : "true"
}
}
}
}
}
}
}
},
"Outputs" : {
"InstanceId" : {
"Description" : "The InstanceId of the newly created EC2 instance",
"Value" : {
"Ref" : "Ec2Instance"
}
}
},
"AWSTemplateFormatVersion" : "2010-09-09"
}
AWS::CloudFormation::Init
AWS::CloudFormation::Init(cfn-init)
๊ธฐ๋ฅ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋๋ค.
AWS::CloudFormation::Init - AWS CloudFormation
Include metadata on an Amazon EC2 instance for the cfn-init helper script by using the AWS::CloudFormation::Init resource type.
Bootstrap
bootstrap์ ์ปดํจํฐ๊ฐ ๋ถํ ํ ๋ ์คํ๋๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋ปํ๋ฉฐ ์์ฆ ๋ง์ด ์ฐ๋ bootstrap ์น ํ๋ ์์ํฌ์๋ ๋ค๋ฅธ ๋ป์ ๋๋ค.