![](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/4_.png)
22E. CloudFormation 템플릿으로 CloudFormation 스택 생성하기
22E. CloudFormation 템플릿으로 CloudFormation 스택 생성하기 관련
![](https://pyrasis.com/assets/images/pyrasis.png)
CloudFormation 템플릿으로 CloudFormation 스택을 생성해보겠습니다. 템플릿은 앞에서 설명한 기본 템플릿을 조합하여 EC2 인스턴스를 생성하고, 22, 80번 포트를 여는 Security Group을 설정하고, 아파치 웹 서버를 설치, 실행하는 템플릿을 사용하겠습니다.
메모장이나 기타 텍스트 편집기를 열고 아래와 같이 템플릿을 작성한 뒤 httpd.template으로 저장합니다.
EC2 인스턴스 생성, 22, 80번 포트를 여는 Security Group 설정, 아파치 웹 서버 설치, 실행 템플릿(
installhttpdsecuritygroup.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",
"SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ],
"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"
}
}
}
}
}
}
},
"InstanceSecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Allow HTTP and SSH access",
"SecurityGroupIngress" : [ {
"IpProtocol" : "tcp",
"FromPort" : "22",
"ToPort" : "22",
"CidrIp" : "0.0.0.0/0"
}, {
"IpProtocol" : "tcp",
"FromPort" : "80",
"ToPort" : "80",
"CidrIp" : "0.0.0.0/0"
} ]
}
}
},
"Outputs" : {
"InstanceId" : {
"Description" : "The InstanceId of the newly created EC2 instance",
"Value" : {
"Ref" : "Ec2Instance"
}
}
},
"AWSTemplateFormatVersion" : "2010-09-09"
}
![AWS 콘솔로 접속한 뒤 메인 화면에서 Deployment& Management의 <FontIcon icon="iconfont icon-select"/>를 클릭합니다.](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/4_.png)
[CloudFormation]
를 클릭합니다.오른쪽 위에서 CloudFormation의 리전을 변경할 수 있습니다. 템플릿으로 CloudFormation 스택을 생성하면 여기서 선택한 리전에 AWS 리소스가 생성됩니다.
![Tokyo 리전을 사용하겠습니다.](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/5_.png)
생성한 CloudFormation 스택이 하나도 없을 때 페이지가 표시됩니다.
![<FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/6_.png)
[Create New Stack]
버튼을 클릭합니다.CloudFormation 템플릿으로 CloudFormation 스택을 생성합니다.
- Name: CloudFormation 스택의 이름입니다. httpd를 입력합니다.
- Source: 사용할 CloudFormation 템플릿입니다. Upload a template to Amazon S3을 선택하고 파일 선택 버튼을 클릭합니다.
- Select a sample template: AWS에서 제공하는 예제 템플릿입니다.
- Upload a template to Amazon S3: 현재 컴퓨터에 있는 템플릿 파일을 S3에 올린 후 스택을 생성합니다.
- Specify an Amazon S3 Template URL: 템플릿 파일을 미리 S3 버킷에 올렸다면 S3 버킷에 저장된 템플릿 파일의 경로입니다.
![CloudFormation 스택 생성](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/7_.png)
방금 저장한 httpd.template
파일을 선택하고, [열기]
버튼을 클릭합니다. 파일을 선택을 했으면 아래쪽 [Next]
버튼을 클릭합니다 (나중에 S3 버킷 목록을 보면 템플릿 파일이 저장된 S3 버킷이 생성되어 있습니다).
![CloudFormation 템플릿 파일 선택](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/8_.png)
EC2 인스턴스에 사용할 키 쌍을 설정합니다. 우리가 만든 템플릿에는 awskeypair
라는 키를 기본값으로 설정해놓았습니다. 다른 키 쌍을 사용하고 싶으면 KeyPair 부분에 키 쌍 이름을 입력하면 됩니다.
![이제 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/9_.png)
[Next]
버튼을 클릭합니다.CloudFormation 스택을 생성할 때 사용할 옵션입니다.
- Tags: CloudFormation 스택의 태그입니다. 기본값 그대로 비워둡니다.
- Advanced: 추가 옵션입니다. 이번에는 따로 설정하지 않고, 각 항목 설명만 하겠습니다.
- Notification options: CloudFormation 스택 이벤트가 발생하면 SNS로 알림을 보냅니다.
- Timeout: CloudFormation 스택 생성을 시작하고 여기에 설정한 시간(분) 이상 지나면 스택 생성에 실패한 것으로 보고, 모든 AWS 리소스와 설정을 되돌립니다. 기본적으로 Timeout 값이 설정되어 있지 않으므로 스택 생성이 성공할 때까지 기다립니다.
- Rollback on failure: CloudFormation 스택을 생성하다가 중간에 실패하면 AWS 리소스와 설정을 되돌립니다.
- Stack policy: CloudFormation 스택 업데이트 정책입니다. 실수로 생성된 스택의 설정을 변경하지 않도록 할 수 있습니다. 자세한 내용은 다음 링크를 참조하기 바랍니다.
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html
![<FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/10_.png)
[Next]
버튼을 클릭합니다.지금까지 설정한 내용에 이상이 없는지 확인합니다.
![이상이 없으면 <FontIcon icon="iconfont icon-select"/> 버튼을 클릭합니다.](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/11_.png)
[Create]
버튼을 클릭합니다.CloudFormation 스택 목록에 CloudFormation 스택(httpd
)이 생성되었습니다.
![Status를 보면 로 나오며 AWS 리소스를 생성하고 설정하고 있습니다. 완전히 생성되는 시간은 AWS 리소스의 종류와 개수에 따라 달라집니다.](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/12_.png)
CREATE_IN_PROGRESS
로 나오며 AWS 리소스를 생성하고 설정하고 있습니다. 완전히 생성되는 시간은 AWS 리소스의 종류와 개수에 따라 달라집니다.CloudFormation 스택 생성이 완료된 뒤 Output 탭을 클릭하면 생성된 EC2 인스턴스의 ID가 표시됩니다.
![템플릿에서 Output 부분에 설정한 내용이 이곳에 표시됩니다.](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/13_.png)
EC2 인스턴스 목록([INSTANCES]
→ [Instances]
)에 CloudFormation이 생성한 EC2 인스턴스가 추가되었습니다. 위 CloudFormation 스택 Outputs에 나온 인스턴스 ID와 같습니다.
![그리고 아래 세부 내용을 보면 Security groups에 템플릿에서 정의한 InstanceSecurityGroup이 설정되었습니다.](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/14_.png)
웹 브라우저를 실행하고 EC2 인스턴스의 Public IP에 접속합니다.
![아파치 웹 서버(httpd)의 기본 웹 페이지 내용이 표시됩니다.](https://pyrasis.com/assets/images/TheArtOfAmazonWebServicesChapter22/15.png)
이처럼 CloudFormation 템플릿으로 AWS 리소스를 조합한 CloudFormation 스택을 생성할 수 있습니다. CloudFormation 스택을 삭제하면 지금까지 생성된 AWS 리소스는 모두 삭제됩니다. CloudFormation 스택에 포함된 EC2 인스턴스 등의 유형을 변경하거나 AWS 리소스의 설정을 변경하고 싶으면 스택 업데이트 기능을 사용하면 됩니다. 템플릿의 내용을 수정한 뒤 Update Stack 버튼을 클릭하고 해당 템플릿을 선택하면 됩니다. 설정 화면은 스택 생성과 동일합니다. 예를 들면 CloudFormation 스택으로 EC2 인스턴스를 100개 만든 뒤 EC2 인스턴스 유형을 변경하면, 새 EC2 인스턴스 100개가 모두 생성되고 나서 기존 EC2 인스턴스 100개가 동시에 삭제됩니다.
스택 업데이트 기능은 많은 AWS 리소스의 설정을 일괄적으로 변경할 때 유용합니다. 설정 한두 개를 변경할 때에는 AWS 콘솔의 해당 AWS 리소스 페이지에서 직접 설정을 변경해도 됩니다.