

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

# Kelola penerapan berkelanjutan dengan versi dan alias di Step Functions
<a name="concepts-cd-aliasing-versioning"></a>

*Anda dapat menggunakan Step Functions untuk mengelola penerapan berkelanjutan alur kerja Anda melalui *versi* mesin status dan alias.* *Versi* adalah snapshot bernomor dan tidak dapat diubah dari mesin status yang dapat Anda jalankan. *Alias* adalah pointer hingga dua versi mesin negara.

Anda dapat mempertahankan beberapa versi mesin status Anda dan mengelola penerapannya dalam alur kerja produksi Anda. Dengan alias, Anda dapat merutekan lalu lintas antara versi alur kerja yang berbeda dan secara bertahap menyebarkan alur kerja tersebut ke lingkungan produksi.

Selain itu, Anda dapat memulai eksekusi mesin status menggunakan versi atau alias. Jika Anda tidak menggunakan versi atau alias saat memulai eksekusi mesin status, Step Functions menggunakan revisi terbaru dari definisi mesin status.

**Revisi mesin negara**  
Mesin negara dapat memiliki satu atau lebih revisi. Saat Anda memperbarui mesin status menggunakan tindakan [UpdateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html)API, itu akan membuat revisi mesin status baru. *Revisi* adalah snapshot yang tidak dapat diubah dan hanya-baca dari definisi dan konfigurasi mesin status. Anda tidak dapat memulai eksekusi mesin status dari revisi, dan revisi tidak memiliki ARN. Revisi memiliki`revisionId`, yang merupakan pengidentifikasi unik universal (UUID).

**Topics**
+ [Versi](concepts-state-machine-version.md)
+ [Alias](concepts-state-machine-alias.md)
+ [Versi dan alias otorisasi](auth-version-alias.md)
+ [Mengaitkan eksekusi dengan versi atau alias](execution-alias-version-associate.md)
+ [Contoh penerapan](example-alias-version-deployment.md)
+ [Penyebaran versi secara bertahap](version-rolling-deployment.md)

# Status versi mesin dalam alur kerja Step Functions
<a name="concepts-state-machine-version"></a>

*Versi* adalah snapshot bernomor dan tidak **dapat diubah** dari mesin negara. Anda menerbitkan versi dari revisi terbaru yang dibuat pada mesin status tersebut. Setiap versi memiliki Nama Sumber Daya Amazon (ARN) unik yang merupakan kombinasi dari ARN mesin status dan nomor versi yang dipisahkan oleh titik dua (:). Contoh berikut menunjukkan format ARN versi mesin negara.

```
arn:partition:states:region:account-id:stateMachine:myStateMachine:1
```

Untuk mulai menggunakan versi mesin negara, Anda harus menerbitkan versi pertama. Setelah memublikasikan versi, Anda dapat menjalankan tindakan [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)API dengan versi ARN. Anda tidak dapat mengedit versi, tetapi Anda dapat memperbarui mesin status dan menerbitkan versi baru. Anda juga dapat mempublikasikan beberapa versi mesin negara Anda.

![\[Diagram ilustrasi fuzzy yang menunjukkan bagaimana versi adalah snapshot yang tidak dapat diubah dari mesin status.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/versioning-concept.png)


Saat Anda mempublikasikan versi baru mesin status Anda, Step Functions memberinya nomor versi. Nomor versi mulai dari 1 dan meningkat secara monoton untuk setiap versi baru. Nomor versi tidak digunakan kembali untuk mesin status tertentu. Jika Anda menghapus versi 10 dari mesin status Anda dan kemudian menerbitkan versi baru, Step Functions menerbitkannya sebagai versi 11.

Properti berikut ini sama untuk semua versi mesin negara:
+ Semua versi mesin negara berbagi jenis yang sama [(Standar atau Ekspres)](choosing-workflow-type.md).
+ Anda tidak dapat mengubah nama atau tanggal pembuatan mesin status antar versi.
+ Tag berlaku secara global untuk mesin negara. Anda dapat mengelola tag untuk mesin status menggunakan tindakan [TagResource](https://docs.aws.amazon.com/step-functions/latest/apireference/API_TagResource.html)dan [UntagResource](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UntagResource.html)API.

Mesin negara juga mengandung properti yang merupakan bagian dari setiap versi dan[revision](concepts-cd-aliasing-versioning.md#statemachinerev), tetapi properti ini dapat berbeda antara dua versi atau revisi yang diberikan. Properti ini termasuk [definisi mesin State](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html#StepFunctions-UpdateStateMachine-request-definition), [peran IAM](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html#StepFunctions-UpdateStateMachine-request-roleArn), [konfigurasi penelusuran, dan konfigurasi](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html#StepFunctions-UpdateStateMachine-request-tracingConfiguration) [logging](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html#StepFunctions-UpdateStateMachine-request-loggingConfiguration).

## Menerbitkan versi mesin status (Konsol)
<a name="procedure-create-versions"></a>

Anda dapat mempublikasikan hingga 1000 versi mesin negara. Untuk meminta peningkatan batas lunak ini, gunakan halaman **Support Center** di halaman [Konsol Manajemen AWS](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html). Anda dapat menghapus versi yang tidak digunakan secara manual dari konsol atau dengan menjalankan tindakan [DeleteStateMachineVersion](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DeleteStateMachineVersion.html)API.

**Untuk mempublikasikan versi mesin negara**

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/), lalu pilih state machine yang ada.

1. Pada halaman **detail mesin Status**, pilih **Edit**.

1. Edit definisi mesin status sesuai kebutuhan, lalu pilih **Simpan**.

1. Pilih **versi Publikasikan**.

1. (Opsional) Di bidang **Deskripsi** pada kotak dialog yang muncul, masukkan deskripsi singkat tentang versi mesin negara.

1. Pilih **Terbitkan**.

**catatan**  
Saat Anda mempublikasikan versi baru mesin status Anda, Step Functions memberinya nomor versi. Nomor versi mulai dari 1 dan meningkat secara monoton untuk setiap versi baru. Nomor versi tidak digunakan kembali untuk mesin status tertentu. Jika Anda menghapus versi 10 dari mesin status Anda dan kemudian menerbitkan versi baru, Step Functions menerbitkannya sebagai versi 11.

## Mengelola versi dengan operasi Step Functions API
<a name="manage-versions-with-api"></a>

Step Functions menyediakan operasi API berikut untuk mempublikasikan dan mengelola versi mesin status:
+ [PublishStateMachineVersion](https://docs.aws.amazon.com/step-functions/latest/apireference/API_PublishStateMachineVersion.html)— Menerbitkan versi dari mesin [revision](concepts-cd-aliasing-versioning.md#statemachinerev) negara saat ini.
+ [UpdateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html)— Menerbitkan versi mesin status baru jika Anda memperbarui mesin status dan mengatur `publish` parameter ke `true` dalam permintaan yang sama.
+ [CreateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachine.html)— Menerbitkan revisi pertama mesin status jika Anda mengatur `publish` parameter ke. `true`
+ [ListStateMachineVersions](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListStateMachineVersions.html)— Daftar versi untuk ARN mesin negara yang ditentukan.
+ [DescribeStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeStateMachine.html)— Mengembalikan detail versi mesin negara untuk versi ARN yang ditentukan dalam. `stateMachineArn`
+ [DeleteStateMachineVersion](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DeleteStateMachineVersion.html)— Menghapus versi mesin negara.

Untuk mempublikasikan versi baru dari revisi saat ini dari mesin status yang disebut `myStateMachine` menggunakan AWS Command Line Interface, gunakan `publish-state-machine-version` perintah:

```
aws stepfunctions publish-state-machine-version --state-machine-arn arn:aws:states:region:account-id:stateMachine:myStateMachine
```

Respons mengembalikan`stateMachineVersionArn`. Misalnya, perintah sebelumnya mengembalikan respon dari`arn:aws:states:region:account-id:stateMachine:myStateMachine:1`.

**catatan**  
Saat Anda mempublikasikan versi baru mesin status Anda, Step Functions memberinya nomor versi. Nomor versi mulai dari 1 dan meningkat secara monoton untuk setiap versi baru. Nomor versi tidak digunakan kembali untuk mesin status tertentu. Jika Anda menghapus versi 10 dari mesin status Anda dan kemudian menerbitkan versi baru, Step Functions menerbitkannya sebagai versi 11.

## Menjalankan versi mesin status dari konsol
<a name="procedure-run-version"></a>

Untuk mulai menggunakan versi mesin status, Anda harus terlebih dahulu menerbitkan versi dari mesin status saat ini[revision](concepts-cd-aliasing-versioning.md#statemachinerev). Untuk memublikasikan versi, gunakan konsol Step Functions atau jalankan tindakan [PublishStateMachineVersion](https://docs.aws.amazon.com/step-functions/latest/apireference/API_PublishStateMachineVersion.html)API. Anda juga dapat menjalankan tindakan [UpdateStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachineAlias.html)API dengan parameter opsional bernama `publish` untuk memperbarui mesin status dan mempublikasikan versinya.

Anda dapat memulai eksekusi versi dengan menggunakan konsol atau dengan menjalankan tindakan [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)API dan menyediakan versi ARN. Anda juga dapat menggunakan [alias](concepts-state-machine-alias.md) untuk memulai eksekusi versi. Berdasarkan [konfigurasi routing-nya](concepts-state-machine-alias.md#alias-routing-config), alias merutekan lalu lintas ke versi tertentu.

Jika Anda memulai eksekusi mesin status tanpa menggunakan versi, Step Functions menggunakan revisi terbaru dari mesin status untuk eksekusi. Untuk informasi tentang cara Step Functions mengaitkan eksekusi dengan versi, lihat[Mengaitkan eksekusi dengan versi atau alias](execution-alias-version-associate.md).

**Untuk memulai eksekusi menggunakan versi mesin negara**

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/), lalu pilih mesin status yang sudah ada yang telah Anda terbitkan untuk satu atau beberapa versi. Untuk mempelajari cara mempublikasikan versi, lihat[Menerbitkan versi mesin status (Konsol)](#procedure-create-versions).

1. Pada halaman **detail mesin Status**, pilih tab **Versi**.

1. Di bagian **Versi**, lakukan hal berikut:

   1. Pilih versi yang ingin Anda mulai eksekusi.

   1. Pilih **Mulai Eksekusi**.

1. (Opsional) Dalam **Mulai eksekusi** kotak dialog, masukkan nama untuk eksekusi.

1. (Opsional), masukkan input eksekusi, lalu pilih **Mulai eksekusi**.

# Status alias mesin dalam alur kerja Step Functions
<a name="concepts-state-machine-alias"></a>

*Alias* adalah pointer hingga dua versi mesin state yang sama. Anda dapat membuat beberapa alias untuk mesin negara Anda. Setiap alias memiliki Nama Sumber Daya Amazon (ARN) yang unik. Alias ARN adalah kombinasi dari ARN mesin negara dan nama alias, dipisahkan oleh titik dua (:). Contoh berikut menunjukkan format mesin negara alias ARN.

```
arn:partition:states:region:account-id:stateMachine:myStateMachine:aliasName
```

Anda dapat menggunakan alias untuk [merutekan lalu lintas](#alias-routing-config) antara salah satu dari dua versi mesin negara. Anda juga dapat membuat alias yang menunjuk ke satu versi. Alias hanya dapat menunjuk ke versi mesin status. Anda tidak dapat menggunakan alias untuk menunjuk ke alias lain. Anda juga dapat memperbarui alias untuk menunjuk ke versi mesin status yang berbeda.

![\[Diagram menunjukkan alias mengirim 80 persen permintaan ke v1, dan 20 persen ke v2.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/aliases-concept.png)


**Topics**
+ [Membuat alias mesin status (Konsol)](#procedure-create-aliases)
+ [Mengelola alias dengan APIs](#manage-aliases-with-api)
+ [Konfigurasi perutean alias](#alias-routing-config)
+ [Menjalankan mesin status menggunakan alias (Konsol)](#procedure-run-exec-with-alias)

## Membuat alias mesin status (Konsol)
<a name="procedure-create-aliases"></a>

Anda dapat membuat hingga 100 alias untuk setiap state machine dengan menggunakan konsol Step Functions atau dengan menjalankan aksi [CreateStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachineAlias.html)API. Untuk meminta peningkatan batas lunak ini, gunakan halaman **Support Center** di halaman [Konsol Manajemen AWS](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html). Hapus alias yang tidak digunakan dari konsol atau dengan menjalankan tindakan API. [DeleteStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DeleteStateMachineAlias.html)

**Untuk membuat alias mesin negara**

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/), lalu pilih state machine yang ada.

1. Pada halaman **detail mesin State**, pilih tab **Alias**.

1. Pilih **Buat alias baru**.

1. Di halaman **Buat alias**, lakukan hal berikut:

   1. Masukkan **nama Alias**.

   1. (Opsional) Masukkan **Deskripsi** untuk alias.

1. Untuk mengonfigurasi perutean pada alias, lihat Konfigurasi perutean [Alias](#alias-routing-config).

1. Pilih **Buat alias**.

## Mengelola alias dengan operasi Step Functions API
<a name="manage-aliases-with-api"></a>

Step Functions menyediakan operasi API berikut yang dapat Anda gunakan untuk membuat dan mengelola alias mesin status atau mendapatkan informasi tentang alias:
+ [CreateStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachineAlias.html)— Membuat alias untuk mesin negara.
+ [DescribeStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeStateMachineAlias.html)— Mengembalikan rincian tentang alias mesin negara.
+ [ListStateMachineAliases](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListStateMachineAliases.html)— Daftar alias untuk ARN mesin negara yang ditentukan.
+ [UpdateStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachineAlias.html)— Memperbarui konfigurasi alias mesin status yang ada dengan memodifikasi atau. `description` `routingConfiguration`
+ [DeleteStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DeleteStateMachineAlias.html)— Menghapus alias mesin negara.

Untuk membuat alias bernama `PROD` yang menunjuk ke versi 1 dari mesin negara bernama `myStateMachine` menggunakan AWS Command Line Interface, gunakan `create-state-machine-alias` perintah.

```
aws stepfunctions create-state-machine-alias --name PROD  --routing-configuration "[{\"stateMachineVersionArn\":\"arn:aws:states:region:account-id:stateMachine:myStateMachine:1\",\"weight\":100}]"
```

## Konfigurasi perutean alias
<a name="alias-routing-config"></a>

Anda dapat menggunakan alias untuk merutekan lalu lintas eksekusi antara dua versi mesin negara. Misalnya, Anda ingin meluncurkan versi baru mesin status Anda. Anda dapat mengurangi risiko yang terlibat dalam penerapan versi baru dengan mengonfigurasi perutean pada alias. Dengan mengonfigurasi perutean, Anda dapat mengirim sebagian besar lalu lintas Anda ke versi mesin status Anda yang telah diuji sebelumnya. Versi baru kemudian dapat menerima persentase yang lebih kecil, sampai Anda dapat mengonfirmasi bahwa aman untuk meneruskan versi baru.

Untuk menentukan konfigurasi perutean, pastikan Anda memublikasikan kedua versi mesin status yang ditunjuk alias Anda. Saat Anda memulai eksekusi dari alias, Step Functions secara acak memilih versi mesin status untuk dijalankan dari versi yang ditentukan dalam konfigurasi perutean. Ini mendasarkan pilihan ini pada persentase lalu lintas yang Anda tetapkan untuk setiap versi dalam konfigurasi routing alias.



**Untuk mengkonfigurasi konfigurasi routing pada alias**
+ Pada halaman **Create alias**, di bawah **konfigurasi Routing**, lakukan hal berikut:

  1. Untuk **Versi**, pilih versi mesin status pertama yang ditunjuk alias.

  1. Pilih kotak centang **Pisahkan lalu lintas antara dua versi**. 
**Tip**  
Untuk menunjuk ke satu versi, kosongkan kotak centang **Split traffic antara dua versi**.

  1. Untuk **Versi**, pilih versi kedua yang harus ditunjukkan oleh alias. 

  1. Di bidang **Persentase lalu lintas**, tentukan persentase lalu lintas untuk merutekan ke setiap versi. Misalnya, masukkan **60** dan **40** rute 60 persen lalu lintas eksekusi ke versi pertama dan 40 persen lalu lintas ke versi kedua.

     Persentase lalu lintas gabungan harus sama dengan 100 persen.

## Menjalankan mesin status menggunakan alias (Konsol)
<a name="procedure-run-exec-with-alias"></a>

Anda dapat memulai eksekusi mesin status dengan alias baik dari konsol atau dengan menjalankan aksi [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)API dengan ARN alias. Step Functions kemudian menjalankan versi yang ditentukan oleh alias. Secara default, jika Anda tidak menentukan versi atau alias saat memulai eksekusi mesin status, Step Functions menggunakan revisi terbaru.

**Untuk memulai eksekusi mesin status menggunakan alias**

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/), lalu pilih mesin status yang sudah ada yang telah Anda buat alias. Untuk informasi tentang membuat alias, lihat[Membuat alias mesin status (Konsol)](#procedure-create-aliases).

1. Pada halaman **detail mesin State**, pilih tab **Alias**.

1. Di bagian **Alias**, lakukan hal berikut:

   1. Pilih alias yang ingin Anda mulai eksekusi.

   1. Pilih **Mulai Eksekusi**.

1. (Opsional) Dalam **Mulai eksekusi** kotak dialog, masukkan nama untuk eksekusi.

1. Jika diperlukan, masukkan input eksekusi, lalu pilih **Mulai eksekusi**.

# Otorisasi untuk versi dan alias dalam alur kerja Step Functions
<a name="auth-version-alias"></a>

Untuk menjalankan tindakan Step Functions API dengan versi atau alias, Anda memerlukan izin yang sesuai. Untuk mengotorisasi versi atau alias untuk menjalankan tindakan API, Step Functions menggunakan ARN mesin status alih-alih menggunakan ARN versi atau alias ARN. Anda juga dapat mencatat izin untuk versi atau alias tertentu. Untuk informasi selengkapnya, lihat [Memindahkan izin](#auth-scope-permission-version-alias).

Anda dapat menggunakan contoh kebijakan IAM berikut dari mesin status bernama `myStateMachine` untuk menjalankan tindakan [CreateStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachineAlias.html)API untuk membuat alias mesin status.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "states:CreateStateMachineAlias",
      "Resource": "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine"
    }
  ]
}
```

Saat Anda menetapkan izin untuk mengizinkan atau menolak akses ke tindakan API menggunakan versi mesin status atau alias, pertimbangkan hal berikut:
+ Jika Anda menggunakan `publish` parameter tindakan [CreateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachine.html)dan [UpdateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachine.html)API untuk memublikasikan versi mesin status baru, Anda juga memerlukan `ALLOW` izin pada tindakan [PublishStateMachineVersion](https://docs.aws.amazon.com/step-functions/latest/apireference/API_PublishStateMachineVersion.html)API.
+ Tindakan [DeleteStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DeleteStateMachine.html)API menghapus semua versi dan alias yang terkait dengan mesin status.

## Mencakup izin untuk versi atau alias
<a name="auth-scope-permission-version-alias"></a>

Anda dapat menggunakan qualifier untuk memperluas cakupan izin otorisasi yang diperlukan oleh versi atau alias. Kualifikasi mengacu pada nomor versi atau nama alias. Anda menggunakan kualifikasi untuk memenuhi syarat mesin negara. Contoh berikut adalah ARN mesin negara yang menggunakan alias bernama `PROD` sebagai qualifier.

```
arn:aws:states:region:account-id:stateMachine:myStateMachine:PROD
```

Untuk informasi lebih lanjut tentang memenuhi syarat dan tidak memenuhi syarat ARNs, lihat[Mengaitkan eksekusi dengan versi atau alias](execution-alias-version-associate.md).

Anda mencatat izin menggunakan kunci konteks opsional yang disebutkan `states:StateMachineQualifier` dalam pernyataan kebijakan `Condition` IAM. Misalnya, kebijakan IAM berikut untuk mesin status bernama `myStateMachine` menolak akses untuk menjalankan tindakan [DescribeStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeStateMachine.html)API dengan alias bernama as `PROD` atau versinya. `1`

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "states:DescribeStateMachine",
      "Resource": "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "states:StateMachineQualifier": [
            "PROD",
            "1"
          ]
        }
      }
    }
  ]
}
```

Daftar berikut menentukan tindakan API yang dapat Anda cakup izin dengan kunci `StateMachineQualifier` konteks.
+ [CreateStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachineAlias.html)
+ [DeleteStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DeleteStateMachineAlias.html)
+ [DeleteStateMachineVersion](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DeleteStateMachineVersion.html)
+ [DescribeStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeStateMachine.html)
+ [DescribeStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeStateMachineAlias.html)
+ [ListExecutions](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListExecutions.html)
+ [ListStateMachineAliases](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListStateMachineAliases.html)
+ [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)
+ [StartSyncExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartSyncExecution.html)
+ [UpdateStateMachineAlias](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UpdateStateMachineAlias.html)

# Bagaimana Step Functions mengaitkan eksekusi dengan versi atau alias
<a name="execution-alias-version-associate"></a>

Step Functions mengaitkan eksekusi dengan versi atau alias berdasarkan Amazon Resource Name (ARN) yang Anda gunakan untuk menjalankan tindakan API. [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html) Step Functions melakukan tindakan ini pada waktu mulai eksekusi.

Anda dapat memulai eksekusi mesin negara menggunakan ARN yang memenuhi syarat atau tidak memenuhi syarat.
+ **ARN yang memenuhi syarat** - Mengacu pada ARN mesin negara yang diakhiran dengan nomor versi atau nama alias.

  Contoh ARN yang memenuhi syarat berikut mengacu pada `3` versi mesin negara bernama. `myStateMachine`

  ```
  arn:aws:states:region:account-id:stateMachine:myStateMachine:3
  ```

  Contoh ARN yang memenuhi syarat berikut mengacu pada alias bernama mesin `PROD` negara bernama. `myStateMachine`

  ```
  arn:aws:states:region:account-id:stateMachine:myStateMachine:PROD
  ```
+ **ARN yang tidak memenuhi syarat** - Mengacu pada ARN mesin negara tanpa nomor versi atau akhiran nama alias.

  ```
  arn:aws:states:region:account-id:stateMachine:myStateMachine
  ```

Misalnya, jika ARN Anda yang memenuhi syarat mengacu pada versi`3`, Step Functions mengaitkan eksekusi dengan versi ini. Itu tidak mengaitkan eksekusi dengan alias apa pun yang mengarah ke versi`3`.

Jika ARN Anda yang memenuhi syarat mengacu pada alias, Step Functions mengaitkan eksekusi dengan alias tersebut dan versi yang ditunjuk alias tersebut. Eksekusi hanya dapat dikaitkan dengan satu alias.

**catatan**  
Jika Anda memulai eksekusi dengan ARN yang tidak memenuhi syarat, Step Functions tidak mengaitkan eksekusi tersebut dengan versi meskipun versi tersebut menggunakan mesin status yang sama. [revision](concepts-cd-aliasing-versioning.md#statemachinerev) Misalnya, jika versi 3 menggunakan revisi terbaru, tetapi Anda memulai eksekusi dengan ARN yang tidak memenuhi syarat, Step Functions tidak mengaitkan eksekusi tersebut dengan versi 3.

## Melihat eksekusi dimulai dengan versi atau alias
<a name="view-version-alias-executions"></a>

Step Functions menyediakan cara-cara berikut di mana Anda dapat melihat eksekusi yang dimulai dengan versi atau alias:

### Menggunakan tindakan API
<a name="view-executions-api-actions"></a>

Anda dapat melihat semua eksekusi yang terkait dengan versi atau alias dengan menjalankan tindakan API [DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)dan [ListExecutions](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListExecutions.html). Tindakan API ini mengembalikan ARN versi atau alias yang digunakan untuk memulai eksekusi. Tindakan ini juga mengembalikan detail lainnya termasuk status dan ARN eksekusi.

Anda juga dapat memberikan alias mesin status ARN atau versi ARN untuk mencantumkan eksekusi yang terkait dengan alias atau versi tertentu.

Contoh respons tindakan [ListExecutions](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListExecutions.html)API berikut menunjukkan ARN alias yang digunakan untuk memulai eksekusi mesin status bernama. *myFirstExecution*

*italicized*Teks dalam cuplikan kode berikut mewakili informasi khusus sumber daya.

```
{
    "executions": [
        {
            "executionArn": "arn:aws:states:region:account-id:execution:myStateMachine:myFirstExecution",
            "stateMachineArn": "arn:aws:states:region:account-id:stateMachine:myStateMachine",
            "stateMachineAliasArn": "arn:aws:states:region:account-id:stateMachine:myStateMachine:PROD",
            "name": "myFirstExecution",
            "status": "SUCCEEDED",
            "startDate": "2023-04-20T23:07:09.477000+00:00",
            "stopDate": "2023-04-20T23:07:09.732000+00:00"
        }
    ]
}
```

### Menggunakan konsol Step Functions
<a name="view-executions-console"></a>

Anda juga dapat melihat eksekusi yang dimulai oleh versi atau alias dari konsol [Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/). Prosedur berikut menunjukkan bagaimana Anda dapat melihat eksekusi yang dimulai dengan versi tertentu:

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/), lalu pilih mesin status yang sudah ada yang telah Anda publikasikan [versinya](concepts-state-machine-version.md#procedure-create-versions) atau buat [alias](concepts-state-machine-alias.md#procedure-create-aliases). Contoh ini menunjukkan cara melihat eksekusi yang dimulai dengan versi mesin status tertentu.

1. Pilih tab **Versi**, lalu pilih versi dari daftar **Versi**.
**Tip**  
Filter berdasarkan properti atau kotak nilai untuk mencari versi tertentu.

1. Pada *halaman Detail versi*, Anda dapat melihat daftar semua eksekusi mesin status yang sedang berlangsung dan sebelumnya yang dimulai dengan versi yang dipilih.

Gambar berikut menunjukkan halaman konsol *Detail Versi*. Halaman ini mencantumkan eksekusi yang dimulai oleh versi *4* dari mesin negara bernama`MathAddDemo`. Daftar ini juga menampilkan eksekusi yang dimulai oleh alias bernama`PROD`. *Alias ini mengarahkan lalu lintas eksekusi ke versi 4.*

![\[Tangkapan layar ilustratif dari halaman konsol detail versi mesin negara.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/view-version-executions.png)


### Menggunakan CloudWatch metrik
<a name="view-executions-metrics"></a>

Untuk setiap eksekusi mesin status yang Anda mulai dengan[Qualified ARN](#qualifiedARN), Step Functions memancarkan metrik tambahan dengan nama dan nilai yang sama dengan metrik yang dipancarkan saat ini. Metrik tambahan ini berisi dimensi untuk masing-masing pengenal versi dan nama alias yang Anda gunakan untuk memulai eksekusi. Dengan metrik ini, Anda dapat memantau eksekusi mesin status pada tingkat versi dan menentukan kapan skenario rollback mungkin diperlukan. Anda juga dapat [membuat CloudWatch alarm Amazon](procedure-cw-metrics.md#monitoring-using-cloudwatch-console-set-alarm) berdasarkan metrik ini.

Step Functions memancarkan metrik berikut untuk eksekusi yang Anda mulai dengan alias atau versi:
+ `ExecutionTime`
+ `ExecutionsAborted`
+ `ExecutionsFailed`
+ `ExecutionsStarted`
+ `ExecutionsSucceeded`
+ `ExecutionsTimedOut `

Jika Anda memulai eksekusi dengan versi ARN, Step Functions menerbitkan metrik dengan dan metrik kedua dengan `StateMachineArn` `StateMachineArn` dan dimensi. `Version`

Jika Anda memulai eksekusi dengan alias ARN, Step Functions memancarkan metrik berikut:
+ Dua metrik untuk ARN dan versi yang tidak memenuhi syarat.
+ Sebuah metrik dengan `StateMachineArn` dan `Alias` dimensi.

# Contoh: Alias dan penyebaran versi di Step Functions
<a name="example-alias-version-deployment"></a>

Contoh berikut dari teknik penyebaran Canary menunjukkan bagaimana Anda dapat menerapkan versi mesin status baru dengan. AWS Command Line Interface Dalam contoh ini, alias yang Anda buat merutekan 20 persen lalu lintas eksekusi ke versi baru. Ini kemudian mengarahkan 80 persen sisanya dari versi sebelumnya. Untuk menerapkan [versi](concepts-state-machine-version.md) mesin status baru dan menggeser lalu lintas eksekusi dengan [alias](concepts-state-machine-alias.md), selesaikan langkah-langkah berikut:

1. 

**Publikasikan versi dari revisi mesin status saat ini.**  
Gunakan **publish-state-machine-version** perintah di AWS CLI untuk menerbitkan versi dari revisi saat ini dari mesin negara yang disebut `myStateMachine:`

   ```
   aws stepfunctions publish-state-machine-version --state-machine-arn arn:aws:states:region:account-id:stateMachine:myStateMachine
   ```

   Respons mengembalikan `stateMachineVersionArn` versi yang Anda terbitkan. Misalnya, `arn:aws:states:region:account-id:stateMachine:myStateMachine:1`.

1. 

**Buat alias yang menunjuk ke versi mesin negara.**  
Gunakan **create-state-machine-alias** perintah untuk membuat alias bernama `PROD` yang menunjuk ke versi 1 dari`myStateMachine`:

   ```
   aws stepfunctions create-state-machine-alias --name PROD --routing-configuration "[{\"stateMachineVersionArn\":\"arn:aws:states:region:account-id:stateMachine:myStateMachine:1\",\"weight\":100}]"
   ```

1. 

**Verifikasi bahwa eksekusi yang dimulai oleh alias menggunakan versi publikasi yang benar.**  
Mulai eksekusi baru `myStateMachine` dengan memberikan ARN alias **PROD** dalam perintah: **start-execution**

   ```
   aws stepfunctions start-execution 
     --state-machine-arn arn:aws:states:region:account-id:stateMachineAlias:myStateMachine:PROD
     --input "{}"
   ```

   Jika Anda memberikan ARN mesin status dalam [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)permintaan, ia menggunakan mesin status terbaru [revision](concepts-cd-aliasing-versioning.md#statemachinerev) alih-alih versi yang ditentukan dalam alias Anda untuk memulai eksekusi.

1. 

**Perbarui definisi mesin status dan publikasikan versi baru.**  
Perbarui `myStateMachine` dan publikasikan versi barunya. Untuk melakukan ini, gunakan `publish` parameter opsional **update-state-machine** perintah:

   ```
   aws stepfunctions update-state-machine
       --state-machine-arn arn:aws:states:region:account-id:stateMachine:myStateMachine
       --definition $UPDATED_STATE_MACHINE_DEFINITION
       --publish
   ```

   Respons mengembalikan `stateMachineVersionArn` untuk versi baru. Misalnya, `arn:aws:states:region:account-id:stateMachine:myStateMachine:2`.

1. 

**[Perbarui alias untuk menunjuk ke kedua versi dan mengatur konfigurasi perutean alias.](concepts-state-machine-alias.md#alias-routing-config)**  
Gunakan **update-state-machine-alias** perintah untuk memperbarui konfigurasi routing `PROD` alias. Konfigurasikan alias sehingga 80 persen dari lalu lintas eksekusi masuk ke versi 1 dan 20 persen sisanya masuk ke versi 2:

   ```
   aws stepfunctions update-state-machine-alias --state-machine-alias-arn arn:aws:states:region:account-id:stateMachineAlias:myStateMachine:PROD --routing-configuration "[{\"stateMachineVersionArn\":\"arn:aws:states:region:account-id:stateMachine:myStateMachine:1\",\"weight\":80}, {\"stateMachineVersionArn\":\"arn:aws:states:region:account-id:stateMachine:myStateMachine:2\",\"weight\":20}]"
   ```

1. 

**Ganti versi 1 dengan versi 2.**  
Setelah Anda memverifikasi bahwa versi mesin status baru Anda berfungsi dengan benar, Anda dapat menerapkan versi mesin status baru. Untuk melakukan ini, perbarui alias lagi untuk menetapkan 100 persen lalu lintas eksekusi ke versi baru.

   Gunakan **update-state-machine-alias** perintah untuk mengatur konfigurasi routing alias `PROD` ke 100 persen untuk versi 2:

   ```
   aws stepfunctions update-state-machine-alias --state-machine-alias-arn arn:aws:states:region:account-id:stateMachineAlias:myStateMachine:PROD --routing-configuration "[{\"stateMachineVersionArn\":\"arn:aws:states:region:account-id:stateMachine:myStateMachine:2\",\"weight\":100}]"
   ```

**Tip**  
Untuk mengembalikan penerapan versi 2, edit konfigurasi perutean alias untuk mengalihkan 100 persen lalu lintas ke versi yang baru digunakan.  

```
aws stepfunctions update-state-machine-alias 
  --state-machine-alias-arn arn:aws:states:region:account-id:stateMachineAlias:myStateMachine:PROD 
  --routing-configuration "[{\"stateMachineVersionArn\":\"arn:aws:states:region:account-id:stateMachine:myStateMachine:1\",\"weight\":100}]"
```

Anda dapat menggunakan versi dan alias untuk melakukan jenis penerapan lainnya. Misalnya, Anda dapat melakukan *penerapan bergulir* versi baru mesin status Anda. Untuk melakukannya, secara bertahap tingkatkan persentase tertimbang dalam konfigurasi routing alias yang menunjuk ke versi baru.

Anda juga dapat menggunakan versi dan alias untuk melakukan penyebaran *biru/hijau*. Untuk melakukannya, buat alias bernama `green` yang menjalankan versi 1 saat ini dari mesin status Anda. Kemudian, buat alias lain bernama `blue` yang menjalankan versi baru, misalnya,`2`. Untuk menguji versi baru, kirim lalu lintas eksekusi ke `blue` alias. Ketika Anda yakin bahwa versi baru Anda berfungsi dengan benar, perbarui `green` alias untuk menunjuk ke versi baru Anda.

# Lakukan penyebaran bertahap versi mesin status di Step Functions
<a name="version-rolling-deployment"></a>

Penyebaran bergulir adalah strategi penyebaran yang secara perlahan menggantikan versi aplikasi sebelumnya dengan versi aplikasi baru. Untuk melakukan penyebaran bergulir versi mesin negara, secara bertahap kirim peningkatan jumlah lalu lintas eksekusi ke versi baru. Jumlah lalu lintas dan tingkat kenaikan adalah parameter yang Anda konfigurasikan.

Anda dapat melakukan penerapan bergulir versi menggunakan salah satu opsi berikut:
+ [Konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) — Buat alias yang menunjuk ke dua versi mesin status yang sama. Untuk alias ini, Anda mengkonfigurasi konfigurasi routing untuk menggeser lalu lintas antara dua versi. Untuk informasi selengkapnya tentang menggunakan konsol untuk meluncurkan versi, lihat [Versi](concepts-state-machine-version.md) dan[Alias](concepts-state-machine-alias.md).
+ **Skrip untuk AWS CLI dan SDK** — Buat skrip shell menggunakan AWS CLI atau SDK. AWS Untuk informasi selengkapnya, lihat bagian berikut untuk menggunakan AWS CLI dan AWS SDK.
+ **AWS CloudFormation template** — Gunakan `[AWS::StepFunctions::StateMachineVersion](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html)` dan `[AWS::StepFunctions::StateMachineAlias](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html)` sumber daya untuk mempublikasikan beberapa versi mesin status dan membuat alias untuk menunjuk ke satu atau dua versi ini.

## Gunakan AWS CLI untuk menerapkan versi mesin status baru
<a name="version-canary-deploy-cli"></a>

Contoh skrip di bagian ini menunjukkan bagaimana Anda dapat menggunakan AWS CLI untuk secara bertahap mengalihkan lalu lintas dari versi mesin status sebelumnya ke versi mesin status baru. Anda dapat menggunakan contoh skrip ini atau memperbaruinya sesuai dengan kebutuhan Anda.

Skrip ini menunjukkan penyebaran Canary untuk menerapkan versi mesin status baru menggunakan alias. Langkah-langkah berikut menguraikan tugas-tugas yang dilakukan skrip:

1. Jika `publish_revision` parameter disetel ke true, publikasikan yang terbaru [revision](concepts-cd-aliasing-versioning.md#statemachinerev) sebagai versi berikutnya dari mesin status. Versi ini menjadi versi langsung yang baru jika penerapan berhasil.

   Jika Anda menyetel `publish_revision` parameter ke false, skrip akan menyebarkan versi terakhir yang diterbitkan dari mesin status.

1. Buat alias jika belum ada. Jika alias tidak ada, arahkan 100 persen lalu lintas untuk alias ini ke versi baru, lalu keluar dari skrip.

1. Perbarui konfigurasi routing alias untuk menggeser sebagian kecil lalu lintas dari versi sebelumnya ke versi baru. Anda mengatur persentase kenari ini dengan `canary_percentage` parameter.

1. Secara default, pantau CloudWatch alarm yang dapat dikonfigurasi setiap 60 detik. Jika salah satu dari alarm ini dimatikan, segera kembalikan penyebaran dengan mengarahkan 100 persen lalu lintas ke versi sebelumnya.

   Setelah setiap interval waktu, dalam hitungan detik, ditentukan dalam`alarm_polling_interval`, lanjutkan memantau alarm. Lanjutkan pemantauan sampai interval waktu yang ditentukan `canary_interval_seconds` telah berlalu.

1. Jika tidak ada alarm yang dimatikan selama`canary_interval_seconds`, alihkan 100 persen lalu lintas ke versi baru.

1. Jika versi baru berhasil digunakan, hapus versi apa pun yang lebih lama dari nomor yang ditentukan dalam `history_max` parameter.



```
#!/bin/bash
# 
# AWS StepFunctions example showing how to create a canary deployment with a
# State Machine Alias and versions.
# 
# Requirements: AWS CLI installed and credentials configured.
# 
# A canary deployment deploys the new version alongside the old version, while
# routing only a small fraction of the overall traffic to the new version to
# see if there are any errors. Only once the new version has cleared a testing
# period will it start receiving 100% of traffic.
# 
# For a Blue/Green or All at Once style deployment, you can set the
# canary_percentage to 100. The script will immediately shift 100% of traffic
# to the new version, but keep on monitoring the alarms (if any) during the
# canary_interval_seconds time interval. If any alarms raise during this period,
# the script will automatically rollback to the previous version.
# 
# Step Functions allows you to keep a maximum of 1000 versions in version history
# for a state machine. This script has a version history deletion mechanism at
# the end, where it will delete any versions older than the limit specified.
# 
# For an example that also demonstrates linear (or rolling) deployments, see the following: 
# https://github.com/aws-samples/aws-stepfunctions-examples/blob/main/gradual-deploy/sfndeploy.py

set -euo pipefail

# ******************************************************************************
# you can safely change the variables in this block to your values
state_machine_name="my-state-machine"
alias_name="alias-1"
region="us-east-1"

# array of cloudwatch alarms to poll during the test period.
# to disable alarm checking, set alarm_names=()
alarm_names=("alarm1" "alarm name with a space")

# true to publish the current revision as the next version before deploy.
# false to deploy the latest version from the state machine's version history.
publish_revision=true

# true to force routing configuration update even if the current routing
# for the alias does not have a 100% routing config.
# false will abandon deploy attempt if current routing config not 100% to a
# single version.
# Be careful when you combine this flag with publish_revision - if you just
# rerun the script you might deploy the newly published revision from the
# previous run.
force=false

# percentage of traffic to route to the new version during the test period
canary_percentage=10

# how many seconds the canary deployment lasts before full deploy to 100%
canary_interval_seconds=300

# how often to poll the alarms
alarm_polling_interval=60

# how many versions to keep in history. delete versions prior to this.
# set to 0 to disable old version history deletion.
history_max=0
# ******************************************************************************

#######################################
# Update alias routing configuration.
# 
# If you don't specify version 2 details, will only create 1 routing entry. In
# this case the routing entry weight must be 100.
# 
# Globals:
#   alias_arn
# Arguments:
#   1. version 1 arn
#   2. version 1 weight
#   3. version 2 arn (optional)
#   4. version 2 weight (optional)
#######################################
function update_routing() {
  if [[ $# -eq 2 ]]; then
    local routing_config="[{\"stateMachineVersionArn\": \"$1\", \"weight\":$2}]"
  elif [[ $# -eq 4 ]]; then
    local routing_config="[{\"stateMachineVersionArn\": \"$1\", \"weight\":$2}, {\"stateMachineVersionArn\": \"$3\", \"weight\":$4}]"
  else
    echo "You have to call update_routing with either 2 or 4 input arguments." >&2
    exit 1
  fi
  
  ${aws} update-state-machine-alias --state-machine-alias-arn ${alias_arn} --routing-configuration "${routing_config}"
}

# ******************************************************************************
# pre-run validation
if [[ (("${#alarm_names[@]}" -gt 0)) ]]; then
  alarm_exists_count=$(aws cloudwatch describe-alarms --alarm-names "${alarm_names[@]}" --alarm-types "CompositeAlarm" "MetricAlarm" --query "length([MetricAlarms, CompositeAlarms][])" --output text)

  if [[ (("${#alarm_names[@]}" -ne "${alarm_exists_count}")) ]]; then
    echo All of the alarms to monitor do not exist in CloudWatch: $(IFS=,; echo "${alarm_names[*]}") >&2
    echo Only the following alarm names exist in CloudWatch:
    aws cloudwatch describe-alarms --alarm-names "${alarm_names[@]}" --alarm-types "CompositeAlarm" "MetricAlarm" --query "join(', ', [MetricAlarms, CompositeAlarms][].AlarmName)" --output text
    exit 1
  fi
fi

if [[ (("${history_max}" -gt 0)) && (("${history_max}" -lt 2)) ]]; then
  echo The minimum value for history_max is 2. This is the minimum number of older state machine versions to be able to rollback in the future. >&2
  exit 1
fi
# ******************************************************************************
# main block follows

account_id=$(aws sts get-caller-identity --query Account --output text)

sm_arn="arn:aws:states:${region}:${account_id}:stateMachine:${state_machine_name}"

# the aws command we'll be invoking a lot throughout.
aws="aws stepfunctions"

# promote the latest revision to the next version
if [[ "${publish_revision}" = true ]]; then
  new_version=$(${aws} publish-state-machine-version --state-machine-arn=$sm_arn --query stateMachineVersionArn --output text)
  echo Published the current revision of state machine as the next version with arn: ${new_version}
else
  new_version=$(${aws} list-state-machine-versions --state-machine-arn ${sm_arn} --max-results 1 --query "stateMachineVersions[0].stateMachineVersionArn" --output text)
  echo "Since publish_revision is false, using the latest version from the state machine's version history: ${new_version}"
fi

# find the alias if it exists
alias_arn_expected="${sm_arn}:${alias_name}"
alias_arn=$(${aws} list-state-machine-aliases --state-machine-arn ${sm_arn} --query "stateMachineAliases[?stateMachineAliasArn==\`${alias_arn_expected}\`].stateMachineAliasArn" --output text)

if [[ "${alias_arn_expected}" == "${alias_arn}" ]]; then
  echo Found alias ${alias_arn}

  echo Current routing configuration is:
  ${aws} describe-state-machine-alias --state-machine-alias-arn "${alias_arn}" --query routingConfiguration
else
  echo Alias does not exist. Creating alias ${alias_arn_expected} and routing 100% traffic to new version ${new_version}
  
  ${aws} create-state-machine-alias --name "${alias_name}" --routing-configuration "[{\"stateMachineVersionArn\": \"${new_version}\", \"weight\":100}]"

  echo Done!
  exit 0
fi

# find the version to which the alias currently points (the current live version)
old_version=$(${aws} describe-state-machine-alias --state-machine-alias-arn $alias_arn --query "routingConfiguration[?weight==\`100\`].stateMachineVersionArn" --output text)

if [[ -z "${old_version}" ]]; then
  if [[ "${force}" = true ]]; then
    echo Force setting is true. Will force update to routing config for alias to point 100% to new version.
    update_routing "${new_version}" 100
    
    echo Alias ${alias_arn} now pointing 100% to ${new_version}.
    echo Done!
    exit 0
  else
    echo Alias ${alias_arn} does not have a routing config entry with 100% of the traffic. This means there might be a deploy in progress, so not starting another deploy at this time. >&2
    exit 1
  fi
fi

if [[ "${old_version}" == "${new_version}" ]]; then
  echo The alias already points to this version. No update necessary.
  exit 0
fi

echo Switching ${canary_percentage}% to new version ${new_version}
(( old_weight = 100 - ${canary_percentage} ))
update_routing "${new_version}" ${canary_percentage} "${old_version}" ${old_weight}

echo New version receiving ${canary_percentage}% of traffic.
echo Old version ${old_version} is still receiving ${old_weight}%.

if [[ ${#alarm_names[@]} -eq 0 ]]; then
  echo No alarm_names set. Skipping cloudwatch monitoring.
  echo Will sleep for ${canary_interval_seconds} seconds before routing 100% to new version.
  sleep ${canary_interval_seconds}
  echo Canary period complete. Switching 100% of traffic to new version...
else
  echo Checking if alarms fire for the next ${canary_interval_seconds} seconds.

  (( total_wait = canary_interval_seconds + $(date +%s) ))

  now=$(date +%s)
  while [[ ((${now} -lt ${total_wait})) ]]; do
    alarm_result=$(aws cloudwatch describe-alarms --alarm-names "${alarm_names[@]}" --state-value ALARM --alarm-types "CompositeAlarm" "MetricAlarm" --query "join(', ', [MetricAlarms, CompositeAlarms][].AlarmName)" --output text)

    if [[ ! -z "${alarm_result}" ]]; then
      echo The following alarms are in ALARM state: ${alarm_result}. Rolling back deploy. >&2
      update_routing "${old_version}" 100

      echo Rolled back to ${old_version}
      exit 1
    fi
  
    echo Monitoring alarms...no alarms have triggered.
    sleep ${alarm_polling_interval}
    now=$(date +%s)
  done

  echo No alarms detected during canary period. Switching 100% of traffic to new version...
fi

update_routing "${new_version}" 100

echo Version ${new_version} is now receiving 100% of traffic.

if [[ (("${history_max}" -eq 0 ))]]; then
  echo Version History deletion is disabled. Remember to prune your history, the default limit is 1000 versions.
  echo Done!
  exit 0
fi

echo Keep the last ${history_max} versions. Deleting any versions older than that...

# the results are sorted in descending order of the version creation time
version_history=$(${aws} list-state-machine-versions --state-machine-arn ${sm_arn} --max-results 1000 --query "join(\`\"\\n\"\`, stateMachineVersions[].stateMachineVersionArn)" --output text)

counter=0

while read line; do
  ((counter=${counter} + 1))

  if [[ (( ${counter} -gt ${history_max})) ]]; then
    echo Deleting old version ${line}
    ${aws} delete-state-machine-version --state-machine-version-arn ${line}
  fi
done <<< "${version_history}"

echo Done!
```

## Menggunakan AWS SDK untuk menerapkan versi mesin status baru
<a name="version-deploy-sdk"></a>

Contoh skrip di [aws-stepfunctions-examples](https://github.com/aws-samples/aws-stepfunctions-examples/tree/main/gradual-deploy)menunjukkan cara menggunakan AWS SDK untuk Python untuk secara bertahap mengalihkan lalu lintas dari versi sebelumnya ke versi baru mesin status. Anda dapat menggunakan contoh skrip ini atau memperbaruinya sesuai dengan kebutuhan Anda.

Skrip menunjukkan strategi penyebaran berikut:
+ **Canary** — Menggeser lalu lintas dalam dua peningkatan.

  Pada kenaikan pertama, sebagian kecil lalu lintas, misalnya, 10 persen digeser ke versi baru. Pada kenaikan kedua, sebelum interval waktu tertentu dalam hitungan detik berakhir, lalu lintas yang tersisa digeser ke versi baru. Peralihan ke versi baru untuk lalu lintas yang tersisa hanya terjadi jika tidak ada CloudWatch alarm yang dimatikan selama interval waktu yang ditentukan.
+  **Linear atau Rolling** — Menggeser lalu lintas ke versi baru dengan peningkatan yang sama dengan jumlah detik yang sama antara setiap kenaikan.

  Misalnya, jika Anda menentukan persentase kenaikan seperti **20** **600** detik, penyebaran ini meningkatkan lalu lintas sebesar 20 persen setiap 600 detik hingga versi baru menerima 100 persen lalu lintas. `--interval`

  Penerapan ini segera memutar kembali versi baru jika ada CloudWatch alarm yang dimatikan.
+ **Semua Sekaligus atau Biru/Hijau** — Menggeser 100 persen lalu lintas ke versi baru dengan segera. Penerapan ini memonitor versi baru dan memutarnya kembali secara otomatis ke versi sebelumnya jika ada CloudWatch alarm yang dimatikan.

## Gunakan AWS CloudFormation untuk menyebarkan versi mesin status baru
<a name="version-deploy-cfn"></a>

Contoh CloudFormation template berikut menerbitkan dua versi mesin negara bernama`MyStateMachine`. Ini menciptakan alias bernama`PROD`, yang menunjuk ke kedua versi ini, dan kemudian menyebarkan versi. `2`

Dalam contoh ini, 10 persen lalu lintas dialihkan ke versi `2` setiap lima menit sampai versi ini menerima 100 persen lalu lintas. Contoh ini juga menunjukkan bagaimana Anda dapat mengatur CloudWatch alarm. Jika salah satu alarm yang Anda atur masuk ke `ALARM` status, penerapan gagal dan segera berputar kembali.

```
MyStateMachine:
  Type: AWS::StepFunctions::StateMachine
  Properties:
    Type: STANDARD
    StateMachineName: MyStateMachine
    RoleArn: arn:aws:iam::account-id:role/myIamRole
    Definition:
      StartAt: PassState
      States:
        PassState:
          Type: Pass
          Result: Result
          End: true

MyStateMachineVersionA:
  Type: AWS::StepFunctions::StateMachineVersion
  Properties:
    Description: Version 1
    StateMachineArn: !Ref MyStateMachine

MyStateMachineVersionB:
  Type: AWS::StepFunctions::StateMachineVersion
  Properties:
    Description: Version 2
    StateMachineArn: !Ref MyStateMachine

PROD:
  Type: AWS::StepFunctions::StateMachineAlias
  Properties:
    Name: PROD
    Description: The PROD state machine alias taking production traffic.
    DeploymentPreference:
      StateMachineVersionArn: !Ref MyStateMachineVersionB
      Type: LINEAR
      Percentage: 10
      Interval: 5
      Alarms:
        # A list of alarms that you want to monitor. If any of these alarms trigger, rollback the deployment immediately by pointing 100 percent of traffic to the previous version.
        - !Ref CloudWatchAlarm1
        - !Ref CloudWatchAlarm2
```