

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

# 從部署的 CloudFormation 堆疊取得匯出的輸出
<a name="using-cfn-stack-exports"></a>

當您在相同 AWS 帳戶 和 區域中有多個堆疊時，您可能想要在它們之間共用資訊。當一個堆疊需要使用另一個堆疊建立的資源時，這項功能相當實用。

例如，您可能有一個堆疊專門為 Web 伺服器建立網路資源，如子網路和安全群組。而建立實際 Web 伺服器的其他堆疊，就能使用第一個堆疊建立的網路資源。您不必在堆疊範本中硬式編碼資源 ID，也不需要以輸入參數形式傳遞 ID。

若要在堆疊之間共用資訊，可從一個堆疊*匯出*輸出值，再將其*匯入*另一個堆疊。以下是其運作方式：

1. 在第一個堆疊的範本 (例如，聯網堆疊) 中，可使用 `Outputs` 區段的 `Export` 欄位來定義匯出的特定值。如需詳細資訊，請參閱[CloudFormation 範本 Outputs 語法](outputs-section-structure.md)。

1. 當您建立或更新該堆疊時，CloudFormation 會匯出輸出值，使其可供相同 AWS 帳戶 和 區域中的其他堆疊使用。

1. 在另一個堆疊的範本中，您可以使用 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-importvalue.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-importvalue.html) 函數從第一個堆疊匯入匯出的值。

1. 建立或更新第二個堆疊 (例如 Web 伺服器堆疊) 時，CloudFormation 會自動從第一個堆疊擷取已匯出的值並套用。

如需演練和範例範本，請參閱[參考在另一個 CloudFormation 堆疊中的資源輸出](walkthrough-crossstackref.md)。

## 匯出堆疊輸出值與使用巢狀堆疊的比較
<a name="output-vs-nested"></a>

巢狀堆疊是指藉由使用 `AWS::CloudFormation::Stack` 資源在另一個堆疊中建立的堆疊。使用巢狀堆疊時，您可以透過單一堆疊來部署和管理所有資源。您可以將巢狀堆疊群組中某個堆疊的輸出，作為群組中其他堆疊的輸入。這與匯出值的情況不同。

如果您想要將資訊的共享隔離在巢狀堆疊群組內，則建議您使用巢狀堆疊。若要與其他堆疊 (而不只是在巢狀堆疊的群組內) 共享資訊，則匯出值。例如，您可以建立含子網路的單一堆疊，然後匯出其 ID。其他堆疊可透過匯入該 ID 來使用該子網路。每個堆疊無需單獨建立子網路。只要有堆疊匯入子網路 ID，您就無法變更或刪除該 ID。

如需巢狀堆疊的詳細資訊，請參閱 [運用巢狀堆疊，將範本分割成可重複使用的部分](using-cfn-nested-stacks.md)。

## 考量事項
<a name="using-cfn-stack-exports-considerations"></a>

下列限制適用於跨堆疊參考：
+ 對於每個名稱 AWS 帳戶，`Export`名稱在區域中必須是唯一的。
+ 您無法跨區域建立跨堆疊參考。您可以使用內部函數 `Fn::ImportValue`，僅匯入已在同一區域內匯出的值。
+ 對於輸出，`Export` 的 `Name` 屬性值無法使用依賴某個資源的 `Ref` 或者 `GetAtt` 函數。

  同樣，`ImportValue` 函數不能包含依賴某個資源的 `Ref` 或 `GetAtt` 函數。
+ 當其他堆疊匯入輸出值之後，您就無法刪除匯出輸出值的堆疊，也無法修改匯出的輸出值。您必須先移除所有匯入，之後才可以刪除匯出堆疊或修改輸出值。

## 列出已匯出的輸出值
<a name="using-cfn-stack-exports-listing"></a>

若需檢視堆疊已匯出的輸出值，可使用下列其中一種方法：

**列出已匯出的輸出值 (主控台)**

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在畫面上方的導覽列上，選擇 AWS 區域。

1. 在左側導覽窗格中，選擇**匯出**。

**列出已匯出的輸出值 (AWS CLI)**  
使用下列 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-exports.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-exports.html) 命令。將 *us-east-1* 取代為您的 AWS 區域。

```
aws cloudformation list-exports --region us-east-1
```

以下為範例輸出。

```
{
    "Exports": [
        {
            "ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
            "Name": "private-vpc-subnet-a",
            "Value": "subnet-07b410xmplddcfa03"
        },
        {
            "ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
            "Name": "private-vpc-subnet-b",
            "Value": "subnet-075ed3xmplebd2fb1"
        },
        {
            "ExportingStackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/private-vpc/99764070-b56c-xmpl-bee8-062a88d1d800",
            "Name": "private-vpc-vpcid",
            "Value": "vpc-011d7xmpl100e9841"
        }
    ]
}
```

CloudFormation 會針對目前匯出的區域和堆疊，顯示已匯出的輸出名稱和值。若要使用其他堆疊範本中的已匯出輸出值，請使用匯出名稱和 `Fn::ImportValue` 函數進行參考。

## 列出匯入匯出的輸出值的堆疊
<a name="using-cfn-stack-imports"></a>

若要刪除或變更匯出的輸出值，必須先找出哪些堆疊正在匯入輸出值。

若需檢視匯入已匯出輸出值的堆疊，可使用下列其中一種方法：

**列出匯入匯出的輸出值的堆疊 (主控台)**

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在左側導覽窗格中，選擇**匯出**。

1. 若要查看匯入指定匯出值的堆疊，請選擇該匯出值的 **Export Name** (匯出名稱)。CloudFormation 會顯示匯出詳細資訊頁面，列出匯入該值的所有堆疊。

**列出匯入匯出的輸出值的堆疊 (AWS CLI)**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-imports.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-imports.html) 命令。將 *us-east-1* 取代為您的 AWS 區域 ，並將 `private-vpc-vpcid`取代為匯出輸出值的名稱。

```
aws cloudformation list-imports --region us-east-1 \
    --export-name private-vpc-vpcid
```

CloudFormation 傳回匯入該值的堆疊清單。

```
{
    "Imports": [
        "my-app-stack"
    ]
}
```

確認哪些堆疊正在匯入特定已匯出值後，您需要修改這些堆疊，移除參考該輸出值的 `Fn::ImportValue` 函數。您必須移除所有參考匯出的輸出值的匯入，才能刪除或修改匯出的輸出值。