Fn::ImportValue
Fn::ImportValue
組み込み関数は、別のスタックによってエクスポートされた出力の値を返します。この関数は通常、クロススタック参照を作成するために使用されます。次のサンプルテンプレートスニペットでは、スタック A は VPC セキュリティグループ値をエクスポートし、スタック B はそれをインポートします。
注記
クロススタック参照には以下の制限があります。
-
AWS アカウント ごとに、
Export
名がリージョン内で一意である必要があります。 -
リージョン間でクロススタック参照は作成できません。組み込み関数
Fn::ImportValue
を使用すると、同じリージョン内にエクスポートされた値のみをインポートできます。 -
出力の場合、
Export
のName
プロパティの値は、リソースに依存する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