AWS CloudFormation에서 템플릿을 생성할 때 다른 CloudFormation 스택의 리소스를 참조하고 싶습니다.
해결 방법
다른 CloudFormation 스택의 리소스를 참조하려면 먼저 교차 스택 참조를 생성해야 합니다. 다음 해결 방법에서는 교차 스택 참조를 생성하는 한 가지 방법의 예를 제공합니다. 예시에 나오는 NetworkStack 스택은 ${AWS::StackName}-SecurityGroupID 및 ${AWS::StackName}-SubnetID 네트워크 관련 리소스를 생성하고 내보냅니다. 스택 생성 후 CloudFormation은 **${AWS::StackName}**을 NetworkStack으로 대체합니다. 최종 내보내기 이름은 NetworkStack-SecurityGroupID 및 NetworkStack-SubnetID입니다.
출력 값을 내보내는 스택 생성
다음 단계를 완료하십시오.
- CloudFormation 스택을 생성한 다음 SampleNetworkCrossStack 템플릿을 사용합니다.
참고: 템플릿의 출력 섹션에서 내보내기 필드를 선언해야 합니다.
- 스택 이름을 NetworkStack으로 지정합니다.
참고: NetworkStack은 서브넷 및 보안 그룹 값을 내보냅니다.
가져온 서브넷 및 보안 그룹을 사용하여 Amazon EC2 인스턴스 생성
SubnetId 및 SecurityGroupId와 같은 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 속성은 내보내기 스택의 값을 사용합니다. 값을 가져오려면 Fn::ImportValue 내장 함수를 사용하세요.
참고: 가져오기와 내보내기 스택은 동일한 AWS 리전 및 AWS 계정에 있어야 합니다. 또한 내보낸 이름은 리전 및 계정마다 고유해야 합니다.
EC2 인스턴스를 생성하려면 다음 단계를 완료하세요.
- CloudFormation 콘솔을 엽니다.
- **Create Stack(스택 생성)**을 선택한 후 디자인 템플릿을 선택합니다.
- 코드 편집기의 파라미터 탭을 선택한 다음 템플릿을 선택합니다.
- 내보내기 스택의 값을 사용하여 인스턴스를 만들려면 코드 편집기에 다음 템플릿을 입력합니다.
중요: NetworkStack 리소스 스택을 NetworkStackParameter의 값으로 설정합니다. NetworkStack 값은 해당 Fn::ImportValue 함수의 올바른 스택 이름을 대체합니다.
{ "Parameters": {
"NetworkStackParameter": {
"Type": "String"
}
},
"Resources": {
"WebServerInstance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "t2.micro",
"ImageId": "ami-a1b23456",
"NetworkInterfaces": [
{
"GroupSet": [
{
"Fn::ImportValue": {
"Fn::Sub": "${NetworkStackParameter}-SecurityGroupID"
}
}
],
"AssociatePublicIpAddress": "true",
"DeviceIndex": "0",
"DeleteOnTermination": "true",
"SubnetId": {
"Fn::ImportValue": {
"Fn::Sub": "${NetworkStackParameter}-SubnetID"
}
}
}
]
}
}
}
}
참고: t2.micro를 인스턴스 유형으로 바꾸고 ami-a1b23456을 Amazon Machine Image(AMI) ID로 바꾸세요.
- 스택 생성(위쪽 화살표가 있는 구름 아이콘)을 선택하고 다음을 선택합니다.
- Stack 이름란에는 사용자 스택의 이름을 입력합니다.
- 파라미터에 상호 참조할 네크워크 스택 이름을 입력합니다. 예를 들어, NetworkStack을 입력합니다.
- 다음을 선택한 다음 다음을 다시 선택합니다.
- **Create(생성)**를 선택합니다.
- 스택 상태가 CREATE_COMPLETE로 변경되면 Amazon EC2 콘솔을 엽니다.
- 탐색 창에서 인스턴스를 선택한 다음, 사용자가 생성한 해당 인스턴스를 선택합니다.
- 설명 탭을 선택한 후 보안 그룹과 서브넷이 구성되었는지 확인합니다.
중요: 다른 스택이 해당 값을 가져오는 동안에는 소스 스택이나 소스 스택의 내보내기 값을 삭제할 수 없습니다. 소스 스택의 내보내기 값을 업데이트하려면 먼저 소스 스택의 내보내기 값을 가져오는 스택의 값을 수동으로 교체해야 합니다. 그러면 소스 스택의 내보내기 값을 업데이트할 수 있습니다.
내보낸 출력 값을 가져오는 모든 스택을 나열하려면 list-imports 명령을 실행합니다. 리전의 모든 내보내기를 나열하려면 CloudFormation 콘솔을 사용하거나 list-exports 명령을 실행합니다. 내보내기 이름은 리전 내 계정에서 고유해야 합니다.
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
관련 정보
AWS Systems Manager Parameter Store의 파라미터를 사용하여 CloudFormation 스택 간에 값을 공유하려면 어떻게 해야 하나요?
AWS CloudFormation 템플릿
AWS::EC2::인스턴스
다른 CloudFormation 스택의 리소스 출력 참조를 참조하세요