

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

# Pelajari tentang Aktivitas di Step Functions
<a name="concepts-activities"></a>

Dengan aktivitas Step Functions, Anda dapat mengatur tugas di mesin status tempat pekerjaan aktual dilakukan oleh *pekerja* yang berjalan di luar Step Functions. Misalnya Anda dapat menjalankan program pekerja di Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Container Service (Amazon ECS) Service Elastic Container (Amazon ECS), atau bahkan perangkat seluler.

## Gambaran umum
<a name="activities-overview"></a>

DalamAWS Step Functions, aktivitas adalah cara untuk mengaitkan kode yang berjalan di suatu tempat (dikenal sebagai *pekerja aktivitas*) dengan tugas tertentu di mesin status. Anda dapat membuat aktivitas menggunakan konsol Step Functions, atau dengan memanggil `[CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`. Ini menyediakan Amazon Resource Name (ARN) untuk status tugas Anda. Gunakan ARN ini untuk melakukan poll pada status tugas untuk bekerja di pekerja aktivitas Anda. 

**catatan**  
Aktivitas tidak memiliki versi dan diharapkan kompatibel dengan versi yang lebih lama. Jika Anda harus membuat perubahan yang tidak kompatibel dengan versi yang lebih lama, buat aktivitas *baru* di Step Functions menggunakan nama yang unik.

Pekerja aktivitas dapat berupa aplikasi yang berjalan pada EC2 instance Amazon, AWS Lambda fungsi, perangkat seluler: aplikasi apa pun yang dapat membuat koneksi HTTP, dihosting di mana saja. Ketika Step Functions mencapai status tugas aktivitas, alur kerja menunggu agar pekerja aktivitas melakukan polling untuk tugas. Pekerja aktivitas melakukan polling pada Step Functions dengan menggunakan `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`, dan mengirim ARN untuk aktivitas terkait. `GetActivityTask` mengembalikan respons termasuk `input` (string input JSON untuk tugas) dan [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) (pengidentifikasi unik untuk tugas). Setelah pekerja aktivitas menyelesaikan pekerjaannya, laporan keberhasilan atau kegagalan dapat diberikan menggunakan `[SendTaskSuccess](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)` atau `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`. Kedua panggilan ini menggunakan `taskToken` yang disediakan oleh `GetActivityTask` untuk mengaitkan hasilnya dengan tugas tersebut.

### APIs Terkait dengan Tugas Kegiatan
<a name="activities-api"></a>

Step Functions menyediakan APIs untuk membuat dan mencantumkan aktivitas, meminta tugas, dan untuk mengelola aliran mesin status Anda berdasarkan hasil pekerja Anda.

Berikut ini adalah Step Functions APIs yang terkait dengan kegiatan: 
+ `[CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`
+ `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`
+ `[ListActivities](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ListActivities.html)`
+ `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)`
+ `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)`
+ `[SendTaskSuccess](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)`

**catatan**  
Polling untuk tugas aktivitas dengan `GetActivityTask` dapat menyebabkan latensi dalam beberapa implementasi. Lihat [Menghindari latensi saat melakukan polling untuk tugas kegiatan](sfn-best-practices.md#bp-activity-pollers).

## Menunggu tugas aktivitas Selesai
<a name="activities-wait"></a>

Konfigurasikan berapa lama status menunggu dengan mengatur `TimeoutSeconds` dalam ketentuan tugas. Agar tugas tetap aktif dan menunggu, kirim heartbeat secara berkala dari pekerja aktivitas Anda menggunakan `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` dalam waktu yang dikonfigurasi di `TimeoutSeconds`. Dengan mengonfigurasi durasi waktu habis yang panjang dan mengirim heartbeat secara aktif, aktivitas di Step Functions dapat menunggu hingga satu tahun untuk menyelesaikan eksekusi. 

Misalnya, jika Anda memerlukan alur kerja yang menunggu outcome proses yang panjang, lakukan hal berikut:

1. Buat aktivitas menggunakan konsol tersebut, atau dengan menggunakan `[CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html)`. Perhatikan ARN aktivitas.

1. Referensikan bahwa ARN di status tugas aktivitas dalam ketentuan mesin status dan atur `TimeoutSeconds`.

1. Implementasikan pekerja aktivitas yang melakukan polling untuk bekerja menggunakan `[GetActivityTask](https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetActivityTask.html)`, yang mereferensikan ARN aktivitas tersebut. 

1. Gunakan `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` secara berkala dalam waktu yang Anda tetapkan di `HeartbeatSeconds` dalam ketentuan tugas mesin status Anda untuk menjaga tugas dari waktu habis.

1. Mulai eksekusi mesin status Anda.

1. Mulai proses pekerja aktivitas Anda.

Eksekusi berhenti di status tugas aktivitas dan menunggu pekerja aktivitas Anda untuk melakukan polling untuk tugas. Setelah `taskToken` disediakan untuk pekerja aktivitas Anda, alur kerja Anda akan menunggu untuk `[SendTaskSuccess](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)` atau `[SendTaskFailure](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html)` untuk memberikan status. Jika eksekusi tidak menerima salah satu dari hal ini atau panggilan `[SendTaskHeartbeat](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)` sebelum waktu dikonfigurasi dalam `TimeoutSeconds`, eksekusi akan gagal dan riwayat eksekusi akan berisi peristiwa `ExecutionTimedOut`.

## Contoh: Pekerja Aktivitas di Ruby
<a name="example-ruby-activity-worker"></a>

Contoh kode pekerja aktivitas berikut mengimplementasikan pola konsumen-produsen dengan jumlah thread yang dapat dikonfigurasi untuk poller dan pekerja aktivitas. Utas poller terus-menerus melakukan polling panjang tugas aktivitas di Step Functions. Saat tugas aktivitas diambil, tugas tersebut akan diteruskan melalui antrean pemblokiran terbatas untuk diambil oleh thread aktivitas.
+ Untuk informasi lebih lanjut, lihat [Referensi API AWS SDK untuk Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/).
+ Untuk mengunduh kode ini dan sumber daya terkait, lihat repositori [step-functions-ruby-activity-worker](https://github.com/aws-samples/step-functions-ruby-activity-worker) di. GitHub

Kode berikut adalah titik masuk utama untuk contoh ini pekerja aktivitas Ruby.

```
require_relative '../lib/step_functions/activity'
    credentials = Aws::SharedCredentials.new
    region = 'us-west-2'
    activity_arn = 'ACTIVITY_ARN'

    activity = StepFunctions::Activity.new(
      credentials: credentials,
      region: region,
      activity_arn: activity_arn,
      workers_count: 1,
      pollers_count: 1,
      heartbeat_delay: 30
    )

    # Start method block contains your custom implementation to process the input 
    activity.start do |input|
      { result: :SUCCESS, echo: input['value'] }                    
    end
```

Anda harus menentukan ARN dan wilayah aktivitas Anda. Kode ini mencakup default yang dapat Anda atur, seperti jumlah utas dan penundaan detak jantung.


| Item | Deskripsi | 
| --- | --- | 
|  `require_relative`  |  Jalur relatif ke kode pekerja aktivitas contoh berikut.  | 
|  `region`  |  AWSWilayah aktivitas Anda.  | 
|  `workers_count`  |  Jumlah thread untuk pekerja aktivitas Anda. 10 hingga 20 thread harusnya sudah cukup untuk sebagian besar implementasi. Semakin lama waktu yang dibutuhkan aktivitas yang untuk memproses, semakin banyak thread yang dibutuhkan. Sebagai perkiraan, kalikan jumlah aktivitas proses per detik dengan latensi pemrosesan aktivitas persentil ke-99, dalam detik.  | 
|  `pollers_count`  |  Jumlah thread untuk poller Anda. 10 hingga 20 thread harusnya sudah cukup untuk sebagian besar implementasi.  | 
|  `heartbeat_delay`  |  Penundaan dalam detik antara heartbeat.  | 
| input | Logika implementasi aktivitas Anda. | 

## Langkah Berikutnya
<a name="activities-nextsteps"></a>

Untuk tampilan yang lebih detail dalam pembuatan mesin status yang menggunakan pekerja aktivitas, lihat:
+ [Membuat mesin status Aktivitas menggunakan Step Functions](tutorial-creating-activity-state-machine.md)