Memindahkan sumber daya antar tumpukan - AWS CloudFormation

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

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 dengan impor sumber daya

penting

Tidak semua sumber daya mendukung operasi impor. Lihat Sumber daya yang mendukung operasi impor 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 AWS Management Console

  1. Dalam template sumber, tentukan sumber daya Retain DeletionPolicyyang ingin Anda pindahkan.

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

    contoh 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 } } } } }
  2. Buka CloudFormation konsol untuk melakukan pembaruan tumpukan guna menerapkan kebijakan penghapusan.

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

    2. Di bawah Siapkan templat, Pilih Ganti templat saat ini.

    3. Di bawah Tentukan templat, sediakan templat sumber yang diperbarui dengan atribut DeletionPolicy pada GamesTable, lalu pilih Selanjutnya.

      • Pilih Amazon S3 URL, lalu tentukan URL ke template sumber yang diperbarui di kotak teks.

      • Pilih Unggah file templat, lalu telusuri file templat sumber yang diperbarui.

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

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

    6. Pada Review SourceStackNamehalaman, tinjau perubahan Anda. Jika template Anda berisi IAM sumber daya, pilih Saya mengakui bahwa template ini dapat membuat IAM sumber daya untuk menentukan bahwa Anda ingin menggunakan IAM sumber daya dalam template. Untuk informasi selengkapnya tentang penggunaan IAM sumber daya dalam templat, lihatKontrol CloudFormation akses dengan AWS Identity and Access Management. Lalu, perbarui tumpukan sumber Anda dengan membuat set perubahan atau perbarui tumpukan sumber Anda secara langsung.

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

    Templat sumber sekarang terlihat seperti berikut.

    contoh 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.

    contoh 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 } } } } }
  4. Ulangi langkah 2 — 3 untuk memperbarui tumpukan sumber lagi, kali ini untuk menghapus sumber daya target dari tumpukan.

  5. 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.
    2. Baca halaman Gambaran umum Impor untuk daftar hal yang harus Anda sediakan selama operasi ini. Kemudian, pilih Selanjutnya.

    3. Pada halaman Tentukan template, lengkapi salah satu dari berikut ini, lalu pilih Berikutnya.

      • Pilih Amazon S3 URL, lalu tentukan a URL di kotak teks.

      • Pilih Unggah file templat, lalu telusuri file yang akan diunggah.

    4. Di halaman Identifikasi sumber daya, identifikasi sumber daya yang Anda pindahkan (dalam contoh ini, GamesTable). Untuk informasi selengkapnya, lihat Pengidentifikasi sumber daya.

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

      2. Di bawah Nilai pengidentifikasi, ketik nilai properti yang sebenarnya. Misalnya, GamesTables.

      3. Pilih Berikutnya.

    5. 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.

    6. Pada Review TargetStackNamehalaman, 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 diterapkan pada sumber daya yang diimpor saat ini.

    7. Panel Peristiwa di halaman Detail tumpukan menampilkan tumpukan induk Anda.

      Tab Peristiwa di konsol.
      catatan

      Tidak perlu menjalankan deteksi drift pada tumpukan induk setelah operasi impor ini karena AWS::CloudFormation::Stack sumber daya sudah dikelola oleh CloudFormation.

Memfaktorkan ulang tumpukan menggunakan AWS CLI

  1. Dalam template sumber, tentukan sumber daya Retain DeletionPolicyyang ingin Anda pindahkan.

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

    contoh 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 } } } } }
  2. Perbarui tumpukan sumber untuk menerapkan kebijakan penghapusan ke sumber daya.

    aws cloudformation update-stack --stack-name SourceStackName
  3. Hapus sumber daya, parameter terkait, dan output dari templat sumber, lalu tambahkan ke templat target.

    Templat sumber sekarang terlihat seperti berikut.

    contoh 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.

    contoh 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 } } } } }
  4. Perbarui tumpukan sumber untuk menghapus sumber daya GamesTable serta parameter dan output terkait dari tumpukan.

    aws cloudformation update-stack --stack-name SourceStackName
  5. Buat daftar sumber daya aktual untuk diimpor dan pengenal uniknya dalam format JSON string berikut. Untuk informasi selengkapnya, lihat Pengidentifikasi sumber daya.

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

    Atau, Anda dapat menentukan parameter JSON -format dalam file konfigurasi.

    Misalnya, untuk mengimporGamesTable, Anda dapat membuat ResourcesToImport.txt file yang berisi konfigurasi berikut.

    [ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ]
  6. Untuk membuat set perubahan, gunakan create-change-set perintah berikut dan ganti teks placeholder. Untuk --change-set-type opsi, tentukan nilaiIMPORT. Untuk --resources-to-import opsi, ganti JSON string sampel dengan JSON string 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-importtidak mendukung inlineYAML. Persyaratan untuk menghindari tanda kutip dalam JSON string bervariasi tergantung pada terminal Anda. Untuk informasi selengkapnya, lihat Menggunakan tanda kutip di dalam string di AWS Command Line Interface Panduan Pengguna.

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

    --resources-to-import file://ResourcesToImport.txt
  7. Tinjau set perubahan untuk memastikan sumber daya yang benar sedang diimpor ke tumpukan target.

    aws cloudformation describe-change-set \ --change-set-name ImportChangeSet
  8. 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 drift pada tumpukan target setelah operasi impor ini karena sumber daya sudah dikelola oleh CloudFormation.