

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

# Memanipulasi parameter dalam alur kerja Step Functions
<a name="input-output-inputpath-params"></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).

Bidang `InputPath`, `Parameters` dan `ResultSelector` menyediakan cara untuk memanipulasi JSON saat bergerak melalui alur kerja Anda. `InputPath` dapat membatasi input yang diteruskan dengan memfilter notasi JSON dengan menggunakan jalur (lihat [Menggunakan JSONPath jalur](amazon-states-language-paths.md)). Dengan `Parameters` bidang ini, Anda dapat meneruskan kumpulan pasangan kunci-nilai, menggunakan nilai statis atau pilihan dari input menggunakan jalur.

 Bidang `ResultSelector` menyediakan cara untuk memanipulasi hasil status sebelum `ResultPath` diterapkan. 

AWS Step Functionsmenerapkan `InputPath` bidang terlebih dahulu, dan kemudian `Parameters` bidang. Pertama-tama Anda dapat memfilter input mentah Anda ke pilihan yang ingin Anda gunakan `InputPath`, lalu menerapkan `Parameters` untuk memanipulasi input itu lebih lanjut, atau menambahkan nilai-nilai baru. Kemudian Anda dapat menggunakan bidang `ResultSelector` untuk memanipulasi output status sebelum `ResultPath` diterapkan.

## InputPath
<a name="input-output-inputpath"></a>

Gunakan `InputPath` untuk memilih sebagian dari input status. 

Misalnya, anggap input ke status Anda meliputi berikut ini.

```
{
  "comment": "Example for InputPath.",
  "dataset1": {
    "val1": 1,
    "val2": 2,
    "val3": 3
  },
  "dataset2": {
    "val1": "a",
    "val2": "b",
    "val3": "c"
  }
}
```

Anda dapat menerapkan `InputPath`.

```
"InputPath": "$.dataset2",
```

Dengan `InputPath` sebelumnya, berikut ini adalah JSON yang diteruskan sebagai input.

```
{
  "val1": "a",
  "val2": "b",
  "val3": "c"
}
```

**catatan**  
Sebuah jalur dapat menghasilkan pilihan nilai. Pertimbangkan contoh berikut.  

```
{ "a": [1, 2, 3, 4] }
```
Jika Anda menerapkan jalur `$.a[0:2]`, berikut ini adalah hasilnya.  

```
[ 1, 2 ]
```

## Parameter
<a name="input-output-parameters"></a>

Bagian ini menjelaskan berbagai cara Anda dapat menggunakan bidang Parameter. 

### Pasangan kunci/nilai
<a name="input-output-parameters-keyvalue"></a>

Gunakan bidang `Parameters` untuk membuat kumpulan pasangan kunci-nilai yang diteruskan sebagai input. Nilai masing-masing dapat berupa nilai statis yang Anda sertakan dalam definisi mesin status Anda, atau dipilih dari input atau objek Konteks dengan jalur. Untuk pasangan kunci-nilai tempat nilai yang dipilih menggunakan jalur, nama kunci harus diakhiri `.$`. 

Misalnya, anggap Anda memberikan input berikut. 

```
{
  "comment": "Example for Parameters.",
  "product": {
    "details": {
       "color": "blue",
       "size": "small",
       "material": "cotton"
    },
    "availability": "in stock",
    "sku": "2317",
    "cost": "$23"
  }
}
```

Untuk memilih beberapa informasi, Anda dapat menentukan parameter ini dalam ketentuan mesin status Anda. 

```
"Parameters": {
        "comment": "Selecting what I care about.",
        "MyDetails": {
          "size.$": "$.product.details.size",
          "exists.$": "$.product.availability",
          "StaticValue": "foo"
        }
      },
```

Mengingat input dan bidang `Parameters` sebelumnya, ini adalah JSON yang dilewatkan.

```
{
  "comment": "Selecting what I care about.",
  "MyDetails": {
      "size": "small",
      "exists": "in stock",
      "StaticValue": "foo"
  }
},
```

Selain input, Anda dapat mengakses objek JSON khusus, yang dikenal sebagai objek Context. Objek Context menyertakan informasi tentang eksekusi mesin state Anda. Lihat [Mengakses data eksekusi dari objek Context di Step Functions](input-output-contextobject.md).

### Sumber daya terhubung
<a name="input-output-parameters-connected"></a>

Bidang `Parameters` juga dapat meneruskan informasi ke sumber daya yang terhubung. Misalnya, jika status tugas Anda mengatur AWS Batch pekerjaan, Anda dapat meneruskan parameter API yang relevan secara langsung ke tindakan API layanan tersebut. Untuk informasi lebih lanjut, lihat:
+ [Meneruskan parameter ke API layanan di Step Functions](connect-parameters.md)
+ [Integrasi layanan ](integrate-services.md)

### Amazon S3
<a name="input-output-parameters-s3"></a>

Jika data fungsi Lambda yang Anda lewati antar status mungkin bertambah menjadi lebih dari 262.144 byte, sebaiknya gunakan Amazon S3 untuk menyimpan data, dan menerapkan salah satu metode berikut:
+ Gunakan *status Peta Terdistribusi* di alur kerja Anda sehingga `Map` status dapat membaca input langsung dari sumber data Amazon S3. Untuk informasi selengkapnya, lihat [Mode terdistribusi](state-map-distributed.md).
+ Parse Amazon Resource Name (ARN) bucket dalam `Payload` parameter untuk mendapatkan nama bucket dan nilai kunci. Untuk informasi selengkapnya, lihat [Menggunakan Amazon S3 ARNs alih-alih melewatkan muatan besar di Step Functions](sfn-best-practices.md#avoid-exec-failures).

Atau, Anda dapat menyesuaikan implementasi untuk meneruskan muatan yang lebih kecil dalam eksekusi Anda.

## ResultSelector
<a name="input-output-resultselector"></a>

 Gunakan bidang `ResultSelector` untuk memanipulasi hasil status sebelum `ResultPath` diterapkan. Bidang `ResultSelector` memungkinkan Anda membuat koleksi pasangan nilai kunci, yang mana nilai-nilainya statis atau dipilih dari hasil status. Dengan menggunakan `ResultSelector` bidang, Anda dapat memilih bagian mana dari hasil status yang ingin Anda lewatkan ke `ResultPath` bidang tersebut.

**catatan**  
Dengan `ResultPath` bidang tersebut, Anda dapat menambahkan output `ResultSelector` bidang ke input asli.

`ResultSelector` adalah bidang opsional dalam status berikut:
+ [Memetakan status alur kerja](state-map.md)
+ [Status alur kerja tugas](state-task.md)
+ [Status alur kerja paralel](state-parallel.md)

Misalnya, integrasi layanan Step Functions mengembalikan metadata selain muatan dalam hasil. `ResultSelector` dapat memilih bagian dari hasil dan menggabungkannya dengan input status dengan `ResultPath`. Dalam contoh ini, kami ingin memilih hanya `resourceType` dan `ClusterId`, dan menggabungkannya dengan input status dari Amazon EMR createCluster.sync. Diberikan sebagai berikut:

```
{
  "resourceType": "elasticmapreduce",
  "resource": "createCluster.sync",
  "output": {
    "SdkHttpMetadata": {
      "HttpHeaders": {
        "Content-Length": "1112",
        "Content-Type": "application/x-amz-JSON-1.1",
        "Date": "Mon, 25 Nov 2019 19:41:29 GMT",
        "x-amzn-RequestId": "1234-5678-9012"
      },
      "HttpStatusCode": 200
    },
    "SdkResponseMetadata": {
      "RequestId": "1234-5678-9012"
    },
    "ClusterId": "AKIAIOSFODNN7EXAMPLE"
  }
}
```

Anda kemudian dapat memilih `resourceType` dan `ClusterId` menggunakan `ResultSelector`:

```
"Create Cluster": {
  "Type": "Task",
  "Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
  "Parameters": {
    <some parameters>
  },
  "ResultSelector": {
    "ClusterId.$": "$.output.ClusterId",
    "ResourceType.$": "$.resourceType"
  },
  "ResultPath": "$.EMROutput",
  "Next": "Next Step"
}
```

Dengan input yang diberikan, menggunakan `ResultSelector` menghasilkan:

```
{
  "OtherDataFromInput": {},
  "EMROutput": {
      "ClusterId": "AKIAIOSFODNN7EXAMPLE",
      "ResourceType": "elasticmapreduce",
  }
}
```

### Meratakan array array
<a name="flatten-array-of-arrays-result-selector"></a>

Jika [Memetakan status alur kerja](state-map.md) status [Status alur kerja paralel](state-parallel.md) atau di mesin status Anda mengembalikan array array, Anda dapat mengubahnya menjadi array datar dengan [ResultSelector](#input-output-resultselector) bidang. Anda dapat menyertakan bidang ini di dalam definisi status Paralel atau Peta untuk memanipulasi hasil status ini.

Untuk meratakan array, gunakan sintaks: `[*]` di `ResultSelector` bidang seperti yang ditunjukkan pada contoh berikut.

```
"ResultSelector": {
    "flattenArray.$": "$[*][*]"
  }
```

Untuk contoh yang menunjukkan cara meratakan array, lihat *Langkah 3* dalam tutorial berikut:
+ [Memproses data batch dengan fungsi Lambda di Step Functions](tutorial-itembatcher-param-task.md)
+ [Memproses item individual dengan fungsi Lambda di Step Functions](tutorial-itembatcher-single-item-process.md)