Fn::ImportValue
내장 함수 Fn::ImportValue
는 다른 스택에서 내보낸 출력의 값을 반환합니다. 일반적으로 이 함수를 사용하여 교차 스택 참조를 생성합니다. 다음 예제 템플릿 조각에서 스택 A는 VPC 보안 그룹 값을 내보내고 스택 B는 이 값을 가져옵니다.
참고
교차 스택 참조에 적용되는 제한은 다음과 같습니다.
-
각 AWS 계정의
Export
이름은 한 리전 내에서 고유해야 합니다. -
여러 리전 간에 교차 스택 참조를 생성할 수 없습니다.
Fn::ImportValue
내장 함수는 동일 리전 안에서 내보냈던 값을 가져오는 데만 사용할 수 있습니다. -
출력의 경우, 리소스에 의존하는
Name
또는Export
함수를Ref
의GetAtt
속성값으로 사용할 수 없습니다.마찬가지로
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