

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Memindahkan sumber daya antar tumpukan
<a name="refactor-stacks"></a>

Dengan menggunakan fitur `resource import`, Anda dapat memindahkan sumber daya antar, atau *memfaktor ulang (refactor)*, tumpukan. Anda harus terlebih dahulu menambahkan kebijakan `Retain` penghapusan ke sumber daya yang ingin Anda pindahkan untuk memastikan bahwa sumber daya dipertahankan saat Anda menghapusnya dari tumpukan sumber dan mengimpornya ke tumpukan target.

Jika Anda baru mengimpor, kami sarankan Anda terlebih dahulu meninjau informasi pengantar dalam topik. [Impor AWS sumber daya ke CloudFormation tumpukan](import-resources.md)

**penting**  
Tidak semua sumber daya mendukung operasi impor. Lihat [Sumber daya yang mendukung operasi impor](resource-import-supported-resources.md) sebelum menghapus sumber daya dari tumpukan Anda. Jika Anda menghapus sumber daya yang tidak mendukung operasi impor dari tumpukan, Anda tidak dapat mengimpor sumber daya ke tumpukan lain atau mengembalikannya ke tumpukan sumber.

## Memfaktorkan ulang tumpukan menggunakan Konsol Manajemen AWS
<a name="refactor-stacks-console"></a>

1. Dalam template sumber, tentukan sumber daya `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html)yang ingin Anda pindahkan.

   Dalam contoh sumber templat berikut, `Games` adalah target faktor ulang (refactor) ini.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           },
           "GamesTable": {
               "Type": "AWS::DynamoDB::Table",
               "DeletionPolicy": "Retain",
               "Properties": {
                   "TableName": "Games",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           }
       }
   }
   ```

1. Buka CloudFormation konsol untuk melakukan pembaruan tumpukan guna menerapkan kebijakan penghapusan.

   1. Di halaman **Tumpukan**, dengan tumpukan yang dipilih, pilih **Perbarui**.

   1. Di bawah **Siapkan templat**, Pilih **Ganti templat saat ini**.

   1. Di bawah **Tentukan templat**, sediakan templat sumber yang diperbarui dengan atribut `DeletionPolicy` pada `GamesTable`, lalu pilih **Selanjutnya**.
      + Pilih **URL Amazon S3**, lalu tentukan URL ke templat sumber yang diperbarui di kotak teks.
      + Pilih **Unggah file templat**, lalu telusuri file templat sumber yang diperbarui.

   1. Pada halaman **Tentukan detail tumpukan**, tidak ada perubahan yang diperlukan. Pilih **Berikutnya**.

   1. Pada halaman **Konfigurasikan pilihan tumpukan**, tidak ada perubahan yang diperlukan. Pilih **Berikutnya**.

   1. Pada *SourceStackName* halaman **Ulasan**, tinjau perubahan Anda. Jika template Anda berisi sumber daya IAM, pilih **Saya mengakui bahwa template ini dapat membuat sumber daya IAM** untuk menentukan bahwa Anda ingin menggunakan sumber daya IAM dalam template. Untuk informasi selengkapnya tentang penggunaan sumber daya IAM dalam templat, lihat[Kontrol CloudFormation akses dengan AWS Identity and Access Management](control-access-with-iam.md). Lalu, perbarui tumpukan sumber Anda dengan membuat set perubahan atau perbarui tumpukan sumber Anda secara langsung.

1. Hapus sumber daya, parameter terkait, dan output dari templat sumber, lalu tambahkan ke templat target.

   Templat sumber sekarang terlihat seperti berikut.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           }
       }
   }
   ```

   Contoh templat target berikut saat ini memiliki sumber daya `PlayersTable`, dan sekarang juga berisi `GamesTable`.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "PlayersTable": {
               "Type": "AWS::DynamoDB::Table",
               "Properties": {
                   "TableName": "Players",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           },
           "GamesTable": {
               "Type": "AWS::DynamoDB::Table",
               "DeletionPolicy": "Retain",
               "Properties": {
                   "TableName": "Games",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           }
       }
   }
   ```

1. Ulangi langkah 2 — 3 untuk memperbarui tumpukan sumber lagi, kali ini untuk menghapus sumber daya target dari tumpukan.

1. Melakukan operasi impor untuk menambahkan `GamesTable` ke tumpukan target.

   1. Di halaman **Tumpukan**, dengan tumpukan induk yang dipilih, pilih **Tindakan tumpukan**, lalu pilih **Impor sumber daya ke tumpukan**.  
![\[Opsi Impor sumber daya ke tumpukan di konsol.\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/images/stack-actions-import.png)

   1. Baca halaman **Gambaran umum Impor** untuk daftar hal yang harus Anda sediakan selama operasi ini. Kemudian, pilih **Selanjutnya**.

   1. Pada halaman **Tentukan template**, lengkapi salah satu dari berikut ini, lalu pilih **Berikutnya**.
      + Pilih **URL Amazon S3**, lalu tentukan URL di kotak teks.
      + Pilih **Unggah file templat**, lalu telusuri file yang akan diunggah.

   1. Di halaman **Identifikasi sumber daya**, identifikasi sumber daya yang Anda pindahkan (dalam contoh ini, `GamesTable`). Untuk informasi selengkapnya, lihat [Pengidentifikasi sumber daya](import-resources-manually.md#resource-import-identifiers-unique-ids).

      1. Di bawah **Properti pengidentifikasi**, pilih jenis pengidentifikasi sumber daya. Misalnya, sumber daya `AWS::DynamoDB::Table` dapat diidentifikasi menggunakan properti `TableName`.

      1. Di bawah **Nilai pengidentifikasi**, ketik nilai properti yang sebenarnya. Misalnya, `GamesTables`. 

      1. Pilih **Berikutnya**.

   1. Di halaman **Tentukan detail tumpukan**, ubah parameter apa pun, lalu pilih **Selanjutnya**. Ini secara otomatis membuat set perubahan.
**penting**  
Operasi impor gagal jika Anda mengubah parameter yang sudah ada yang memulai operasi membuat, memperbarui, atau menghapus.

   1. Pada *TargetStackName* halaman **Tinjauan**, konfirmasikan bahwa sumber daya yang benar sedang diimpor, lalu pilih **Impor sumber daya**. Ini secara otomatis memulai set perubahan yang dibuat pada langkah terakhir. Semua [tanda stack-level](cfn-console-create-stack.md#configure-stack-options) diterapkan pada sumber daya yang diimpor saat ini.

   1. Panel **Peristiwa** di halaman **Detail tumpukan** menampilkan tumpukan induk Anda.  
![\[Tab Peristiwa di konsol.\]](http://docs.aws.amazon.com/id_id/AWSCloudFormation/latest/UserGuide/images/import-events.png)
**catatan**  
Tidak perlu menjalankan deteksi penyimpangan pada tumpukan induk setelah operasi impor ini karena sumber daya `AWS::CloudFormation::Stack` telah dikelola oleh CloudFormation.

## Memfaktorkan ulang tumpukan menggunakan AWS CLI
<a name="refactor-stacks-cli"></a>

1. Dalam template sumber, tentukan sumber daya `Retain` [DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html)yang ingin Anda pindahkan.

   Dalam contoh sumber templat berikut, `GamesTable` adalah target faktor ulang (refactor) ini.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           },
           "GamesTable": {
               "Type": "AWS::DynamoDB::Table",
               "DeletionPolicy": "Retain",
               "Properties": {
                   "TableName": "Games",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           }
       }
   }
   ```

1. Perbarui tumpukan sumber untuk menerapkan kebijakan penghapusan ke sumber daya.

   ```
   aws cloudformation update-stack --stack-name SourceStackName
   ```

1. Hapus sumber daya, parameter terkait, dan output dari templat sumber, lalu tambahkan ke templat target.

   Templat sumber sekarang terlihat seperti berikut.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "ServiceTable":{
              "Type":"AWS::DynamoDB::Table",
              "Properties":{
                 "TableName":"Service",
                 "AttributeDefinitions":[
                    {
                       "AttributeName":"key",
                       "AttributeType":"S"
                    }
                 ],
                 "KeySchema":[
                    {
                       "AttributeName":"key",
                       "KeyType":"HASH"
                    }
                 ],
                 "ProvisionedThroughput":{
                    "ReadCapacityUnits":5,
                    "WriteCapacityUnits":1
                 }
              }
           }
       }
   }
   ```

   Contoh templat target berikut saat ini memiliki sumber daya `PlayersTable`, dan sekarang juga berisi `GamesTable`.  
**Example JSON**  

   ```
   {
       "AWSTemplateFormatVersion": "2010-09-09",
       "Description": "Import test",
       "Resources": {
           "PlayersTable": {
               "Type": "AWS::DynamoDB::Table",
               "Properties": {
                   "TableName": "Players",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           },
           "GamesTable": {
               "Type": "AWS::DynamoDB::Table",
               "DeletionPolicy": "Retain",
               "Properties": {
                   "TableName": "Games",
                   "AttributeDefinitions": [
                       {
                           "AttributeName": "key",
                           "AttributeType": "S"
                       }
                   ],
                   "KeySchema": [
                       {
                           "AttributeName": "key",
                           "KeyType": "HASH"
                       }
                   ],
                   "ProvisionedThroughput": {
                       "ReadCapacityUnits": 5,
                       "WriteCapacityUnits": 1
                   }
               }
           }
       }
   }
   ```

1. Perbarui tumpukan sumber untuk menghapus sumber daya `GamesTable` serta parameter dan output terkait dari tumpukan.

   ```
   aws cloudformation update-stack --stack-name SourceStackName
   ```

1. Buat daftar sumber daya aktual untuk diimpor dan pengenal uniknya dalam format string JSON berikut. Untuk informasi selengkapnya, lihat [Pengidentifikasi sumber daya](import-resources-manually.md#resource-import-identifiers-unique-ids).

   ```
   [{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]
   ```

   Atau, Anda dapat menentukan parameter berformat JSON dalam file konfigurasi. 

   Misalnya, untuk mengimpor`GamesTable`, Anda dapat membuat *ResourcesToImport.txt* file yang berisi konfigurasi berikut.

   ```
   [
     {
         "ResourceType":"AWS::DynamoDB::Table",
         "LogicalResourceId":"GamesTable",
         "ResourceIdentifier": {
           "TableName":"Games"
         }
     }
   ]
   ```

1. Untuk membuat set perubahan, gunakan **create-change-set** perintah berikut dan ganti teks placeholder. Untuk `--change-set-type` opsi, tentukan nilai**IMPORT**. Untuk `--resources-to-import` opsi, ganti string JSON sampel dengan string JSON aktual yang baru saja Anda buat.

   ```
   aws cloudformation create-change-set \
       --stack-name TargetStackName --change-set-name ImportChangeSet \
       --change-set-type IMPORT \
       --template-body file://TemplateToImport.json \
       --resources-to-import "'[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'"
   ```
**catatan**  
`--resources-to-import`tidak mendukung YAMAL sebaris. Persyaratan untuk menghindari tanda kutip dalam string JSON bervariasi tergantung pada terminal Anda. Untuk informasi selengkapnya, lihat [Menggunakan tanda kutip di dalam string](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html#cli-usage-parameters-quoting-strings-containing) di *AWS Command Line Interface Panduan Pengguna*.

   Atau, Anda dapat menggunakan URL file sebagai masukan untuk `--resources-to-import` opsi, seperti yang ditunjukkan pada contoh berikut.

   ```
   --resources-to-import file://ResourcesToImport.txt
   ```

1. Tinjau set perubahan untuk memastikan sumber daya yang benar sedang diimpor ke tumpukan target.

   ```
   aws cloudformation describe-change-set \
       --change-set-name ImportChangeSet
   ```

1. Untuk memulai set perubahan dan mengimpor sumber daya, gunakan **execute-change-set** perintah berikut dan ganti teks placeholder. Semua tanda stack-level diterapkan ke sumber daya yang diimpor pada saat ini. Setelah operasi `(IMPORT_COMPLETE)` berhasil diselesaikan, sumber daya berhasil diimpor.

   ```
   aws cloudformation execute-change-set \
       --change-set-name ImportChangeSet --stack-name TargetStackName
   ```
**catatan**  
Tidak perlu menjalankan deteksi penyimpangan pada tumpukan target setelah operasi impor ini karena sumber daya sudah dikelola oleh CloudFormation.