AWS CloudFormation 템플릿에서 다른 스택의 리소스를 참조하려면 어떻게 해야 하나요?

3분 분량
0

템플릿을 생성할 때 다른 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 Elastic Compute Cloud(Amazon EC2) 인스턴스 생성

1.    AWS CloudFormation 콘솔을 엽니다.

2.    스택 생성을 선택한 후 디자인 템플릿을 선택합니다.

3.    코드 편집기의 파라미터 탭에서 템플릿을 선택합니다.

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.    스택 생성 아이콘을 선택한 후 다음을 선택합니다.

6.    스택 이름에 스택의 이름을 입력합니다.

7.    파라미터에 상호 참조할 네크워크 스택 이름(NetworkStack)을 입력합니다.

8.    다음을 선택하고 다음을 다시 선택한 후 생성을 선택합니다.

9.    스택 생성이 완료되면 Amazon EC2 콘솔을 엽니다.

10.    탐색 창에서 인스턴스를 선택한 후 4단계의 템플릿으로 생성한 인스턴스를 선택합니다.

11.    설명 보기를 선택한 후 보안 그룹과 서브넷이 구성되었는지 확인합니다.

중요: 다른 스택이 해당 값을 가져오는 동안에는 소스 스택이나 소스 스택의 내보내기 값을 삭제할 수 없습니다. 소스 스택의 내보내기 값을 업데이트하려면 먼저 소스 스택의 내보내기 값을 가져오는 스택의 실제 값을 수동으로 교체해야 합니다. 그러면 소스 스택의 내보내기 값을 업데이트할 수 있습니다.

내보낸 출력 값을 가져오는 모든 스택을 나열하려면 list-imports 명령을 실행합니다. AWS 리전의 모든 내보내기를 나열하려면 AWS CloudFormation 콘솔을 사용하거나 list-exports 명령을 실행합니다. 내보내기 이름은 AWS 리전별 계정마다 고유해야 합니다.

관련 정보

AWS Systems Manager Parameter Store의 파라미터를 사용하여 CloudFormation 스택 간에 값을 공유하려면 어떻게 해야 하나요?

AWS CloudFormation 템플릿

AWS::EC2::인스턴스

AWS 공식
AWS 공식업데이트됨 일 년 전