

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

# Praktik terbaik untuk Step Functions
<a name="sfn-best-practices"></a>

**Mengelola status dan mengubah data**  
Pelajari tentang [Melewati data antar status dengan variabel](workflow-variables.md) dan [Mengubah data dengan JSONata](transforming-data.md).

Topik berikut adalah praktik terbaik untuk membantu Anda mengelola dan mengoptimalkan alur kerja Step Functions.

**Topics**
+ [Mengoptimalkan biaya menggunakan Alur Kerja Ekspres](#cost-opt-exp-workflows)
+ [Menandai mesin dan aktivitas status di Step Functions](#concepts-tagging)
+ [Menggunakan batas waktu untuk menghindari eksekusi alur kerja Step Functions yang macet](#sfn-stuck-execution)
+ [Menggunakan Amazon S3 ARNs alih-alih melewatkan muatan besar di Step Functions](#avoid-exec-failures)
+ [Memulai eksekusi baru untuk menghindari mencapai kuota riwayat di Step Functions](#bp-history-limit)
+ [Menangani pengecualian layanan Lambda sementara](#bp-lambda-serviceexception)
+ [Menghindari latensi saat melakukan polling untuk tugas kegiatan](#bp-activity-pollers)
+ [Menghindari batas ukuran kebijakan CloudWatch sumber daya](#bp-cwl)

## Mengoptimalkan biaya menggunakan Alur Kerja Ekspres
<a name="cost-opt-exp-workflows"></a>

Step Functions menentukan harga untuk alur kerja Standar dan Ekspres berdasarkan jenis alur kerja yang Anda gunakan untuk membangun mesin status Anda. Untuk mengoptimalkan biaya alur kerja tanpa server Anda, Anda dapat mengikuti salah satu atau kedua rekomendasi berikut:

[Untuk informasi tentang cara memilih jenis alur kerja Standar atau Ekspres memengaruhi penagihan, lihat AWS Step Functions Harga.](https://aws.amazon.com/step-functions/pricing/)

### Alur kerja Nest Express di dalam alur kerja Standar
<a name="cost-opt-exp-wflow-nesting"></a>

Step Functions menjalankan alur kerja yang memiliki durasi terbatas dan jumlah langkah. Beberapa alur kerja dapat menyelesaikan eksekusi dalam waktu singkat. Orang lain mungkin memerlukan kombinasi dari alur kerja yang berjalan lama dan high-event-rate alur kerja. Dengan Step Functions, Anda dapat membangun alur kerja yang besar dan kompleks dari beberapa alur kerja yang lebih kecil dan sederhana. 

Misalnya, untuk membangun alur kerja pemrosesan pesanan, Anda dapat menyertakan semua tindakan non-idempoten ke dalam alur kerja Standar. Ini dapat mencakup tindakan, seperti menyetujui pesanan melalui interaksi manusia dan memproses pembayaran. Anda kemudian dapat menggabungkan serangkaian tindakan idempoten, seperti mengirim pemberitahuan pembayaran dan memperbarui inventaris produk, dalam alur kerja Express. Anda dapat membuat sarang alur kerja Express ini dalam alur kerja Standar. Dalam contoh ini, alur kerja Standar dikenal sebagai *mesin status induk*. Alur kerja Express bersarang dikenal sebagai mesin *status anak*.

### Migrasikan alur kerja Standar ke alur kerja Ekspres
<a name="cost-opt-exp-wflow-conversion"></a>

Anda harus mempertimbangkan untuk memigrasikan alur kerja Standar ke alur kerja Express jika memenuhi persyaratan berikut:
+ Alur kerja Anda harus menyelesaikan eksekusi dalam waktu lima menit.
+ Alur kerja Anda sesuai dengan model *at-least-once*eksekusi, yang berarti setiap langkah dalam alur kerja dapat berjalan lebih dari satu kali.
+ Alur kerja Anda **tidak** menggunakan pola integrasi `.waitForTaskToken` atau `.sync` layanan.

**penting**  
Alur kerja ekspres menggunakan CloudWatch Log Amazon untuk merekam riwayat eksekusi. Anda akan dikenakan biaya tambahan saat menggunakan CloudWatch Log.

**Untuk memigrasikan alur kerja Standar ke alur kerja Express menggunakan konsol**

1. Buka [Konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/).

1. Pada halaman **mesin Negara**, pilih mesin status tipe Standar untuk membukanya.
**Tip**  
Dari daftar tarik-turun **Jenis apa pun**, pilih **Standar** untuk memfilter daftar mesin status dan hanya melihat alur kerja Standar.

1. Pilih **Salin ke yang baru**.

   Workflow Studio terbuka dalam [Mode desain](workflow-studio.md#wfs-interface-design-mode) menampilkan alur kerja mesin status yang Anda pilih.

1. (Opsional) Perbarui desain alur kerja.

1. Tentukan nama untuk mesin negara Anda. Untuk melakukan ini, pilih ikon edit di sebelah nama mesin status default **MyStateMachine**. Kemudian, dalam **konfigurasi mesin Negara**, tentukan nama di kotak **Nama mesin Negara**.

1. (Opsional) Dalam **konfigurasi mesin State**, tentukan pengaturan alur kerja lainnya, seperti jenis mesin status dan peran pelaksanaannya.

   Pastikan untuk **Type**, Anda memilih **Express**. Simpan semua pilihan default lainnya pada **pengaturan mesin State**.
**catatan**  
Jika Anda memigrasikan alur kerja Standar yang sebelumnya ditentukan di [AWS CDK](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-stepfunctions-readme.html)atauAWS SAM, Anda harus mengubah nilai `Type` dan `Resource` nama.

1. Dalam kotak dialog **Konfirmasi pembuatan peran**, pilih **Konfirmasi** untuk melanjutkan.

   Anda juga dapat memilih **Lihat pengaturan peran** untuk kembali ke **konfigurasi mesin Status**.
**catatan**  
Jika Anda menghapus IAM role yang Step Functions buat, Step Functions tidak dapat membuatnya kembali nanti. Demikian pula, jika Anda mengubah peran (misalnya, dengan menghapus Step Functions dari principal dalam kebijakan IAM), Step Functions tidak dapat memulihkan pengaturan aslinya nanti. 

Untuk informasi selengkapnya tentang praktik dan pedoman terbaik saat mengelola pengoptimalan biaya untuk alur kerja, lihat [Membangun](https://aws.amazon.com/blogs/compute/building-cost-effective-aws-step-functions-workflows/) alur kerja yang hemat biaya. AWS Step Functions

## Menandai mesin dan aktivitas status di Step Functions
<a name="concepts-tagging"></a>

AWS Step Functionsmendukung penandaan mesin status (baik Standar dan Express) dan aktivitas. Tag dapat membantu Anda melacak dan mengelola sumber daya Anda dan memberikan keamanan yang lebih baik dalam kebijakan AWS Identity and Access Management (IAM) Anda. Setelah menandai sumber daya Step Functions, Anda dapat mengelolanya denganAWS Resource Groups. Untuk mempelajari caranya, lihat [Panduan AWS Resource Groups Pengguna](https://docs.aws.amazon.com/ARG/latest/userguide/). 

Untuk otorisasi berbasis tag, sumber daya eksekusi mesin status seperti yang ditunjukkan pada contoh berikut mewarisi tag yang terkait dengan mesin status.

```
arn:{{partition}}:states:{{region}}:{{account-id}}:execution:{{<StateMachineName>:<ExecutionId>}}
```

Saat Anda memanggil [DescribeExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_DescribeExecution.html)atau lainnya APIs di mana Anda menentukan ARN sumber daya eksekusi, Step Functions menggunakan tag yang terkait dengan mesin status untuk menerima atau menolak permintaan saat melakukan otorisasi berbasis tag. Ini membantu Anda mengizinkan atau menolak akses ke eksekusi mesin status di tingkat mesin negara.

Untuk meninjau pembatasan yang terkait dengan penandaan sumber daya, lihat [Pembatasan terkait penandaan](service-quotas.md#sfn-limits-tagging).

### Penandaan untuk Alokasi Biaya
<a name="tagging-cost"></a>

Anda dapat menggunakan tag alokasi biaya untuk mengidentifikasi tujuan mesin negara dan mencerminkan organisasi itu dalam AWS tagihan Anda. Daftar untuk mendapatkan tagihan AWS akun Anda untuk menyertakan kunci tag dan nilai. Lihat [Menyiapkan Laporan Alokasi Biaya Bulanan](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/configurecostallocreport.html#allocation-report) di *Panduan AWS Billing Pengguna* untuk detail tentang pengaturan laporan.

Misalnya, Anda dapat menambahkan tag yang mewakili pusat biaya dan tujuan sumber daya Step Functions Anda, sebagai berikut.



- **`StateMachine1`**
  - **Kunci:** Cost Center / **Nilai:** 34567
  - **Kunci:** Application / **Nilai:** Image processing

- **`StateMachine2`**
  - **Kunci:** Cost Center / **Nilai:** 34567
  - **Kunci:** Application / **Nilai:** Rekognition processing



### Penandaan untuk Keamanan
<a name="tagging-security"></a>

IAM mendukung akses pengendalian ke sumber daya berdasarkan tanda. Untuk mengontrol akses berdasarkan tanda, Anda memberikan informasi tanda sumber daya di elemen syarat dari kebijakan IAM.

Misalnya, Anda dapat membatasi akses ke semua sumber daya Step Functions yang menyertakan tanda dengan kunci `environment` dan nilai `production`.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "states:TagResource",
                "states:DeleteActivity",
                "states:DeleteStateMachine",
                "states:StopExecution"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {"aws:ResourceTag/environment": "production"}
            }
        }
    ]
}
```

Untuk informasi selengkapnya, lihat [Mengendalikan Akses Menggunakan Tanda](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html) di Panduan Pengguna IAM.

### Mengelola tag di konsol Step Functions
<a name="tagging-console"></a>

Anda dapat melihat dan mengelola tag untuk mesin status Anda di konsol Step Functions. Dari halaman **Detail** mesin status, pilih **Tanda**.

### Mengelola tag dengan Step Functions API Actions
<a name="tagging-api"></a>

Untuk mengelola tanda menggunakan API Step Functions, gunakan tindakan API berikut:
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListTagsForResource.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListTagsForResource.html)
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_TagResource.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_TagResource.html)
+ [https://docs.aws.amazon.com/step-functions/latest/apireference/API_UntagResource.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_UntagResource.html)

## Menggunakan batas waktu untuk menghindari eksekusi alur kerja Step Functions yang macet
<a name="sfn-stuck-execution"></a>

Secara default, Amazon States Language tidak menentukan batas waktu untuk definisi mesin status. Tanpa timeout eksplisit, Step Functions sering kali hanya bergantung pada respons dari seorang pekerja aktivitas untuk mengetahui bahwa tugas selesai. Jika terjadi kesalahan dan `TimeoutSeconds` bidang tidak ditentukan untuk `Task` status `Activity` atau, eksekusi macet menunggu respons yang tidak akan pernah datang.

Untuk menghindari situasi ini, tentukan batas waktu yang wajar saat Anda membuat mesin `Task` di negara bagian Anda. Contoh: 

```
"ActivityState": {
  "Type": "Task",
  "Resource": "arn:aws:states:{{region}}:{{account-id}}:activity:HelloWorld",
  "TimeoutSeconds": 300,
  "Next": "NextState"
}
```

Jika Anda menggunakan [callback dengan token tugas (. waitForTaskToken)](connect-to-resource.md#connect-wait-token), kami menyarankan Anda menggunakan detak jantung dan menambahkan `HeartbeatSeconds` bidang dalam definisi `Task` status Anda. Anda dapat mengatur `HeartbeatSeconds` menjadi kurang dari batas waktu tugas sehingga jika alur kerja Anda gagal dengan kesalahan detak jantung maka Anda tahu itu karena kegagalan tugas alih-alih tugas membutuhkan waktu lama untuk diselesaikan.

```
{
  "StartAt": "Push to SQS",
  "States": {
    "Push to SQS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
      "HeartbeatSeconds": 600,
      "Parameters": {
        "MessageBody": { "myTaskToken.$": "$$.Task.Token" },
        "QueueUrl": "https://sqs.us-east-1.amazonaws.com/{{account-id}}/push-based-queue"
      },
      "ResultPath": "$.SQS",
      "End": true
    }
  }
}
```

Untuk informasi selengkapnya, lihat [Status alur kerja tugas](state-task.md) di dokumentasi Amazon States Language.

**catatan**  
Anda dapat mengatur timeout untuk mesin status Anda menggunakan kolom `TimeoutSeconds` di ketetapan Amazon States Language. Untuk informasi selengkapnya, lihat [Menyatakan struktur mesin di Amazon States Language untuk alur kerja Step Functions](statemachine-structure.md).

## Menggunakan Amazon S3 ARNs alih-alih melewatkan muatan besar di Step Functions
<a name="avoid-exec-failures"></a>

Eksekusi yang meneruskan muatan data yang besar antar status dapat dihentikan. Jika data yang Anda lewati antar status mungkin bertambah menjadi lebih dari 256 KiB, gunakan Amazon Simple Storage Service (Amazon S3) untuk menyimpan data, dan mengurai Amazon Resource Name (ARN) bucket dalam `Payload` parameter untuk mendapatkan nama bucket dan nilai kunci. Atau, sesuaikan implementasi Anda sehingga Anda meneruskan muatan yang lebih kecil dalam eksekusi Anda.

Dalam contoh berikut, mesin status meneruskan input ke AWS Lambda fungsi, yang memproses file JSON di bucket Amazon S3. Setelah Anda menjalankan mesin status ini, fungsi Lambda membaca isi file JSON, dan mengembalikan konten file sebagai output.

**Buat fungsi Lambda**  
Fungsi Lambda berikut bernama `{{pass-large-payload}}` membaca konten file JSON yang disimpan dalam bucket Amazon S3 tertentu.

**catatan**  
Setelah Anda membuat fungsi Lambda ini, pastikan Anda memberikan peran IAM-nya izin yang sesuai untuk membaca dari bucket Amazon S3. Misalnya, lampirkan ReadOnlyAccess izin **AmazonS3** ke peran fungsi Lambda.

```
import json
import boto3
import io
import os

s3 = boto3.client('s3')

def lambda_handler(event, context):
    event = event['Input']
    final_json = str()
    
    s3 = boto3.resource('s3')
    bucket = event['bucket'].split(':')[-1]
    filename = event['key']
    directory = "/tmp/{}".format(filename)
    
    s3.Bucket(bucket).download_file(filename, directory)
    
    with open(directory, "r") as jsonfile:
    
        final_json = json.load(jsonfile)
    
    os.popen("rm -rf /tmp")
    
    return final_json
```

**Buat mesin negara**  
Mesin status berikut memanggil fungsi Lambda yang sebelumnya Anda buat.

```
{  
   "StartAt":"Invoke Lambda function",
   "States":{  
      "Invoke Lambda function":{  
         "Type":"Task",
         "Resource":"arn:aws:states:::lambda:invoke",
         "Parameters":{  
            "FunctionName":"arn:aws:lambda:us-east-2:123456789012:function:{{pass-large-payload}}",
            "Payload":{  
               "Input.$":"$"
            }
         },
         "OutputPath": "$.Payload",
         "End":true
      }
   }
}
```

Daripada meneruskan sejumlah besar data dalam input, Anda dapat menyimpan data tersebut di bucket Amazon S3, dan meneruskan Amazon Resource Name (ARN) bucket dalam `Payload` parameter untuk mendapatkan nama bucket dan nilai kunci. Fungsi Lambda Anda kemudian dapat menggunakan ARN tersebut untuk mengakses data secara langsung. Berikut ini adalah contoh input untuk eksekusi mesin status, di mana data disimpan `data.json` dalam bucket Amazon S3 bernama. `{{amzn-s3-demo-large-payload-json}}`

```
{
  "key": "data.json",
  "bucket": "{{arn:aws:s3:::amzn-s3-demo-large-payload-json}}"
}
```

## Memulai eksekusi baru untuk menghindari mencapai kuota riwayat di Step Functions
<a name="bp-history-limit"></a>

AWS Step Functionsmemiliki kuota keras 25.000 entri dalam riwayat acara eksekusi. Ketika eksekusi mencapai 24.999 peristiwa, ia menunggu acara berikutnya terjadi.
+ Jika nomor acara 25.000 adalah`ExecutionSucceeded`, eksekusi selesai dengan sukses.
+ Jika nomor acara 25.000 tidak`ExecutionSucceeded`, `ExecutionFailed` peristiwa dicatat dan eksekusi mesin status gagal karena mencapai batas riwayat

Untuk menghindari mencapai kuota ini untuk eksekusi jangka panjang, Anda dapat mencoba salah satu solusi berikut:
+ [Gunakan status Peta dalam mode Terdistribusi](state-map-distributed.md). Dalam mode ini, `Map` status menjalankan setiap iterasi sebagai eksekusi alur kerja anak, yang memungkinkan konkurensi tinggi hingga 10.000 eksekusi alur kerja anak paralel. Setiap eksekusi alur kerja anak memiliki riwayat eksekusi terpisah sendiri dari alur kerja induk.
+ Mulai eksekusi mesin status baru langsung dari `Task` keadaan eksekusi yang sedang berjalan. Untuk memulai eksekusi alur kerja bersarang seperti itu, gunakan tindakan `[StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)` API Fungsi Langkah di mesin status induk bersama dengan parameter yang diperlukan. Untuk informasi selengkapnya tentang penggunaan alur kerja bersarang, lihat [Mulai eksekusi alur kerja dari status tugas di Step Functions](concepts-nested-workflows.md) atau [Menggunakan tindakan Step Functions API untuk melanjutkan tutorial eksekusi baru](tutorial-continue-new.md).
**Tip**  
*Untuk menerapkan contoh alur kerja bersarang, lihat [Mengoptimalkan biaya](https://catalog.workshops.aws/stepfunctions/nested-workflow) di Workshop. AWS Step Functions*
+ Terapkan pola yang menggunakan AWS Lambda fungsi yang dapat memulai eksekusi baru mesin status Anda untuk membagi pekerjaan yang sedang berlangsung di beberapa eksekusi alur kerja. Untuk informasi selengkapnya, lihat tutorial [Menggunakan fungsi Lambda untuk melanjutkan eksekusi baru di Step Functions](tutorial-use-lambda-cont-exec.md).

## Menangani pengecualian layanan Lambda sementara
<a name="bp-lambda-serviceexception"></a>

AWS Lambdaterkadang dapat mengalami kesalahan layanan sementara. Dalam hal ini, memanggil Lambda menghasilkan kesalahan 500, `ClientExecutionTimeoutException` seperti,, `ServiceException``AWSLambdaException`, atau. `SdkClientException` Sebagai praktik terbaik, tangani pengecualian ini secara proaktif di mesin status Anda untuk `Retry` memanggil fungsi Lambda, atau untuk `Catch` kesalahan.

Kesalahan Lambda dilaporkan sebagai `Lambda.{{ErrorName}}`. Untuk mencoba lagi kesalahan pengecualian layanan Lambda, Anda dapat menggunakan kode `Retry` berikut.

```
"Retry": [ {
   "ErrorEquals": [ "Lambda.ClientExecutionTimeoutException", "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException"],
   "IntervalSeconds": 2,
   "MaxAttempts": 6,
   "BackoffRate": 2
} ]
```

**catatan**  
Kesalahan yang tidak tertangani dalam runtime Lambda secara historis dilaporkan hanya sebagai. `Lambda.Unknown` Di runtime yang lebih baru, batas waktu dilaporkan seperti `Sandbox.Timedout` pada keluaran kesalahan.  
Ketika Lambda melebihi jumlah maksimum pemanggilan, kesalahan yang dilaporkan akan terjadi. `Lambda.TooManyRequestsException`  
Cocokkan `Lambda.Unknown``Sandbox.Timedout`,, dan `States.TaskFailed` untuk menangani kemungkinan kesalahan. Anda juga dapat menggunakan`States.ALL`, tetapi harus sendiri dan di akhir daftar.  
Untuk informasi selengkapnya tentang kesalahan `Handled` dan `Unhandled` Lambda, lihat `FunctionError` di [Panduan Developer AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_ResponseSyntax). 

Untuk informasi selengkapnya, lihat berikut ini:
+ [Mencoba kembali setelah kesalahan](concepts-error-handling.md#error-handling-retrying-after-an-error)
+ [Menangani kondisi kesalahan di mesin status Step Functions](tutorial-handling-error-conditions.md)
+ [Kesalahan Panggilan Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_Errors)

## Menghindari latensi saat melakukan polling untuk tugas kegiatan
<a name="bp-activity-pollers"></a>

API `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)` dirancang untuk menyediakan [https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-taskToken](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html#StepFunctions-GetActivityTask-response-taskToken) *satu kali*. Jika `taskToken` dijatuhkan saat berkomunikasi dengan pekerja aktivitas, sejumlah permintaan `GetActivityTask` dapat diblokir selama 60 detik menunggu respons hingga `GetActivityTask` waktu habis. 

Jika Anda hanya memiliki sejumlah kecil polling yang menunggu respons, mungkin semua permintaan akan mengantre di belakang permintaan yang diblokir dan berhenti. Namun, jika Anda memiliki sejumlah besar polling yang belum diproses untuk setiap aktivitas Amazon Resource Name (ARN), dan beberapa persentase permintaan Anda terjebak menunggu, akan ada banyak lagi yang masih bisa mendapatkan `taskToken` dan mulai memproses tugas. 

Untuk sistem produksi, kami merekomendasikan setidaknya 100 polling terbuka per aktivitas ARN di setiap titik waktu. Jika satu polling diblokir, dan sebagian dari polling tersebut mengantre di belakangnya, masih banyak lagi permintaan yang akan menerima `taskToken` untuk memproses tugas sementara `GetActivityTask` diblokir. 

Untuk menghindari masalah latensi seperti ini saat melakukan polling untuk tugas:
+ Terapkan poller Anda sebagai utas terpisah dari tugas dalam pelaksanaan pekerja aktivitas Anda.
+ Miliki setidaknya 100 polling terbuka per aktivitas ARN di setiap titik waktu.
**catatan**  
Penskalaan ke 100 polling terbuka per ARN bisa mahal. Misalnya, 100 polling fungsi Lambda per ARN 100 kali lebih mahal daripada memiliki fungsi Lambda tunggal dengan 100 utas polling. Untuk mengurangi latensi *dan* meminimalkan biaya, gunakan bahasa yang memiliki asinkron I/O, dan terapkan beberapa utas polling per pekerja. Untuk pekerja aktivitas contoh tempat utas poller terpisah dari utas tugas, lihat [Contoh: Pekerja Aktivitas di Ruby](concepts-activities.md#example-ruby-activity-worker). 

Untuk informasi selengkapnya tentang aktivitas dan pekerja aktivitas lihat [Pelajari tentang Aktivitas di Step Functions](concepts-activities.md).

## Menghindari batas ukuran kebijakan CloudWatch sumber daya
<a name="bp-cwl"></a>

Saat Anda membuat mesin status dengan logging, atau memperbarui mesin status yang ada untuk mengaktifkan logging, Step Functions harus memperbarui kebijakan sumber daya Log Anda CloudWatch dengan grup log yang Anda tentukan. CloudWatch Kebijakan sumber daya log dibatasi hingga 5.120 karakter.

Saat CloudWatch Log mendeteksi bahwa kebijakan mendekati batas ukuran, CloudWatch Log secara otomatis mengaktifkan pencatatan untuk grup log yang dimulai`/aws/vendedlogs/`.

Anda dapat mengawali nama grup CloudWatch log Log `/aws/vendedlogs/` untuk menghindari batas ukuran kebijakan sumber daya CloudWatch Log. Jika Anda membuat grup log di konsol Step Functions, nama grup log yang disarankan sudah akan diawali dengan`/aws/vendedlogs/states`. 

CloudWatch Log juga memiliki kuota sepuluh kebijakan sumber daya per wilayah, per akun. Jika Anda mencoba mengaktifkan logging pada mesin status yang sudah memiliki sepuluh kebijakan sumber daya CloudWatch Log di wilayah untuk akun, mesin status tidak akan dibuat atau diperbarui. Untuk informasi selengkapnya tentang kuota logging, lihat [Kuota CloudWatch log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html). 

Jika Anda mengalami masalah saat mengirim log ke CloudWatch Log, lihat[Troubleshooting state machine logging to CloudWatch Logs](cw-logs.md#troubleshooting-logging-to-cloudwatch).