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-SecurityGroupIDNetworkStack-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.    다음 템플릿을 복사하여 코드 편집기에 붙여 넣은 다음, InstanceTypeImageId에 대한 적절한 값으로 템플릿을 업데이트합니다.

{
  "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 리전별로 주어진 계정에 대해 고유해야 합니다.