AWS CloudFormation 템플릿에서 다른 스택에 있는 리소스를 참조하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2022년 12월 2일
템플릿을 생성할 때 다른 AWS CloudFormation 스택의 리소스를 참조하려고 합니다.
간략한 설명
다음 해결 방법은 교차 스택 참조를 생성하는 방법 중 하나의 예를 제공합니다. 추가적인 지침은 시연: 다른 AWS CloudFormation 스택의 리소스 출력 참조를 참조하세요.
참고: 다른 AWS CloudFormation 스택의 리소스를 참조하려면 먼저 교차 스택 참조를 생성해야 합니다. 교차 스택 참조를 생성하려면 내보내기 필드를 사용하여 내보낼 리소스 출력의 값에 플래그를 지정합니다. 그런 다음, Fn::ImportValue 내장 함수를 사용하여 동일한 AWS 리전 및 계정 내의 스택에 있는 값을 가져옵니다. AWS CloudFormation은 템플릿에 지정된 이름으로 내보낸 값을 식별합니다. 이러한 이름은 해당 AWS 리전 및 계정에서 고유해야 합니다.
해결 방법
다음 단계는 NetworkStack이라는 이름의 AWS CloudFormation 스택을 생성하는 방법을 보여줍니다. 이 스택은 네트워크 관련 리소스를 생성하고 ${AWS::StackName}-SecurityGroupID 및 ${AWS::StackName}-SubnetID라는 이름의 스택을 내보냅니다. ${AWS::StackName}은 스택 생성 후 NetworkStack으로 대체됩니다. 최종 내보내기 이름은 NetworkStack-SecurityGroupID 및 NetworkStack-SubnetID입니다.
출력 값을 내보낼 스택 생성
1. 이 템플릿을 사용하여 AWS CloudFormation 스택을 생성합니다.
2. 스택의 이름을 NetworkStack으로 지정합니다.
참고: NetworkStack은 서브넷 및 보안 그룹 값을 내보냅니다.
가져온 서브넷 및 보안 그룹을 사용하여 Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스 생성
1. AWS CloudFormation 콘솔을 엽니다.
2. [Create Stack]을 선택한 다음 [Design template]을 선택합니다.
3. 코드 편집기의 [Parameters] 탭에서 [Template]을 선택합니다.
4. 다음 템플릿을 복사하여 코드 편집기에 붙여 넣은 다음, InstanceType 및 ImageId에 대한 적절한 값으로 템플릿을 업데이트합니다.
{
"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"
}
}
}
]
}
}
}
}
중요: 4단계의 템플릿에서 NetworkStack 리소스 스택을 NetworkStackParameter에 대한 값으로 사용하세요. NetworkStack 값은 해당 Fn::ImportValue 함수의 올바른 스택 이름을 대체합니다.
참고: 가져오기 및 내보내기 템플릿의 예는 Fn::ImportValue를 참조하세요.
5. [Create stack] 아이콘을 선택하고 [Next]를 선택합니다.
6. [Stack name]에 스택에 대한 이름을 입력합니다.
7. [Parameters]에 교차 참조할 네트워크 스택 이름(NetworkStack) 을 입력합니다.
8. [Next]를 선택하고 [Next]를 다시 선택한 다음 [Create]를 선택합니다.
9. 스택 생성이 완료되었으면 Amazon EC2 콘솔을 엽니다.
10. 탐색 창에서 [인스턴스]를 선택한 다음 4단계의 템플릿으로 생성한 인스턴스를 선택합니다.
11. [설명] 보기를 선택한 다음 보안 그룹 및 서브넷이 구성되어 있는지 확인합니다.
중요: 스소 스택의 내보내기 값을 다른 스택에서 가져오는 동안에는 소스 스택 또는 소스 스택의 내보내기 값을 삭제할 수 없습니다. 소스 스택의 내보내기 값을 업데이트하려면, 먼저 소스 스택의 내보내기 값을 가져오는 스택의 실제 값을 수동으로 대체합니다. 그러면 소스 스택의 내보내기 값을 업데이트할 수 있습니다.
내보낸 출력 값을 가져오는 모든 스택을 나열하려면 list-imports 명령을 실행합니다. AWS 리전 내의 모든 내보내기를 나열하려면 AWS CloudFormation 콘솔을 사용하거나 list-exports 명령을 실행합니다. 내보내기 이름은 AWS 리전별로 주어진 계정에 대해 고유해야 합니다.