

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

# Status alur kerja tugas
<a name="state-task"></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).

Status `Task` (`"Type": "Task"`) mewakili satu unit kerja yang dilakukan oleh mesin status. Tugas melakukan pekerjaan dengan menggunakan aktivitas atau AWS Lambda fungsi, dengan mengintegrasikan dengan [dukungan](supported-services-awssdk.md#supported-services-awssdk-list) lain Layanan AWS, atau dengan menjalankan API HTTPS, seperti Stripe.

[Amazon States Language](concepts-amazon-states-language.md) mewakili tugas dengan menyetel tipe status ke `Task` dan dengan menyediakan tugas dengan Nama Sumber Daya Amazon (ARN) aktivitas, fungsi Lambda, atau titik akhir HTTPS API. 

**Memanggil fungsi dengan Argumen JSONata **

Definisi status Tugas berikut (JSONata) memanggil fungsi Lambda bernama. `priceWatcher`

Perhatikan penggunaan JSONata ekspresi untuk menanyakan data masukan yang akan digunakan dalam Argumen dan hasil tugas di bidang penetapan.

```
"Get Current Price": {
  "Type": "Task",
  "QueryLanguage" : "JSONata",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Next": "Check Price",
  "Arguments": {
    "Payload": {
    "product": "{% $states.context.Execution.Input.product %}"
    },
    "FunctionName": "arn:aws:lambda:<region>:account-id:function:priceWatcher:$LATEST"
  },
  "Assign": {
    "currentPrice": "{% $states.result.Payload.current_price %}"
  }
}
```

**Memanggil fungsi dengan Parameter JSONPath **

Definisi status Tugas berikut (JSONPath) memanggil fungsi Lambda bernama. `HelloFunction`

```
"Lambda Invoke": {
  "Type": "Task",
  "Resource": "arn:aws:states:::lambda:invoke",
  "Parameters": {
    "Payload.$": "$",
    "FunctionName": "arn:aws:lambda:region:account-id:function:HelloFunction:$LATEST"
  },
  "End": true
}
```

## Tipe tugas
<a name="task-types"></a>

Step Functions mendukung jenis tugas berikut yang dapat Anda tentukan dalam definisi status Tugas:
+  [Aktivitas](#state-task-activity) 
+  [Fungsi Lambda](#state-task-lambda) 
+  [A didukung Layanan AWS](#state-task-connector) 
+ [Tugas HTTP](call-https-apis.md)

Anda menentukan jenis tugas dengan memberikan ARN di `Resource` bidang definisi status Tugas. Contoh berikut menunjukkan sintaks `Resource` bidang. Semua jenis Tugas kecuali yang memanggil API HTTPS, gunakan sintaks berikut. Untuk informasi tentang sintaks Tugas HTTP, lihat[Panggil HTTPS APIs dalam alur kerja Step Functions](call-https-apis.md).

Dalam definisi status Tugas Anda, ganti teks yang dicetak miring dalam sintaks berikut dengan informasi khusus sumber daya. AWS 

```
arn:partition:service:region:account:task_type:name
```

Daftar berikut menjelaskan komponen individual dalam sintaks ini:
+  `partition`adalah AWS Step Functions partisi yang digunakan, paling umum`aws`.
+  `service`menunjukkan yang Layanan AWS digunakan untuk menjalankan tugas, dan dapat menjadi salah satu dari nilai-nilai berikut:
  +  `states` untuk [aktivitas](#state-task-activity).
  +  `lambda` untuk [Fungsi Lambda](#state-task-lambda). Jika Anda mengintegrasikan dengan yang lain Layanan AWS, misalnya, Amazon SNS atau Amazon DynamoDB, gunakan atau. `sns` `dynamodb`
+  `region`adalah [kode AWS Region](https://docs.aws.amazon.com/general/latest/gr/rande.html) di mana aktivitas Step Functions atau jenis mesin status, fungsi Lambda, atau AWS sumber daya lainnya telah dibuat.
+  `account`adalah Akun AWS ID di mana Anda telah mendefinisikan sumber daya.
+  `task_type` adalah tipe tugas untuk dijalankan. Ini bisa menjadi salah satu nilai berikut:
  +  `activity` – [Aktivitas](#state-task-activity).
  +  `function` – [Fungsi Lambda](#state-task-lambda).
  +  `servicename` – Nama layanan terhubung yang didukung (lihat [Mengintegrasikan layanan dengan Step Functions](integrate-optimized.md)).
+  `name` adalah nama sumber daya terdaftar (nama aktivitas, nama fungsi Lambda, atau tindakan API layanan).

**catatan**  
Step Functions tidak mendukung referensi ARNs di seluruh partisi atau wilayah. Misalnya, tidak `aws-cn` dapat memanggil tugas di `aws` partisi, dan sebaliknya.

Bagian berikut menyediakan detail selengkapnya tentang setiap tipe tugas.

### Aktifitas
<a name="state-task-activity"></a>

Aktivitas menunjukkan pekerja (proses atau thread), diimplementasikan dan di-hosting oleh Anda, yang melakukan tugas tertentu. Aktivitas hanya didukung oleh Alur Kerja standar, tidak Alur Kerja Ekspres.

Aktivitas `Resource` ARNs menggunakan sintaks berikut.

```
arn:partition:states:region:account:activity:name
```

**catatan**  
Anda harus membuat aktivitas dengan Step Functions (menggunakan aksi API [CreateActivity](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateActivity.html), atau [konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/)) sebelum digunakan pertama kali.

Untuk informasi selengkapnya tentang cara membuat aktivitas dan mengimplementasikan pekerja, lihat [Aktivitas](concepts-activities.md).

### Fungsi Lambda
<a name="state-task-lambda"></a>

Tugas Lambda menjalankan fungsi menggunakan. AWS Lambda Untuk menentukan fungsi Lambda, gunakan ARN dari fungsi Lambda di bidang `Resource`.

Bentuk `Resource` bidang fungsi Lambda Anda bervariasi berdasarkan jenis integrasi.

Untuk integrasi AWS SDK standar dengan fungsi Lambda, `Resource` bidang akan berisi nilai berikut:

```
"arn:aws:states:::aws-sdk:lambda:invoke"
```

**Sebaiknya** gunakan integrasi yang dioptimalkan untuk fungsi Lambda Anda, menggunakan nilai berikut untuk bidang ini`Resource`:

```
"arn:aws:states:::lambda:invoke"
```

Definisi `Task` status berikut menunjukkan contoh integrasi yang dioptimalkan dengan fungsi Lambda bernama `HelloWorld` using. JSONata

```
"Optimized call to Lambda function (JSONata)": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Output": "{% $states.result.Payload %}",
      "Arguments": {
        "FunctionName": "arn:aws:lambda:region:account-id:function:HelloWorld:$LATEST",
        "Payload": {
          "key": "{% $states.input.myKey %}"
        }
      },
  "Next": "NextState"
}
```

### A didukung Layanan AWS
<a name="state-task-connector"></a>

Ketika Anda mereferensikan sumber daya yang terhubung, Step Functions langsung memanggil tindakan API layanan yang didukung. Tentukan layanan dan tindakan di bidang `Resource`.

Layanan yang terhubung `Resource` ARNs menggunakan sintaks berikut.

```
arn:partition:states:region:account-id:servicename:APIname
```

**catatan**  
Untuk membuat koneksi sinkron ke sumber daya yang terhubung, tambahkan *APIname* entri di ARN`.sync`. Untuk informasi selengkapnya, lihat [Integrasi layanan ](integrate-services.md).

Contoh:

```
{
 "StartAt": "BATCH_JOB",
 "States": {
   "BATCH_JOB": {
     "Type": "Task",
     "Resource": "arn:aws:states:::batch:submitJob.sync",
     "Parameters": {  
       "JobDefinition": "preprocessing",
       "JobName": "PreprocessingBatchJob",
       "JobQueue": "SecondaryQueue",
       "Parameters.$": "$.batchjob.parameters",
       "RetryStrategy": {
          "attempts": 5
        }
     },
     "End": true
    }
  }
}
```

## Bidang status tugas
<a name="task-state-fields"></a>

Selain [bidang status umum](statemachine-structure.md#amazon-states-language-common-fields), status `Task` mempunyai bidang berikut.

** `Resource` (Wajib)**  
URI, terutama ARN yang secara unik mengidentifikasi tugas tertentu untuk mengeksekusi.

**`Arguments`(Opsional, JSONata hanya)**  
Digunakan untuk menyampaikan informasi ke tindakan API dari sumber daya yang terhubung. Nilai dapat mencakup JSONata ekspresi. Untuk informasi selengkapnya, lihat [Mengubah data dengan Step JSONata Functions](transforming-data.md).

**`Output`(Opsional, JSONata hanya)**  
Digunakan untuk menentukan dan mengubah output dari negara. Ketika ditentukan, nilai mengesampingkan default output status.   
Bidang output menerima nilai JSON apa pun (objek, array, string, angka, boolean, null). Nilai string apa pun, termasuk yang ada di dalam objek atau array, akan dievaluasi JSONata seolah-olah dikelilingi oleh karakter \$1%%\$1.  
 Output juga menerima JSONata ekspresi secara langsung, misalnya: “Output”: “\$1% jsonata expression%\$1”   
Untuk informasi selengkapnya, lihat [Pemrosesan Input dan Output](concepts-input-output-filtering.md).

**`Parameters`(Opsional, JSONPath hanya)**  
Digunakan untuk menyampaikan informasi ke tindakan API dari sumber daya yang terhubung. Parameter dapat menggunakan campuran JSON statis dan [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/). Untuk informasi selengkapnya, lihat [Meneruskan parameter ke API layanan di Step Functions](connect-parameters.md).

**`Credentials` (Opsional)**  
Menentukan peran target peran eksekusi mesin negara harus mengambil alih sebelum memanggil yang ditentukan. `Resource` Atau, Anda juga dapat menentukan JSONPath nilai atau [fungsi intrinsik](intrinsic-functions.md) yang menyelesaikan ARN peran IAM saat runtime berdasarkan input eksekusi. Jika Anda menentukan JSONPath nilai, Anda harus mengawalnya dengan `$.` notasi.  
Untuk contoh menggunakan bidang ini di `Task` negara bagian, lihat[Contoh bidang Kredensial status tugas](#task-state-example-credentials). Untuk contoh menggunakan bidang ini untuk mengakses AWS sumber daya lintas akun dari mesin status Anda, lihat[Mengakses AWS sumber daya lintas akun di Step Functions](tutorial-access-cross-acct-resources.md).  
Bidang ini didukung oleh [Tipe tugas](#task-types) yang menggunakan [fungsi Lambda dan layanan](#state-task-lambda) [yang didukung AWS](integrate-services.md).

** `ResultPath`(Opsional, JSONPath hanya)**  
Menentukan tempat (dalam input) untuk meletakkan hasil eksekusi tugas yang ditentukan di `Resource`. Input kemudian difilter sebagaimana ditentukan oleh bidang `OutputPath` (jika ada) sebelum digunakan sebagai output status. Untuk informasi selengkapnya, lihat [Pemrosesan Input dan Output](concepts-input-output-filtering.md).

** `ResultSelector`(Opsional, JSONPath hanya)**  
Teruskan koleksi pasangan nilai kunci, tempat nilai-nilai bersifat statis atau dipilih dari hasil. Untuk informasi selengkapnya, lihat [ResultSelector](input-output-inputpath-params.md#input-output-resultselector).

** `Retry` (Opsional)**  
Array objek yang disebut Retriers, yang menentukan kebijakan percobaan ulang jika status menemukan kesalahan waktu aktif. Untuk informasi selengkapnya, lihat [Contoh mesin negara menggunakan Coba Ulang dan Tangkap](concepts-error-handling.md#error-handling-examples).

** `Catch` (Opsional)**  
Array objek, disebut Catch yang menentukan status fallback. Status ini dijalankan jika status menemukan kesalahan waktu aktif dan kebijakan percobaan ulang habis atau tidak ditentukan. Untuk informasi selengkapnya, lihat [Status Fallback](concepts-error-handling.md#error-handling-fallback-states).

** `TimeoutSeconds` (Opsional)**  
Menentukan waktu maksimum aktivitas atau tugas dapat berjalan sebelum waktu habis dengan [States.Timeout](concepts-error-handling.md#statestimeout) kesalahan dan gagal. Nilai batas waktu harus positif, bilangan bulat bukan nol. Nilai default-nya adalah `99999999`.  
Hitungan batas waktu dimulai saat acara mulai dijalankan, seperti kapan`TaskStarted`,`ActivityStarted`, atau `LambdaFunctionStarted` peristiwa dicatat dalam riwayat peristiwa eksekusi. Untuk Aktivitas, penghitungan dimulai saat `GetActivityTask` menerima token dan `ActivityStarted` dicatat dalam riwayat peristiwa eksekusi.  
Saat tugas dimulai, Step Functions menunggu respons sukses atau gagal dari tugas atau pekerja aktivitas dalam `TimeoutSeconds` durasi yang ditentukan. Jika pekerja tugas atau aktivitas gagal merespons dalam waktu ini, Step Functions menandai eksekusi alur kerja sebagai gagal.  
Batas waktu tugas HTTP memiliki maksimum 60 detik, bahkan jika `TimeoutSeconds` melebihi batas itu. Lihat [Kuota yang terkait dengan HTTP Task](service-quotas.md#service-limits-http-task)

** `TimeoutSecondsPath`(Opsional, JSONPath hanya)**  
 Jika Anda ingin memberikan nilai waktu habis dinamis dari input status menggunakan jalur referensi, gunakan `TimeoutSecondsPath`. Ketika diselesaikan, jalur referensi harus memilih bidang yang nilainya adalah bilangan bulat positif.  
Suatu `Task` negara tidak dapat mencakup keduanya `TimeoutSeconds` dan`TimeoutSecondsPath`. Batas waktu tugas HTTP memiliki maksimum 60 detik, bahkan jika `TimeoutSecondsPath` nilainya melebihi batas itu.

** `HeartbeatSeconds` (Opsional)**  
Menentukan frekuensi sinyal detak jantung yang dikirim oleh pekerja aktivitas selama pelaksanaan tugas. Detak jantung menunjukkan bahwa suatu tugas masih berjalan dan perlu lebih banyak waktu untuk menyelesaikannya. Detak jantung mencegah aktivitas atau tugas dari waktu habis dalam durasi. `TimeoutSeconds`  
`HeartbeatSeconds`harus berupa nilai bilangan bulat positif, bukan nol kurang dari nilai `TimeoutSeconds` bidang. Nilai default-nya adalah `99999999`. Jika lebih banyak waktu dari detik yang ditentukan berlalu antara detak jantung dari tugas, status Tugas gagal dengan kesalahan. [States.Timeout](concepts-error-handling.md#statestimeout)  
Untuk Aktivitas, penghitungan dimulai saat `GetActivityTask` menerima token dan `ActivityStarted` dicatat dalam riwayat peristiwa eksekusi.

** `HeartbeatSecondsPath`(Opsional, JSONPath hanya)**  
Jika Anda ingin memberikan nilai heartbeat secara dinamis dari input status menggunakan jalur referensi, gunakan `HeartbeatSecondsPath`. Ketika diselesaikan, jalur referensi harus memilih bidang yang nilainya adalah bilangan bulat positif.  
Suatu `Task` negara tidak dapat mencakup keduanya `HeartbeatSeconds` dan`HeartbeatSecondsPath`.

Status `Task` harus mengatur salah satu bidang `End` ke `true` jika status mengakhiri eksekusi, atau harus memberikan status di bidang `Next` yang dijalankan ketika status `Task` selesai.

## Contoh definisi status tugas
<a name="task-state-example"></a>

Contoh berikut menunjukkan bagaimana Anda dapat menentukan definisi status Tugas berdasarkan kebutuhan Anda.
+ [Menentukan batas waktu status Tugas dan interval detak jantung](#task-state-example-timeouts)
  + [Contoh notifikasi waktu habis dan heartbeat statis](#task-state-example-static)
  + [Contoh notifikasi waktu habis dan heartbeat tugas dinamis](#task-state-example-dynamic)
+ [Menggunakan bidang Credentials](#task-state-example-credentials)
  + [Menentukan peran IAM hard-code ARN](#example-credentials-specify-role-arn)
  + [Menentukan JSONPath sebagai peran IAM ARN](#example-credentials-specify-dynamic-jsonpath)
  + [Menentukan fungsi intrinsik sebagai peran IAM ARN](#example-credentials-specify-dynamic-intrinsic-function)

### Interval waktu habis dan heartbeat status tugas
<a name="task-state-example-timeouts"></a>

Ini adalah praktik terbaik untuk mengatur nilai waktu habis dan interval heartbeat untuk aktivitas yang berjalan lama. Hal ini dapat dilakukan dengan menentukan nilai batas waktu dan heartbeat, atau dengan mengaturnya secara dinamis.

#### Contoh notifikasi waktu habis dan heartbeat statis
<a name="task-state-example-static"></a>

Saat `HelloWorld` selesai, status berikutnya (di sini disebut `NextState`) akan dijalankan.

Jika tugas ini gagal diselesaikan dalam waktu 300 detik, atau tidak mengirim notifikasi heartbeat dalam interval 60 detik, tugas ditandai sebagai `failed`. 

```
"ActivityState": {
  "Type": "Task",
  "Resource": "arn:aws:states:region:123456789012:activity:HelloWorld",
  "TimeoutSeconds": 300,
  "HeartbeatSeconds": 60,
  "Next": "NextState"
}
```

#### Contoh notifikasi waktu habis dan heartbeat tugas dinamis
<a name="task-state-example-dynamic"></a>

Dalam contoh ini, ketika AWS Glue pekerjaan selesai, status berikutnya akan dijalankan.

Jika tugas ini gagal diselesaikan dalam interval yang ditetapkan secara dinamis oleh AWS Glue pekerjaan, tugas ditandai sebagai`failed`. 

```
"GlueJobTask": {
  "Type": "Task",
  "Resource": "arn:aws:states:::glue:startJobRun.sync",
  "Parameters": {
    "JobName": "myGlueJob"
  },
  "TimeoutSecondsPath": "$.params.maxTime",
  "Next": "NextState"
}
```

### Contoh bidang Kredensial status tugas
<a name="task-state-example-credentials"></a>

#### Menentukan peran IAM hard-code ARN
<a name="example-credentials-specify-role-arn"></a>

Contoh berikut menentukan peran IAM target yang harus diasumsikan oleh peran eksekusi mesin status untuk mengakses fungsi Lambda lintas akun bernama. `Echo` Dalam contoh ini, peran target ARN ditentukan sebagai nilai hard-code.

```
{
  "StartAt": "Cross-account call",
  "States": {
    "Cross-account call": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Credentials": {
        "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole"
      },
      "Parameters": {
        "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo"
      },
      "End": true
    }
  }
}
```

#### Menentukan JSONPath sebagai peran IAM ARN
<a name="example-credentials-specify-dynamic-jsonpath"></a>

Contoh berikut menentukan JSONPath nilai, yang akan menyelesaikan peran IAM ARN saat runtime.

```
{
  "StartAt": "Lambda",
  "States": {
    "Lambda": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Credentials": {
        "RoleArn.$": "$.roleArn"
      },
      ...
    }
  }
}
```

#### Menentukan fungsi intrinsik sebagai peran IAM ARN
<a name="example-credentials-specify-dynamic-intrinsic-function"></a>

Contoh berikut menggunakan fungsi [`States.Format`](intrinsic-functions.md#asl-intrsc-func-generic)intrinsik, yang menyelesaikan peran IAM ARN saat runtime.

```
{
  "StartAt": "Lambda",
  "States": {
    "Lambda": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Credentials": {
        "RoleArn.$": "States.Format('arn:aws:iam::{}:role/ROLENAME', $.accountId)"
      },
      ...
    }
  }
}
```