

這是新的 *CloudFormation 範本參考指南*。請更新您的書籤和連結。如需 CloudFormation 入門的說明，請參閱 [AWS CloudFormation 使用者指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# `Fn::ImportValue`
<a name="intrinsic-function-reference-importvalue"></a>

內部函數會`Fn::ImportValue`傳回另一個堆疊匯出的輸出值。此函數通常可用來建立跨堆疊參考。如需詳細資訊，請參閱**《AWS CloudFormation 使用者指南》中的[逐步解說：參考其他 CloudFormation 堆疊中的資源輸出](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/walkthrough-crossstackref.html)。

在下列範本程式碼片段的範例中，堆疊 A 會匯出 VPC 安全群組值，而堆疊 B 則會匯入該數值。

**注意**  
下列限制適用於跨堆疊參考：  
對於每個名稱 AWS 帳戶，`Export`名稱在區域中必須是唯一的。
您無法跨區域建立跨堆疊參考。您可以使用內部函數 `Fn::ImportValue`，僅匯入已在同一區域內匯出的值。
對於輸出，`Export` 的 `Name` 屬性值無法使用依賴某個資源的 `Ref` 或者 `GetAtt` 函數。  
同樣，`ImportValue` 函數不能包含依賴某個資源的 `Ref` 或 `GetAtt` 函數。
當其他堆疊匯入輸出值之後，您就無法刪除匯出輸出值的堆疊，也無法修改匯出的輸出值。您必須先移除所有匯入，之後才可以刪除匯出堆疊或修改輸出值。

## JSON
<a name="intrinsic-function-reference-importvalue-export.json"></a>

堆疊 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 name="intrinsic-function-reference-importvalue-export.yaml"></a>

堆疊 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
<a name="intrinsic-function-reference-importvalue-import.json"></a>

堆疊 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
<a name="intrinsic-function-reference-importvalue-import.yaml"></a>

堆疊 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'
```

## 宣告
<a name="w2aac24c43c11"></a>

### JSON
<a name="intrinsic-function-reference-importvalue-syntax.json"></a>

```
{ "Fn::ImportValue" : sharedValueToImport }
```

### YAML
<a name="intrinsic-function-reference-importvalue-syntax.yaml"></a>

您可以使用完整的函數名稱：

```
Fn::ImportValue: sharedValueToImport
```

或者，您也可以使用較短的名稱：

```
!ImportValue sharedValueToImport
```

**重要**  
若 `!ImportValue` 包含簡短格式的 `!Sub`，則您將無法使用它的簡短格式。  

```
# do not use
!ImportValue
  !Sub '${NetworkStack}-SubnetID'
```
對此，您必須使用完整的函數名稱，如下所示：  

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

## Parameters
<a name="w2aac24c43c13"></a>

sharedValueToImport  
您想要匯入的堆疊輸出值。

## 傳回值
<a name="w2aac24c43c15"></a>

堆疊的輸出值。

## 範例
<a name="w2aac24c43c17"></a>

### JSON
<a name="intrinsic-function-reference-importvalue-example.json"></a>

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

### YAML
<a name="intrinsic-function-reference-importvalue-example.yaml"></a>

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

## 支援的函數
<a name="w2aac24c43c19"></a>

您可以在 `Fn::ImportValue` 函數中善用以下函數，但您無法使用某個資源決定這些函數值。
+ `Fn::Base64`
+ `Fn::FindInMap`
+ `Fn::If`
+ `Fn::Join`
+ `Fn::Select`
+ `Fn::Sub`
+ `Ref`