Fn::ImportValue - AWS CloudFormation

새로운 AWS CloudFormation 템플릿 참조 안내서입니다. 북마크와 링크를 업데이트하세요. CloudFormation을 시작하는 데 도움이 필요한 경우 AWS CloudFormation 사용 설명서를 참조하세요.

Fn::ImportValue

내장 함수 Fn::ImportValue는 다른 스택에서 내보낸 출력의 값을 반환합니다. 일반적으로 이 함수를 사용하여 교차 스택 참조를 생성합니다. 자세한 내용은 AWS CloudFormation 사용 설명서다른 CloudFormation 스택의 리소스 출력 참조 섹션을 참조하세요.

다음 예제 템플릿 조각에서 스택 A는 VPC 보안 그룹 값을 내보내고 스택 B는 이 값을 가져옵니다.

참고

교차 스택 참조에 적용되는 제한은 다음과 같습니다.

  • 각 AWS 계정의 Export 이름은 한 리전 내에서 고유해야 합니다.

  • 여러 리전 간에 교차 스택 참조를 생성할 수 없습니다. Fn::ImportValue 내장 함수는 동일 리전 안에서 내보냈던 값을 가져오는 데만 사용할 수 있습니다.

  • 출력의 경우, 리소스에 의존하는 Name 또는 Export 함수를 RefGetAtt 속성값으로 사용할 수 없습니다.

    마찬가지로 ImportValue 함수는 리소스에 의존하는 Ref 또는 GetAtt 함수를 포함할 수 없습니다.

  • 다른 스택이 출력 값을 가져오면 출력값을 내보내는 스택을 삭제하거나 내보낸 출력 값을 수정할 수 없습니다. 따라서 내보내는 스택을 삭제하거나 출력값을 수정하려면 가져오기를 모두 제거해야 합니다.

JSON

스택 A 내보내기

"Outputs" : { "PublicSubnet" : { "Description" : "The subnet ID to use for public web servers", "Value" : { "Ref" : "PublicSubnet" }, "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SubnetID" }} }, "WebServerSecurityGroup" : { "Description" : "The security group ID to use for public web servers", "Value" : { "Fn::GetAtt" : ["WebServerSecurityGroup", "GroupId"] }, "Export" : { "Name" : {"Fn::Sub": "${AWS::StackName}-SecurityGroupID" }} } }

YAML

스택 A 내보내기

Outputs: PublicSubnet: Description: The subnet ID to use for public web servers Value: Ref: PublicSubnet Export: Name: 'Fn::Sub': '${AWS::StackName}-SubnetID' WebServerSecurityGroup: Description: The security group ID to use for public web servers Value: 'Fn::GetAtt': - WebServerSecurityGroup - GroupId Export: Name: 'Fn::Sub': '${AWS::StackName}-SecurityGroupID'

JSON

스택 B 가져오기

"Resources" : { "WebServerInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "InstanceType" : "t2.micro", "ImageId" : "ami-a1b23456", "NetworkInterfaces" : [{ "GroupSet" : [{"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SecurityGroupID"}}], "AssociatePublicIpAddress" : "true", "DeviceIndex" : "0", "DeleteOnTermination" : "true", "SubnetId" : {"Fn::ImportValue" : {"Fn::Sub" : "${NetworkStackNameParameter}-SubnetID"}} }] } } }

YAML

스택 B 가져오기

Resources: WebServerInstance: Type: 'AWS::EC2::Instance' Properties: InstanceType: t2.micro ImageId: ami-a1b23456 NetworkInterfaces: - GroupSet: - Fn::ImportValue: 'Fn::Sub': '${NetworkStackNameParameter}-SecurityGroupID' AssociatePublicIpAddress: 'true' DeviceIndex: '0' DeleteOnTermination: 'true' SubnetId: Fn::ImportValue: 'Fn::Sub': '${NetworkStackNameParameter}-SubnetID'

선언

JSON

{ "Fn::ImportValue" : sharedValueToImport }

YAML

전체 함수 이름을 사용할 수 있습니다.

Fn::ImportValue: sharedValueToImport

또는 짧은 형식을 사용할 수 있습니다.

!ImportValue sharedValueToImport
중요

!Sub의 짧은 형식이 포함되면 !ImportValue의 짧은 형식을 사용할 수 없습니다.

# do not use !ImportValue !Sub '${NetworkStack}-SubnetID'

대신, 다음과 같은 전체 함수 이름을 사용해야 합니다.

Fn::ImportValue: !Sub "${NetworkStack}-SubnetID"

파라미터

sharedValueToImport

가져올 스택 출력 값입니다.

반환 값

스택 출력 값입니다.

예제

JSON

{ "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackNameParameter}-SubnetID" } }

YAML

Fn::ImportValue: !Sub "${NetworkStackName}-SecurityGroupID"

지원되는 함수

Fn::ImportValue 함수에서 다음과 같은 함수를 사용할 수 있습니다. 이러한 함수의 값은 리소스에 의존할 수 없습니다.

  • Fn::Base64

  • Fn::FindInMap

  • Fn::If

  • Fn::Join

  • Fn::Select

  • Fn::Sub

  • Ref