

这是 AWS CDK v2 开发者指南。旧版 CDK v1 于 2022 年 6 月 1 日进入维护阶段，并于 2023 年 6 月 1 日终止支持。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# `cdk orphan`
<a name="ref-cli-cmd-orphan"></a>

**重要**  
`cdk orphan` 命令目前为预览版，可能会发生变化。  
使用此命令时必须提供 `--unstable=orphan` 选项。

安全地从 AWS CloudFormation 堆栈中分离一个或多个资源，而无需将其删除。当您需要在不停机或数据丢失的情况下将资源从一种构造类型迁移到另一种构造类型（例如，将 Dynamo `Table` DB 迁移`TableV2`到）时，这非常有用。

当您更改 CDK 代码中的构造类型时，会 CloudFormation 将其解释为资源替换，这会删除现有资源并创建一个新资源。对于数据库和存储等有状态资源，这会导致数据丢失。该`cdk orphan`命令通过先将资源从堆栈中分离来解决这个问题，因此您可以使用在新构造类型下重新导入该资源。`cdk import`

通过使用 `cdk orphan`，您可以：
+ 在更改有状态资源的构造类型之前，将其从堆栈中分离。
+ 在构造版本（例如 Dynamo `Table` DB `TableV2` 到）之间迁移，而不会丢失数据。
+ 在不替换物理 CloudFormation 资源的情况下更改支持构造的资源类型。

orphan 命令执行三种 CloudFormation 部署：

1.  解@@ **析引用**：解析对孤立资源的跨资源引用（`Ref``Fn::GetAtt`、、`Fn::Sub`），以便堆栈中依赖它们的其他资源在孤立资源被移除后继续工作。

1.  **解耦**合：将所有跨资源引用替换为其解析的文字值，设置为 `DeletionPolicy``Retain`，并删除`DependsOn`条目以将资源与堆栈的其余部分隔离开来。

1.  **移除**：从 CloudFormation 模板中移除资源。物理资源继续存在于您的 AWS 账户中。

孤立后，更新您的 CDK 代码以使用新的构造类型，并使用 [cdk im](ref-cli-cmd-import.md) port 将资源重新置于管理之下。

 **孤立资源并在新的构造类型下重新导入该资源**   

1. 部署您的堆栈并验证资源是否存在。

1. `cdk orphan`使用资源的构造路径运行：

   ```
   $ cdk orphan MyStack/MyTable --unstable=orphan
   ```

1. 该命令输出资源映射。将其保存到导入步骤中。

1. 更新您的 CDK 代码以使用新的构造类型（例如，更改`Table`为`TableV2`）。

1. `cdk import`使用孤立输出中的资源映射运行：

   ```
   $ cdk import MyStack --resource-mapping-inline '{"MyTable":{"TableName":"my-table"}}'
   ```

1. 导入完成后，`cdk import`检测偏差并提示您进行部署。接受提示以协调堆栈。

目前，此功能具有以下限制：
+ 所有构造路径都必须引用同一个堆栈。不支持在单个命令中跨多个堆栈使用孤立资源。
+ 不支持通配符模式。路径按精确的前缀进行匹配。
+ 此命令需要引导模板的版本 32，其中包括部署角色所必需的 IAM 权限。

## 用法
<a name="ref-cli-cmd-orphan-usage"></a>

```
$ cdk orphan <PATHS> <options>
```

## 参数
<a name="ref-cli-cmd-orphan-args"></a><a name="ref-cli-cmd-orphan-args-paths"></a>

 **路径**   
一个或多个构造通往孤儿的路径，格式`StackName/ConstructPath`为。例如 `MyStack/MyTable`。可以在单个命令中提供多个路径来孤立多个资源。  
所有路径都必须引用同一个堆栈。  
 *类型*：字符串  
 *是否必需*：是

## 选项
<a name="ref-cli-cmd-orphan-options"></a>

有关适用于所有 CDK CLI 命令的全局选项的列表，请参阅[全局选项](ref-cli-cmd.md#ref-cli-cmd-options)。<a name="ref-cli-cmd-orphan-options-help"></a>

 `--help, -h <BOOLEAN>`   
显示 `cdk orphan` 命令的命令参考信息。

## 示例
<a name="ref-cli-cmd-orphan-examples"></a>

### 孤立单一资源
<a name="ref-cli-cmd-orphan-examples-single"></a>

```
$ cdk orphan MyStack/MyTable --unstable=orphan
```

### 孤立多个资源
<a name="ref-cli-cmd-orphan-examples-multiple"></a>

```
$ cdk orphan MyStack/MyTable MyStack/MyBucket --unstable=orphan
```

### 跳过确认提示
<a name="ref-cli-cmd-orphan-examples-yes"></a>

```
$ cdk orphan MyStack/MyTable --unstable=orphan --yes
```