

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

# Mengembangkan alur kerja dengan Step Functions
<a name="developing-workflows"></a>

Sebaiknya mulai membangun alur kerja di konsol Step Functions dan editor visual Workflow Studio. Anda dapat mulai dari kanvas kosong atau memilih template pemula untuk skenario umum.

Membangun alur kerja Anda memerlukan tugas-tugas berikut:
+ Mendefinisikan alur kerja Anda
+ Menjalankan dan men-debug alur kerja Anda
+ Menerapkan alur kerja Anda

Anda mendefinisikan mesin status di Amazon States Language. Anda dapat membuat definisi Bahasa Amazon States Anda secara manual, tetapi Workflow Studio akan ditampilkan dalam tutorial. Dengan Workflow Studio, Anda dapat menentukan, definisi mesin Anda, memvisualisasikan dan mengedit langkah-langkah, menjalankan dan men-debug alur kerja Anda, dan melihat hasilnya semua dari dalam konsol Step Functions.

**Bekerja dengan Workflow Studio dalam Visual Studio Code**  
Dengan AWS toolkit, Anda dapat menggunakan Workflow Studio dari dalam VS Code untuk memvisualisasikan, membangun, dan bahkan menguji status individual di mesin status Anda. Anda memberikan input status dan menetapkan variabel, memulai tes, kemudian Anda dapat melihat bagaimana data Anda diubah. Anda dapat menyesuaikan alur kerja dan menguji ulang. Setelah selesai, Anda dapat menerapkan perubahan untuk memperbarui mesin negara. Untuk informasi selengkapnya, lihat [Bekerja dengan Workflow Studio](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html) di. AWS Toolkit for Visual Studio Code

Anda juga dapat menggunakan banyak fitur Step Functions dari AWS Command Line Interface (AWS CLI). Misalnya, Anda dapat membuat mesin status dan membuat daftar mesin status yang ada. Anda dapat menggunakan perintah Step Functions AWS CLI untuk memulai dan mengelola eksekusi, polling untuk aktivitas, merekam detak jantung tugas, dan banyak lagi. Untuk daftar lengkap perintah Step Functions, deskripsi argumen yang tersedia, dan contoh yang menunjukkan penggunaannya, lihat *Referensi AWS CLI Perintah*. [AWS CLI Referensi Perintah](https://docs.aws.amazon.com/cli/latest/reference/)

AWS CLI perintah mengikuti Amazon States Language dengan cermat, sehingga Anda dapat menggunakannya AWS CLI untuk mempelajari tentang tindakan Step Functions API. Anda juga dapat menggunakan pengetahuan API yang ada untuk melakukan tindakan Step Functions dari baris perintah.

**Memvalidasi definisi mesin negara**  
Anda dapat menggunakan API untuk **memvalidasi** mesin status dan menemukan potensi masalah sebelum membuat alur kerja Anda.  
Untuk mempelajari selengkapnya tentang memvalidasi alur kerja, lihat [ValidateStateMachineDefinition](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ValidateStateMachineDefinition.html)di Referensi Step Functions API.

Untuk memulai dengan pengaturan minimal, Anda dapat mengikuti tutorial [Membuat Mesin Status Lambda](tutorial-creating-lambda-state-machine.md), yang menunjukkan cara menentukan alur kerja dengan satu langkah yang memanggil fungsi Lambda, lalu jalankan alur kerja, dan lihat hasilnya.

## Mendefinisikan alur kerja Anda
<a name="development-define"></a>

Langkah pertama dalam mengembangkan alur kerja Anda adalah menentukan langkah-langkah dalam Amazon States Language. Bergantung pada preferensi dan alat Anda, Anda dapat menentukan mesin status Step Functions di JSON, YAMAL, atau sebagai definisi Amazon States Language (ASL) yang dirangkai.

Tabel berikut menunjukkan dukungan format definisi berbasis ASL oleh alat. 


| AWS Alat | Format yang didukung | 
| --- | --- | 
| Konsol Step Functions | JSON | 
| API Layanan HTTPS | ASL yang dirangkai | 
| AWS CLI | ASL yang dirangkai | 
| Step Functions Local | ASL yang dirangkai | 
| AWS Toolkit for Visual Studio Code | JSON, YAML | 
| AWS SAM | JSON, YAML | 
| CloudFormation | JSON, YAMAL, ASL Stringified | 

Komentar baris tunggal YAMAL dalam definisi mesin status dari templat tidak akan diteruskan ke dalam definisi sumber daya yang dibuat. Jika Anda perlu mempertahankan komentar, Anda harus menggunakan `Comment` properti dalam definisi mesin status. Untuk informasi, lihat [Struktur mesin status](statemachine-structure.md).

Dengan CloudFormation dan AWS SAM, Anda dapat mengunggah definisi mesin status Anda ke Amazon S3 (format JSON atau YAMAL) dan memberikan lokasi Amazon S3 definisi dalam templat. Untuk informasi, lihat halaman [AWS::StepFunctions::StateMachine S3Location](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-s3location.html). 

Contoh CloudFormation templat berikut menunjukkan bagaimana Anda dapat memberikan definisi mesin status yang sama menggunakan format input yang berbeda. 

------
#### [ JSON with Definition ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "AWS Step Functions sample template.",
  "Resources": {
    "MyStateMachine": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "RoleArn": {
          "Fn::GetAtt": [ "StateMachineRole", "Arn" ]
        },
        "TracingConfiguration": {
          "Enabled": true
        },
        "Definition": {
          "StartAt": "HelloWorld",
          "States": {
            "HelloWorld": {
              "Type": "Pass",
              "End": true
            }
          }
        }
      }
    },
    "StateMachineRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "states.amazonaws.com"
                ]
              }
            }
          ]
        },
        "ManagedPolicyArns": [],
        "Policies": [
          {
            "PolicyName": "StateMachineRolePolicy",
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "lambda:InvokeFunction"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
                }
              ]
            }
          }
        ]
      }
    }
  },
  "Outputs": {
    "StateMachineArn": {
      "Value": {
        "Ref": "MyStateMachine"
      }
    }
  }
}
```

------
#### [ JSON with DefinitionString ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "AWS Step Functions sample template.",
  "Resources": {
    "MyStateMachine": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "RoleArn": {
          "Fn::GetAtt": [ "StateMachineRole", "Arn" ]
        },
        "TracingConfiguration": {
          "Enabled": true
        },
        "DefinitionString": "{\n  \"StartAt\": \"HelloWorld\",\n  \"States\": {\n    \"HelloWorld\": {\n      \"Type\": \"Pass\",\n      \"End\": true\n    }\n  }\n}"
      }
    },
    "StateMachineRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "states.amazonaws.com"
                ]
              }
            }
          ]
        },
        "ManagedPolicyArns": [],
        "Policies": [
          {
            "PolicyName": "StateMachineRolePolicy",
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "lambda:InvokeFunction"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
                }
              ]
            }
          }
        ]
      }
    }
  },
  "Outputs": {
    "StateMachineArn": {
      "Value": {
        "Ref": "MyStateMachine"
      }
    }
  }
}
```

------
#### [ YAML with Definition ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: AWS Step Functions sample template.
Resources:
  MyStateMachine:
    Type: 'AWS::StepFunctions::StateMachine'
    Properties:
      RoleArn: !GetAtt
        - StateMachineRole
        - Arn
      TracingConfiguration:
        Enabled: true
      Definition:
        # This is a YAML comment. This will not be preserved in the state machine resource's definition.
        Comment: This is an ASL comment. This will be preserved in the state machine resource's definition.
        StartAt: HelloWorld
        States:
          HelloWorld:
            Type: Pass
            End: true
  StateMachineRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Action:
              - 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service:
                - states.amazonaws.com
      ManagedPolicyArns: []
      Policies:
        - PolicyName: StateMachineRolePolicy
          PolicyDocument:
            Statement:
              - Action:
                  - 'lambda:InvokeFunction'
                Resource: "*"
                Effect: Allow

Outputs:
  StateMachineArn:
    Value:
      Ref: MyStateMachine
```

------
#### [ YAML with DefinitionString ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: AWS Step Functions sample template.
Resources:
  MyStateMachine:
    Type: 'AWS::StepFunctions::StateMachine'
    Properties:
      RoleArn: !GetAtt
        - StateMachineRole
        - Arn
      TracingConfiguration:
        Enabled: true
      DefinitionString: |
        {
            "StartAt": "HelloWorld",
            "States": {
                "HelloWorld": {
                    "Type": "Pass",
                    "End": true
                }
            }
        }
  StateMachineRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Action:
              - 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service:
                - states.amazonaws.com
      ManagedPolicyArns: []
      Policies:
        - PolicyName: StateMachineRolePolicy
          PolicyDocument:
            Statement:
              - Action:
                  - 'lambda:InvokeFunction'
                Resource: "*"
                Effect: Allow

Outputs:
  StateMachineArn:
    Value:
      Ref: MyStateMachinele
```

------

**Mengembangkan alur kerja dengan AWS SDKs**  
Step Functions didukung oleh Java, .NET, Ruby, PHP, Python (Boto 3) JavaScript, Go, dan C \$1\$1. AWS SDKs Ini SDKs menyediakan cara mudah untuk menggunakan tindakan Step Functions HTTPS API dalam beberapa bahasa pemrograman. Anda dapat mengembangkan mesin status, kegiatan, atau pemicu mesin status menggunakan tindakan API yang diekspos pustaka SDK ini. Anda juga dapat mengakses operasi visibilitas dengan menggunakan pustaka ini untuk mengembangkan alat pemantauan dan pelaporan Step Functions Anda sendiri. Lihat dokumentasi referensi untuk saat ini AWS SDKs dan [Alat untuk Amazon Web Services](https://aws.amazon.com/tools/).

**Kembangkan alur kerja melalui permintaan HTTPS**  
Step Functions menyediakan operasi layanan yang dapat diakses melalui permintaan HTTPS. Anda dapat menggunakan operasi ini untuk berkomunikasi langsung dengan Step Functions dari perpustakaan Anda sendiri. Anda dapat mengembangkan mesin status, pekerja, atau pemicu mesin status dengan menggunakan tindakan API layanan. Anda juga dapat mengakses operasi visibilitas melalui tindakan API untuk mengembangkan alat pemantauan dan pelaporan Anda sendiri. Untuk detailnya, lihat [Referensi AWS Step Functions API](https://docs.aws.amazon.com/step-functions/latest/apireference/).

**Kembangkan alur kerja dengan AWS Step Functions Data Science SDK**  
Ilmuwan data dapat membuat alur kerja yang memproses dan mempublikasikan model pembelajaran mesin menggunakan SageMaker AI dan Step Functions. Anda juga dapat membuat alur kerja pembelajaran mesin multi-langkah dengan Python yang mengatur AWS infrastruktur dalam skala besar. AWS Step Functions Data Science SDK menyediakan API Python yang dapat membuat dan menjalankan alur kerja Step Functions. Anda dapat mengelola dan menjalankan alur kerja ini secara langsung dengan Python, serta notebook Jupyter. [Untuk informasi selengkapnya, lihat: [AWS Step Functions Data Science Project di Github](https://github.com/aws/aws-step-functions-data-science-sdk-python), [dokumentasi SDK ilmu data](https://aws-step-functions-data-science-sdk.readthedocs.io/), dan [contoh notebook Jupyter dan contoh](https://docs.aws.amazon.com/sagemaker/latest/dg/howitworks-nbexamples.html) AI di. SageMaker GitHub](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/step-functions-data-science-sdk)

## Menjalankan dan men-debug alur kerja Anda
<a name="development-run-debug"></a>

Anda dapat memulai alur kerja dengan beberapa cara, termasuk dari konsol, panggilan API (misalnya, dari fungsi Lambda), dari EventBridge Amazon EventBridge dan Scheduler, dari mesin status Step Functions lainnya. Alur kerja yang berjalan dapat terhubung ke layanan pihak ketiga, menggunakan AWS SDKs, dan memanipulasi data saat berjalan. Berbagai alat ada untuk menjalankan dan men-debug langkah-langkah eksekusi dan data yang mengalir melalui mesin status Anda. Bagian berikut menyediakan sumber daya tambahan untuk menjalankan dan men-debug alur kerja Anda. 

Untuk mempelajari lebih lanjut tentang cara memulai eksekusi mesin status, lihat[Memulai eksekusi mesin status di Step Functions](statemachine-starting.md).

**Pilih titik akhir untuk menjalankan alur kerja Anda**  
Untuk mengurangi latensi dan menyimpan data di lokasi yang memenuhi persyaratan Anda, Step Functions menyediakan titik akhir di Wilayah yang berbeda AWS . Setiap titik akhir dalam Step Functions sepenuhnya independen. Mesin status atau aktivitas hanya ada dalam Wilayah tempat ia dibuat. Setiap mesin dan aktivitas negara bagian yang Anda buat di satu Wilayah tidak membagikan data atau atribut apa pun dengan yang dibuat di Wilayah lain. Misalnya, Anda dapat mendaftarkan mesin negara yang diberi nama `STATES-Flows-1` di dua Wilayah berbeda. Mesin `STATES-Flows-1` status di satu wilayah tidak akan berbagi data atau atribut dengan mesin `STATES-Flow-1` status di wilayah lain. Untuk daftar titik akhir Step Functions, lihat [AWS Step Functions Wilayah dan Titik Akhir](https://docs.aws.amazon.com/general/latest/gr/step-functions.html) di. *Referensi Umum AWS*

**Pengembangan dengan VS Code**  
Dengan AWS toolkit, Anda dapat menggunakan Workflow Studio dari dalam VS Code untuk memvisualisasikan, membangun, dan bahkan menguji status individual di mesin status Anda. Anda juga dapat menggunakan substitusi SAM dan CloudFormation definisi Anda. Anda memberikan input status dan menetapkan variabel, memulai tes, kemudian Anda dapat melihat bagaimana data Anda diubah. Di tab Definisi negara, Anda dapat menyesuaikan alur kerja dan menguji ulang. Setelah selesai, Anda dapat menerapkan perubahan untuk memperbarui mesin negara. Untuk informasi selengkapnya, lihat [Bekerja dengan Step Functions](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/bulding-stepfunctions.html) dan [Bekerja dengan Workflow Studio](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html) di. AWS Toolkit for Visual Studio Code

## Menerapkan alur kerja Anda
<a name="development-deploy"></a>

Setelah Anda mendefinisikan dan men-debug alur kerja Anda, Anda mungkin ingin menerapkan menggunakan Infrastruktur sebagai kerangka Kode. Anda dapat memilih untuk menggunakan mesin status Anda menggunakan berbagai opsi IAc, termasuk:,, AWS Serverless Application Model CloudFormation AWS CDK, dan Terraform.

**AWS Serverless Application Model**  
Anda dapat menggunakan AWS Serverless Application Model Step Functions untuk membangun alur kerja dan menyebarkan infrastruktur yang Anda butuhkan, termasuk fungsi Lambda, APIs dan peristiwa, untuk membuat aplikasi tanpa server. Anda juga dapat menggunakan AWS SAM CLI dalam hubungannya dengan AWS Toolkit for Visual Studio Code sebagai bagian dari pengalaman terintegrasi.  
Untuk informasi selengkapnya, lihat [Menggunakan AWS SAM untuk membangun alur kerja Step Functions](concepts-sam-sfn.md).

**CloudFormation**  
Anda dapat menggunakan definisi mesin negara Anda secara langsung di CloudFormation templat.  
Untuk informasi selengkapnya, lihat [Menggunakan CloudFormation untuk membuat alur kerja di Step Functions](tutorial-lambda-state-machine-cloudformation.md).

**AWS CDK**  
Anda dapat membangun mesin status Standar dan Ekspres dengan AWS CDK.  
Untuk membuat alur kerja Standar, lihat[Menggunakan CDK untuk membuat alur kerja Standar](tutorial-lambda-state-machine-cdk.md).  
Untuk membangun alur kerja Express, lihat[Menggunakan CDK untuk membuat alur kerja Express](tutorial-step-functions-rest-api-integration-cdk.md).

**Terraform**  
[Terraform](https://www.terraform.io/intro/) by HashiCorp adalah kerangka kerja untuk membangun aplikasi menggunakan infrastruktur sebagai kode (IAc). Dengan Terraform, Anda dapat membuat mesin status dan menggunakan fitur, seperti melihat pratinjau penerapan infrastruktur dan membuat templat yang dapat digunakan kembali. Template Terraform membantu Anda memelihara dan menggunakan kembali kode dengan memecahnya menjadi potongan-potongan yang lebih kecil.  
Lihat informasi yang lebih lengkap di [Menggunakan Terraform untuk menyebarkan mesin status di Step Functions](terraform-sfn.md).

# Mengembangkan alur kerja di Step Functions Workflow Studio
<a name="workflow-studio"></a>

Saat mengedit alur kerja di AWS Step Functions konsol, Anda akan menggunakan alat visual yang disebut Workflow Studio. Dengan Workflow Studio, Anda dapat drag-and-drop menyatakan ke kanvas untuk membangun alur kerja Anda. Anda dapat menambahkan, mengedit, dan mengonfigurasi status, mengatur filter input dan output, mengubah hasil, dan mengatur penanganan kesalahan.

Saat Anda memodifikasi status dalam alur kerja Anda, Workflow Studio akan memvalidasi dan menghasilkan definisi mesin status secara otomatis. Anda dapat meninjau kode yang dihasilkan, mengedit konfigurasi, dan bahkan memodifikasi definisi teks dengan editor kode bawaan. Setelah selesai, Anda dapat menyimpan alur kerja Anda, menjalankannya, dan kemudian memeriksa hasilnya.

Anda dapat mengakses Workflow Studio dari konsol Step Functions, saat Anda membuat atau mengedit alur kerja. 

Anda juga dapat menggunakan Workflow Studio dari **dalam**AWS Infrastructure Composer, desainer visual untuk membuat infrastruktur sebagai kode dengan AWS Serverless Application Model danAWS CloudFormation. Untuk menemukan manfaat dari pendekatan ini, lihat[Menggunakan Workflow Studio di Infrastructure Composer](use-wfs-in-app-composer.md).

Workflow Studio memiliki tiga mode: **Desain**, **Kode**, dan **Config**. Dalam *mode Desain*, Anda dapat drag-and-drop menyatakan ke kanvas. *Mode kode* menyediakan editor kode bawaan untuk mengedit definisi alur kerja Anda di dalam konsol. Dalam *mode Config*, Anda dapat mengelola konfigurasi alur kerja Anda.

**Bekerja dengan Workflow Studio dalam Visual Studio Code**  
Dengan AWS toolkit, Anda dapat menggunakan Workflow Studio dari dalam VS Code untuk memvisualisasikan, membangun, dan bahkan menguji status individual di mesin status Anda. Anda memberikan input status dan menetapkan variabel, memulai tes, kemudian Anda dapat melihat bagaimana data Anda diubah. Anda dapat menyesuaikan alur kerja dan menguji ulang. Setelah selesai, Anda dapat menerapkan perubahan untuk memperbarui mesin negara. Untuk informasi selengkapnya, lihat [Bekerja dengan Workflow Studio](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html) di. AWS Toolkit for Visual Studio Code

## Mode desain
<a name="wfs-interface-design-mode"></a>

Mode desain menyediakan antarmuka grafis untuk memvisualisasikan alur kerja Anda saat Anda membangun prototipe mereka. Gambar berikut menunjukkan browser status, kanvas alur kerja, inspektur, dan panel bantuan kontekstual dalam mode **Desain** Workflow Studio.

![\[Tangkapan layar mode Desain, menampilkan browser status, kanvas alur kerja, inspektur, dan panel bantuan.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/wfs_main_01.png)


1. Tombol mode beralih di antara tiga mode. Anda tidak dapat beralih mode jika definisi alur kerja ASL Anda tidak valid.

1. [Peramban status](#workflow-studio-components-states)Berisi tiga tab berikut:
   + Tab **Tindakan** menyediakan daftar AWS APIs yang dapat Anda seret dan lepas ke grafik alur kerja Anda di kanvas. Setiap tindakan mewakili suatu [Status alur kerja tugas](state-task.md) negara.
   + Tab **Flow** menyediakan daftar status alur yang dapat Anda seret dan lepas ke grafik alur kerja di kanvas.
   + Tab **Patterns** menyediakan beberapa ready-to-use blok bangunan yang dapat digunakan kembali yang dapat Anda gunakan untuk berbagai kasus penggunaan. Misalnya, Anda dapat menggunakan pola ini untuk memproses data secara berulang di bucket Amazon S3.

1. Di [Grafik kanvas dan alur kerja](#workflow-studio-components-grapheditor) sinilah Anda menyeret dan melepas status ke dalam grafik alur kerja Anda, mengubah urutan status, dan memilih status untuk dikonfigurasi atau dilihat.

1. [Panel Inspector](#workflow-studio-components-formdefinition)Panel adalah tempat Anda dapat melihat dan mengedit properti dari setiap status yang Anda pilih di kanvas. Aktifkan sakelar **Definisi** untuk melihat kode Bahasa Negara Amazon untuk alur kerja Anda, dengan status yang dipilih saat ini disorot. 

1. Tautan **Info** membuka panel dengan informasi kontekstual saat Anda memerlukan bantuan. Panel ini juga mencakup tautan ke topik terkait dalam dokumentasi Step Functions. 

1. Toolbar desain - Berisi serangkaian tombol untuk melakukan tindakan umum, seperti membatalkan, menghapus, dan memperbesar.

1. Tombol utilitas — Satu set tombol untuk melakukan tugas, seperti menyimpan alur kerja Anda atau mengekspor definisi ASL mereka dalam file JSON atau YAMG.

### Peramban status
<a name="workflow-studio-components-states"></a>

Dari browser Amerika, Anda dapat memilih status untuk menyeret dan melepas ke kanvas alur kerja Anda. Tab **Tindakan** menyediakan daftar status tugas yang terhubung ke titik akhir HTTP pihak ketiga dan AWS APIs. Tab **Flow** menyediakan daftar status yang dapat digunakan untuk mengarahkan dan mengontrol alur kerja Anda. Status aliran meliputi: Pilihan, Paralel, Peta, Lulus, Tunggu, Sukses, dan Gagal. Tab **Pola** menyediakan ready-to-use, blok bangunan yang telah ditentukan sebelumnya yang dapat digunakan kembali. Anda dapat mencari di antara semua jenis negara dengan kotak pencarian di bagian atas panel.

![\[Koleksi ilustrasi tangkapan layar yang menampilkan Tindakan, Aliran, Pola, dan pencarian.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/wfe-states-browser-01.png)


### Grafik kanvas dan alur kerja
<a name="workflow-studio-components-grapheditor"></a>

Setelah Anda memilih status untuk ditambahkan ke alur kerja Anda, Anda dapat menyeretnya ke kanvas dan menjatuhkannya ke grafik alur kerja Anda. Anda juga dapat drag dan drop status untuk memindahkannya dalam alur kerja Anda. Jika alur kerja Anda besar, Anda dapat memperbesar atau memperkecil untuk melihat bagian yang berbeda dari grafik alur kerja Anda di kanvas. 

### Panel Inspector
<a name="workflow-studio-components-formdefinition"></a>

Anda dapat mengonfigurasi status apa pun yang Anda tambahkan ke alur kerja Anda dari panel **Inspector** di sebelah kanan. Pilih status yang ingin Anda konfigurasikan, dan Anda akan melihat opsi konfigurasinya di panel **Inspector**. **Untuk melihat [definisi ASL](concepts-amazon-states-language.md) yang dibuat secara otomatis untuk kode alur kerja Anda, aktifkan sakelar Definisi.** Definisi ASL yang terkait dengan status yang Anda pilih akan muncul disorot.

![\[Tangkapan layar ilustrasi dari inspektur Workflow Studio yang menunjukkan panel konfigurasi\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/wfe-forms-definitions-01.png)


![\[Tangkapan layar ilustrasi panel inspektur Workflow Studio yang menunjukkan definisi kode\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/wfe-forms-definitions-02.png)


## Mode kode
<a name="wfs-interface-code-mode"></a>

Dalam mode **Kode** Workflow Studio, Anda dapat menggunakan editor kode terintegrasi untuk melihat, menulis, dan mengedit definisi [Menggunakan Amazon States Language untuk menentukan alur kerja Step Functions](concepts-amazon-states-language.md) (ASL) alur kerja Anda dalam konsol Step Functions. Tangkapan layar berikut menunjukkan komponen dalam mode **Kode**.

![\[Screenshot ilustratif mengedit definisi alur kerja dalam mode Kode.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/wfs-code-mode.png)


1. Tombol mode beralih di antara tiga mode. Anda tidak dapat beralih mode jika definisi alur kerja ASL Anda tidak valid.

1. Di [Editor kode](#wfs-interface-code-editor) sinilah Anda menulis dan mengedit [definisi ASL](concepts-amazon-states-language.md) dari alur kerja Anda dalam Workflow Studio. Editor kode juga menyediakan fitur, seperti penyorotan sintaks dan pelengkapan otomatis.

1. [Visualisasi grafik](#wfs-interface-code-graph-viz)— Menampilkan visualisasi grafis real-time dari alur kerja Anda.

1. Tombol utilitas — Satu set tombol untuk melakukan tugas, seperti menyimpan alur kerja Anda atau mengekspor definisi ASL mereka dalam file JSON atau YAMG.

1. Code toolbar - Berisi satu set tombol untuk melakukan tindakan umum, seperti membatalkan tindakan atau memformat kode.

1. Bilah alat grafik - Berisi sekumpulan tombol untuk melakukan tindakan umum, seperti memperbesar dan memperkecil grafik alur kerja.

### Editor kode
<a name="wfs-interface-code-editor"></a>

Editor kode memberikan pengalaman seperti IDE untuk menulis dan mengedit definisi alur kerja Anda menggunakan JSON dalam Workflow Studio. Editor kode mencakup beberapa fitur, seperti penyorotan sintaks, saran pelengkapan otomatis, validasi [definisi ASL](concepts-amazon-states-language.md), dan tampilan bantuan peka konteks. Saat Anda memperbarui definisi alur kerja Anda, akan [Visualisasi grafik](#wfs-interface-code-graph-viz) membuat grafik real-time alur kerja Anda. Anda juga dapat melihat grafik alur kerja yang diperbarui di. [Mode desain](#wfs-interface-design-mode)

Jika Anda memilih status di [Mode desain](#wfs-interface-design-mode) atau panel visualisasi grafik, definisi ASL dari status tersebut akan disorot di editor kode. Definisi ASL alur kerja Anda diperbarui secara otomatis jika Anda menyusun ulang, menghapus, atau menambahkan status dalam mode **Desain** atau panel visualisasi grafik.

Editor kode dapat membuat saran untuk melengkapi bidang dan status secara otomatis.
+ Untuk melihat daftar bidang yang dapat Anda sertakan dalam status tertentu, tekan**Ctrl\$1Space**.
+ Untuk menghasilkan cuplikan kode untuk status baru dalam alur kerja Anda, tekan **Ctrl\$1Space** setelah definisi status saat ini.
+ Untuk menampilkan daftar semua perintah dan **pintasan keyboard** yang tersedia, tekan**F1**.

### Visualisasi grafik
<a name="wfs-interface-code-graph-viz"></a>

Panel visualisasi grafik menunjukkan alur kerja Anda dalam format grafis. Saat Anda menulis definisi alur kerja Anda di [Editor kode](#wfs-interface-code-editor) Workflow Studio, panel visualisasi grafik akan membuat grafik real-time alur kerja Anda. 

Saat Anda menyusun ulang, menghapus, atau menduplikasi status di panel visualisasi grafik, definisi alur kerja di editor Kode diperbarui secara otomatis. Demikian pula, saat Anda memperbarui definisi alur kerja Anda, menyusun ulang, menghapus, atau menambahkan status di editor Kode, visualisasi diperbarui secara otomatis.

Jika JSON dalam definisi ASL alur kerja Anda tidak valid, panel visualisasi grafik menjeda rendering dan menampilkan pesan status di bagian bawah panel.

## Mode Config
<a name="wfs-interface-config-mode"></a>

Dalam mode **Config** Workflow Studio, Anda dapat mengelola konfigurasi umum mesin status Anda. Dalam mode ini, Anda dapat menentukan pengaturan, seperti berikut ini:
+ **Detail**: Mengatur **nama** alur kerja dan **jenis**. Perhatikan bahwa keduanya **tidak** dapat diubah setelah Anda membuat mesin status.
+ **Izin**: Anda dapat membuat peran baru (disarankan), memilih peran yang ada, atau memasukkan ARN untuk peran tertentu. Jika Anda memilih opsi untuk membuat peran baru, Step Functions akan membuat peran eksekusi untuk mesin status Anda menggunakan hak istimewa paling sedikit. Peran IAM yang dihasilkan valid untuk Wilayah AWS di mana Anda membuat mesin status. Sebelum pembuatan, Anda dapat meninjau izin yang akan dihasilkan Step Functions secara otomatis untuk mesin status Anda.
+ **Logging**: Anda dapat mengaktifkan dan mengatur tingkat log untuk mesin status Anda. Step Functions mencatat peristiwa riwayat eksekusi berdasarkan pilihan Anda. Anda dapat secara opsional menggunakan kunci yang dikelola pelanggan untuk mengenkripsi log Anda. Untuk informasi selengkapnya tentang tingkat log, lihat[Level log untuk peristiwa eksekusi Step Functions](cw-logs.md#cloudwatch-log-level).

Dalam **Konfigurasi tambahan**, Anda dapat mengatur satu atau beberapa opsi konfigurasi **opsional** berikut:
+ **Aktifkan penelusuran X-Ray**: Anda dapat mengirim jejak X-Ray untuk eksekusi mesin status, bahkan ketika ID jejak tidak dilewatkan oleh layanan hulu. Untuk informasi selengkapnya, lihat [Melacak data permintaan Step Functions di AWS X-Ray](concepts-xray-tracing.md).
+ **Publikasikan versi saat pembuatan**: *Versi* adalah snapshot bernomor dan tidak dapat diubah dari mesin status yang dapat Anda jalankan. Pilih opsi ini untuk mempublikasikan versi mesin status Anda saat membuat mesin status. Step Functions menerbitkan versi 1 sebagai revisi pertama mesin negara. Untuk informasi selengkapnya tentang versi, lihat[Status versi mesin dalam alur kerja Step Functions](concepts-state-machine-version.md).
+ **Enkripsi dengan kunci yang dikelola pelanggan**: Anda dapat memberikan kunci yang Anda kuasai secara langsung untuk mengenkripsi data Anda. Untuk informasi, lihat [Enkripsi data saat istirahat](encryption-at-rest.md)
+ **Tag**: Pilih kotak ini untuk menambahkan tag yang dapat membantu Anda melacak dan mengelola biaya yang terkait dengan sumber daya Anda, dan memberikan keamanan yang lebih baik dalam kebijakan IAM Anda. Untuk informasi selengkapnya tentang tag, lihat [Menandai mesin dan aktivitas status di Step Functions](sfn-best-practices.md#concepts-tagging).

# Membuat alur kerja dengan Workflow Studio di Step Functions
<a name="workflow-studio-create"></a>

Pelajari cara membuat, mengedit, dan menjalankan alur kerja menggunakan Step Functions Workflow Studio. Setelah alur kerja Anda siap, Anda dapat menyimpan, menjalankan, dan mengekspornya. 

**Topics**
+ [Buat mesin status](#workflow-studio-components-create)
+ [Rancang alur kerja](#workflow-studio-build)
+ [Jalankan alur kerja Anda](#workflow-studio-components-create-run)
+ [Edit alur kerja](#workflow-studio-components-create-edit)
+ [Ekspor alur kerja Anda](#workflow-studio-components-create-export)
+ [Membuat prototipe alur kerja dengan placeholder](#workflow-studio-components-create-prototype)

## Buat mesin status
<a name="workflow-studio-components-create"></a>

Di Workflow Studio, Anda dapat memilih template pemula atau template kosong untuk membuat alur kerja.

Template pemula adalah proyek ready-to-run sampel yang secara otomatis membuat prototipe dan definisi alur kerja, dan menyebarkan semua AWS sumber daya terkait yang dibutuhkan proyek Anda ke proyek Anda. Akun AWS Anda dapat menggunakan template pemula ini untuk menyebarkan dan menjalankannya apa adanya, atau menggunakan prototipe alur kerja untuk membangunnya. Untuk informasi selengkapnya tentang template pemula, lihat[Menerapkan mesin status menggunakan template starter untuk Step Functions](starter-templates.md).

Dengan template kosong, Anda menggunakan mode [Desain](workflow-studio.md#wfs-interface-design-mode) atau [Kode](workflow-studio.md#wfs-interface-code-mode) untuk membuat alur kerja kustom Anda.

### Buat mesin negara menggunakan template starter
<a name="wfs-create-workflow-templates"></a>

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

1. Dalam kotak dialog **Pilih templat**, lakukan salah satu hal berikut untuk memilih proyek sampel:
   + Ketik **Task Timer** kotak Cari menurut kata kunci, lalu pilih **Pengatur Waktu Tugas** dari hasil pencarian.
   + Jelajahi proyek sampel yang tercantum di bawah **Semua** di panel kanan, lalu pilih **Pengatur Waktu Tugas**.

1. Pilih **Next** untuk melanjutkan.

1. Pilih cara menggunakan template:

1. Pilih **Gunakan templat** untuk melanjutkan pilihan Anda.

1. **Jalankan demo** — membuat mesin status hanya-baca. Setelah ditinjau, Anda dapat membuat alur kerja dan semua sumber daya terkait.

1. **Bangun di atasnya** — memberikan definisi alur kerja yang dapat diedit yang dapat Anda tinjau, sesuaikan, dan terapkan dengan sumber daya Anda sendiri. (Sumber daya terkait, seperti fungsi atau antrian, **tidak** akan dibuat secara otomatis.)

### Buat alur kerja menggunakan template kosong
<a name="wfs-create-workflow-blank"></a>

Bila Anda ingin memulai dari kanvas bersih, buat alur kerja dari template kosong.

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

1. Pilih **Buat mesin status**.

1. Pilih **Buat dari kosong**.

1. Beri nama mesin status Anda, lalu pilih **Lanjutkan** untuk mengedit mesin status Anda di Workflow Studio.

   Anda sekarang dapat mulai merancang alur kerja Anda [Mode desain](workflow-studio.md#wfs-interface-design-mode) atau menulis definisi alur kerja Anda di. [Mode kode](workflow-studio.md#wfs-interface-code-mode)

1. Pilih **Config** untuk mengelola konfigurasi alur kerja Anda di. [Mode Config](workflow-studio.md#wfs-interface-config-mode) Misalnya, berikan nama untuk alur kerja Anda dan pilih jenisnya.

## Rancang alur kerja
<a name="workflow-studio-build"></a>

Ketika Anda mengetahui nama negara yang ingin Anda tambahkan, gunakan kotak pencarian di bagian atas [Peramban status](workflow-studio.md#workflow-studio-components-states) untuk menemukannya. Jika tidak, cari status yang Anda butuhkan di browser dan tambahkan ke kanvas. 

Anda dapat menyusun ulang status dalam alur kerja Anda dengan menyeretnya ke lokasi yang berbeda dalam alur kerja Anda. Saat Anda menyeret status ke kanvas, sebuah garis muncul untuk menunjukkan di mana status akan dimasukkan ke dalam alur kerja Anda, seperti yang ditunjukkan pada gambar berikut: 

![\[Screenshot ilustratif yang menunjukkan garis biru yang menunjukkan tujuan suatu negara.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/wfe-design-02.png)


Setelah status dijatuhkan ke kanvas, kodenya dibuat secara otomatis dan ditambahkan di dalam definisi alur kerja. [Untuk melihat definisi, aktifkan sakelar **Definisi** pada panel Inspector.](workflow-studio.md#workflow-studio-components-formdefinition) Anda dapat memilih [Mode kode](workflow-studio.md#wfs-interface-code-mode) untuk mengedit definisi dengan editor kode bawaan.

Setelah Anda menjatuhkan status ke kanvas, Anda dapat mengonfigurasinya di [Panel Inspector](workflow-studio.md#workflow-studio-components-formdefinition) panel di sebelah kanan. Panel ini berisi tab **Konfigurasi**, **Input**, **Output**, dan **Penanganan Kesalahan** untuk setiap status atau tindakan API yang Anda tempatkan di kanvas. Anda mengonfigurasi status yang Anda sertakan dalam alur kerja Anda di tab **Konfigurasi**. 

Misalnya, tab **Konfigurasi** untuk tindakan API Lambda Invoke menyediakan opsi berikut:
+ **Nama negara**: Anda dapat mengidentifikasi status dengan nama kustom atau menerima nama default yang dihasilkan.
+ **API** menunjukkan tindakan API mana yang digunakan oleh negara bagian. 
+ **Jenis integrasi**: Anda dapat memilih jenis integrasi layanan yang digunakan untuk memanggil tindakan API pada layanan lain.
+ **Nama fungsi** menyediakan opsi untuk:
  +  **Masukkan nama fungsi**: Anda dapat memasukkan nama fungsi Anda atau ARN nya. 
  +  **Dapatkan nama fungsi pada saat waktu aktif input status**: Anda dapat menggunakan opsi ini untuk secara dinamis mendapatkan nama fungsi dari input status berdasarkan jalur yang Anda tentukan. 
  +  **Pilih nama fungsi**: Anda dapat langsung memilih dari fungsi yang tersedia di akun dan wilayah Anda. 
+ **Payload**: Anda dapat memilih untuk menggunakan input status, objek JSON, atau tidak ada payload untuk diteruskan sebagai payload ke fungsi Lambda Anda. Jika Anda memilih JSON, Anda dapat menyertakan nilai statis dan nilai yang dipilih dari input status.
+ (Opsional) Beberapa negara akan memiliki opsi untuk memilih **Tunggu tugas selesai** atau **Tunggu panggilan balik**. Jika tersedia, Anda dapat memilih salah satu [pola integrasi layanan](connect-to-resource.md) berikut: 
  + **Tidak ada opsi yang dipilih**: Step Functions akan menggunakan pola integrasi [Minta Tanggapan](connect-to-resource.md#connect-default). Step Functions akan menunggu respons HTTP lalu melanjutkan ke status berikutnya. Step Functions tidak akan menunggu tugas selesai. Bila tidak ada pilihan yang tersedia, negara akan menggunakan pola ini. 
  + **Tunggu tugas selesai**: Step Functions akan menggunakan pola integrasi [Jalankan Tugas (.sync)](connect-to-resource.md#connect-sync).
  + **Tunggu panggilan balik**: Step Functions akan menggunakan pola integrasi [Tunggu Callback dengan Task Token](connect-to-resource.md#connect-wait-token).
+ (Opsional) Untuk mengakses sumber daya yang dikonfigurasi berbeda Akun AWS dalam alur kerja Anda, Step Functions menyediakan akses [lintas akun](concepts-access-cross-acct-resources.md). **Peran IAM untuk akses lintas akun** menyediakan opsi untuk:
  + **Berikan ARN peran IAM**: Tentukan peran IAM yang berisi izin akses sumber daya yang sesuai. Sumber daya ini tersedia di akun target, yang merupakan Akun AWS tempat Anda melakukan panggilan lintas akun.
  + **Dapatkan ARN peran IAM saat runtime dari input status**: Tentukan jalur referensi ke pasangan nilai kunci yang ada di input JSON status yang berisi peran IAM.
+ **Status selanjutnya** memungkinkan Anda untuk memilih status yang ingin Anda transisikan ke berikutnya. 
+ (Opsional) **Kolom komentar** tidak akan memengaruhi alur kerja, tetapi Anda dapat menggunakannya untuk membuat anotasi alur kerja Anda.

Beberapa negara bagian akan memiliki opsi konfigurasi generik tambahan. Misalnya, konfigurasi status `RunTask` Amazon ECS berisi bidang `API Parameters` yang diisi dengan nilai placeholder. Untuk status ini, Anda dapat mengganti nilai placeholder dengan konfigurasi yang sesuai dengan kebutuhan Anda.

**Untuk menghapus status**

Anda dapat menekan backspace, klik kanan dan pilih **Hapus status**, atau pilih **Hapus** pada toolbar [Desain](workflow-studio.md#wfs-interface-design-mode).

## Jalankan alur kerja Anda
<a name="workflow-studio-components-create-run"></a>

Ketika alur kerja Anda siap untuk digunakan, Anda dapat menjalankannya dan melihat eksekusinya dari [konsol Step Functions](https://console.aws.amazon.com/states/home).

**Untuk menjalankan alur kerja di Workflow Studio**

1. **Dalam mode **Desain**, **Kode**, atau **Config**, pilih Execute.**

   Kotak dialog **Mulai eksekusi** terbuka di tab baru.

1. Dalam kotak dialog **Mulai eksekusi**, lakukan hal berikut:

   1. (Opsional) Masukkan nama eksekusi khusus untuk mengganti default yang dihasilkan.
**Nama dan pencatatan non-ASCII**  
Step Functions menerima nama untuk mesin negara, eksekusi, aktivitas, dan label yang berisi karakter non-ASCII. Karena karakter seperti itu akan CloudWatch mencegah Amazon mencatat data, sebaiknya gunakan hanya karakter ASCII sehingga Anda dapat melacak metrik Step Functions.

   1. (Opsional) Dalam kotak **Input**, masukkan nilai input dalam format JSON untuk menjalankan alur kerja Anda.

   1. Pilih **Mulai Eksekusi**.

   1. Konsol Step Functions mengarahkan Anda ke halaman yang berjudul dengan ID eksekusi Anda, yang dikenal sebagai halaman *Detail Eksekusi*. Anda dapat meninjau hasil eksekusi saat alur kerja berlangsung dan setelah selesai.

      Untuk meninjau hasil eksekusi, pilih status individual pada **tampilan Grafik**, lalu pilih tab individual di [Detail langkah](concepts-view-execution-details.md#exec-details-intf-step-details) panel untuk melihat detail setiap status termasuk input, output, dan definisi masing-masing. Untuk detail tentang informasi eksekusi yang dapat Anda lihat di halaman *Rincian Eksekusi*, lihat[Ikhtisar detail eksekusi](concepts-view-execution-details.md#exec-details-interface-overview).

## Edit alur kerja
<a name="workflow-studio-components-create-edit"></a>

Anda dapat mengedit alur kerja yang ada secara visual di [Mode desain](workflow-studio.md#wfs-interface-design-mode) Workflow Studio. 

Di [konsol Step Functions](https://console.aws.amazon.com/states/home), pilih alur kerja yang ingin Anda edit dari halaman **mesin State**. Alur kerja terbuka dalam mode **Desain** Workflow Studio.

Anda juga dapat mengedit definisi alur kerja di[Mode kode](workflow-studio.md#wfs-interface-code-mode). Pilih tombol **Kode** untuk melihat atau mengedit definisi alur kerja di Workflow Studio.

**catatan**  
Jika Anda melihat kesalahan dalam alur kerja Anda, Anda harus memperbaikinya dalam mode **Desain**. Anda tidak dapat beralih ke mode **Kode** atau **Config** jika ada kesalahan dalam alur kerja Anda.

Ketika Anda menyimpan perubahan pada alur kerja Anda, Anda memiliki opsi untuk juga menerbitkan **versi** baru. Dengan versi, Anda dapat memilih untuk menjalankan versi asli atau alternatif dari alur kerja Anda. Untuk mempelajari selengkapnya tentang mengelola alur kerja dengan versi, lihat [Status versi mesin dalam alur kerja Step Functions](concepts-state-machine-version.md)

## Ekspor alur kerja Anda
<a name="workflow-studio-components-create-export"></a>

Anda dapat mengekspor definisi alur kerja [Amazon States Language](concepts-amazon-states-language.md) (ASL) dan grafik alur kerja Anda:

1. Pilih alur kerja Anda di [konsol Step Functions](https://console.aws.amazon.com/states/home).

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

1. Pilih tombol dropdown **Actions**, lalu lakukan salah satu atau kedua hal berikut:
   + Untuk mengekspor grafik alur kerja ke file SVG atau PNG, di bawah **Ekspor grafik**, pilih format yang Anda inginkan.
   + Untuk mengekspor definisi alur kerja sebagai file JSON atau YAMG, di bawah **definisi Ekspor**, pilih format yang Anda inginkan.

## Membuat prototipe alur kerja dengan placeholder
<a name="workflow-studio-components-create-prototype"></a>

Anda dapat menggunakan Workflow Studio atau [Workflow Studio Infrastructure Composer](use-wfs-in-app-composer.md) untuk membuat prototipe alur kerja baru yang berisi sumber daya *placeholder yang diberi nama sumber daya* yang belum ada.

Untuk membuat prototipe alur kerja:

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

1. Pilih **Buat mesin status**.

1. Pilih **Buat dari kosong**.

1. Beri nama mesin status Anda, lalu pilih **Lanjutkan** untuk mengedit mesin status Anda di Workflow Studio.

1. [Mode Desain](workflow-studio.md#wfs-interface-design-mode) Workflow Studio terbuka. Rancang alur kerja Anda di Workflow Studio. Untuk memasukkan sumber daya placeholder:

   1. **Pilih status yang ingin Anda sertakan sumber daya placeholder, lalu di Konfigurasi:**
      + Untuk status Lambda Invoke, pilih **Nama fungsi**, lalu pilih **Masukkan** nama fungsi. Anda juga dapat memasukkan nama khusus untuk fungsi Anda.
      + Untuk status Kirim Pesan Amazon SQS, pilih URL Antrian, lalu pilih **Masukkan** **URL antrian**. Masukkan URL antrean placeholder.
      + Untuk status Publikasikan Amazon SNS, dari **Topik, pilih topik** ARN.
      + Untuk semua status lain yang terdaftar dalam **Tindakan**, Anda dapat menggunakan konfigurasi default.
**catatan**  
Jika Anda melihat kesalahan dalam alur kerja Anda, Anda harus memperbaikinya dalam mode **Desain**. Anda tidak dapat beralih ke mode **Kode** atau **Config** jika ada kesalahan dalam alur kerja Anda.

   1. **(Opsional) Untuk melihat definisi ASL yang dibuat secara otomatis dari alur kerja Anda, pilih Definisi.**

   1. (Opsional) Untuk memperbarui definisi alur kerja di Workflow Studio, pilih **kode** tombol.
**catatan**  
Jika Anda melihat kesalahan dalam definisi alur kerja Anda, Anda harus memperbaikinya dalam mode **Kode**. Anda tidak dapat beralih ke mode **Desain** atau **Konfigurasi** jika ada kesalahan dalam definisi alur kerja Anda.

1. (Opsional) Untuk mengedit nama mesin negara, pilih ikon edit di sebelah nama mesin status default **MyStateMachine**dan tentukan nama di kotak **Nama mesin negara**.

   Anda juga dapat beralih ke [Mode Config](workflow-studio.md#wfs-interface-config-mode) untuk mengedit nama mesin status default.

1. Tentukan pengaturan alur kerja Anda, seperti jenis mesin status dan peran pelaksanaannya.

1. Pilih **Buat**.

Anda sekarang telah membuat alur kerja baru dengan sumber daya placeholder yang dapat digunakan untuk prototipe. Anda dapat [mengekspor](#workflow-studio-components-create-export) definisi alur kerja dan grafik alur kerja Anda.
+ Untuk mengekspor definisi alur kerja Anda sebagai file JSON atau YAMG, dalam mode **Desain** atau **Kode**, pilih tombol dropdown **Tindakan**. Kemudian, di bawah **Definisi ekspor**, pilih format yang ingin Anda ekspor. Anda dapat menggunakan definisi yang diekspor ini sebagai titik awal untuk pengembangan lokal dengan. [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/building-stepfunctions.html)
+ Untuk mengekspor grafik alur kerja Anda ke file SVG atau PNG, dalam mode **Desain** atau **Kode**, pilih tombol dropdown **Tindakan**. Kemudian, di bawah **Definisi ekspor**, pilih format yang Anda inginkan.

# Konfigurasikan input dan output status dengan Workflow Studio di Step Functions
<a name="workflow-studio-process"></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).

Setiap status membuat keputusan atau melakukan tindakan berdasarkan input yang diterimanya. Dalam kebanyakan kasus, kemudian output diteruskan ke status lain. Di Workflow Studio, Anda dapat mengonfigurasi bagaimana status memfilter dan memanipulasi data input dan outputnya di tab **Input** dan **Output** panel. [Panel Inspector](workflow-studio.md#workflow-studio-components-formdefinition) Gunakan tautan **Info** untuk mengakses bantuan kontekstual saat mengonfigurasi input dan output. 

![\[Screenshot ilustratif yang menampilkan input status, output, dan panel bantuan info\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/wfs_input_output_01.png)


Untuk informasi detail tentang bagaimana Step Functions memproses input dan output, lihat [Memproses input dan output di Step Functions](concepts-input-output-filtering.md). 

## Konfigurasikan input ke status
<a name="workflow-studio-process-input"></a>

Setiap status menerima masukan dari status sebelumnya sebagai JSON. Jika Anda ingin memfilter input, Anda dapat menggunakan `InputPath` filter di bawah tab **Input** di [Panel Inspector](workflow-studio.md#workflow-studio-components-formdefinition) panel. `InputPath` adalah string, dimulai dengan `$`, yang mengidentifikasi simpul JSON tertentu. Ini disebut [jalur referensi](amazon-states-language-paths.md), dan mereka mengikuti JsonPath sintaks. 

Untuk memfilter input:
+ Pilih **Filter input dengan InputPath**.
+ Masukkan yang valid [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/)untuk `InputPath` filter. Misalnya, **\$1.data**.

Filter `InputPath` akan ditambahkan ke alur kerja Anda.

**Example Contoh 1: Gunakan InputPath filter di Workflow Studio**  
Katakanlah input ke status Anda mencakup data JSON berikut.  

```
{
  "comment": "Example for InputPath",
  "dataset1": {
    "val1": 1,
    "val2": 2,
    "val3": 3
  },
  "dataset2": {
    "val1": "a",
    "val2": "b",
    "val3": "c"
  }
}
```
Untuk menerapkan `InputPath` filter, pilih **Filter input dengan InputPath**, lalu masukkan jalur referensi yang sesuai. Jika Anda masuk**\$1.dataset2.val1**, JSON berikut diteruskan sebagai masukan ke status.  

```
{"a"}
```
Jalur referensi juga dapat memiliki pilihan nilai. Jika data yang Anda referensikan adalah `{ "a": [1, 2, 3, 4] }` dan Anda menerapkan jalur referensi `$.a[0:2]` sebagai `InputPath` filter, berikut ini adalah hasilnya.  

```
[ 1, 2 ]
```

[Status alur kerja paralel](state-parallel.md),[Memetakan status alur kerja](state-map.md), dan status [Lulus status alur kerja](state-pass.md) aliran memiliki opsi pemfilteran input tambahan yang disebut `Parameters` di bawah tab **Input** mereka. Filter ini berlaku setelah InputPath filter dan dapat digunakan untuk membangun objek JSON kustom yang terdiri dari satu atau lebih pasangan kunci-nilai. Nilai masing-masing pasangan dapat berupa nilai statis, dapat dipilih dari input, atau dapat dipilih dari [Mengakses data eksekusi dari objek Context di Step Functions](input-output-contextobject.md) dengan jalur. 

**catatan**  
Untuk menentukan bahwa parameter menggunakan jalur referensi untuk menunjuk ke simpul JSON di input, nama parameter harus diakhiri dengan `.$`.

**Example Contoh 2: Buat input JSON kustom untuk status Paralel**  
Katakanlah data JSON berikut adalah input ke keadaan Paralel.  

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

Untuk memilih bagian dari input ini dan meneruskan pasangan nilai kunci tambahan dengan nilai statis, Anda dapat menentukan yang berikut di bidang **Parameter**, di bawah tab **Input** status **Paralel**.

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

Data JSON berikut akan menjadi hasilnya.

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

## Konfigurasikan output status
<a name="workflow-studio-process-output"></a>

Setiap status menghasilkan output JSON yang dapat difilter sebelum diteruskan ke status berikutnya. Ada beberapa filter yang tersedia, dan masing-masing mempengaruhi output dengan cara yang berbeda. Filter keluaran yang tersedia untuk setiap status tercantum di bawah tab **Output** di panel **Inspector**. Untuk [Status alur kerja tugas](state-task.md) negara bagian, filter keluaran apa pun yang Anda pilih diproses dalam urutan ini: 

1.  `ResultSelector`: Gunakan filter ini untuk memanipulasi hasil status. Anda dapat membangun sebuah objek JSON baru dengan bagian dari hasil. 

1.  `Menentukan output status menggunakan Step ResultPath Functions`: Gunakan filter ini untuk memilih kombinasi input status dan hasil tugas untuk diteruskan ke output. 

1.  `Memfilter output status menggunakan OutputPath`: Gunakan filter ini untuk memfilter output JSON untuk memilih informasi mana dari hasil yang akan diteruskan ke status berikutnya. 

### Gunakan ResultSelector
<a name="workflow-studio-process-output-resultselector"></a>

`ResultSelector` adalah filter output opsional untuk status berikut:
+  [Status alur kerja tugas](state-task.md)negara bagian, yang merupakan semua status yang tercantum di tab **Tindakan** pada[Peramban status](workflow-studio.md#workflow-studio-components-states). 
+  [Memetakan status alur kerja](state-map.md)states, di tab **Flow** pada browser States. 
+  [Status alur kerja paralel](state-parallel.md)states, di tab **Flow** pada browser States. 

`ResultSelector` dapat digunakan untuk membangun sebuah objek JSON kustom yang terdiri atas satu pasangan nilai kunci atau lebih. Nilai masing-masing pasangan dapat berupa nilai statis atau dipilih dari hasil status dengan jalur. 

**catatan**  
Untuk menentukan bahwa parameter menggunakan jalur untuk mereferensikan simpul JSON dalam hasil, nama parameter harus diakhiri dengan `.$`.

**Example Contoh untuk menggunakan ResultSelector filter**  
Dalam contoh ini, Anda gunakan `ResultSelector` untuk memanipulasi respons dari panggilan Amazon CreateCluster EMR API untuk status `CreateCluster` EMR Amazon. Berikut ini adalah hasil dari panggilan Amazon EMR `CreateCluster` API.  

```
{
  "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"
  }
}
```
Untuk memilih bagian dari informasi ini dan meneruskan pasangan kunci-nilai tambahan dengan nilai statis, tentukan yang berikut ini di **ResultSelector**bidang, di bawah tab **Output** negara bagian.  

```
{
 "result": "found",
 "ClusterId.$": "$.output.ClusterId", 
 "ResourceType.$": "$.resourceType"
 }
```
Menggunakan `ResultSelector` menghasilkan hasil sebagai berikut.  

```
{
 "result": "found",
 "ClusterId": "AKIAIOSFODNN7EXAMPLE",
 "ResourceType": "elasticmapreduce"
}
```

### Gunakan ResultPath
<a name="workflow-studio-process-output-resultpath"></a>

Output dari suatu keadaan dapat berupa salinan inputnya, hasil yang dihasilkannya, atau kombinasi input dan hasilnya. Gunakan `ResultPath` untuk mengontrol kombinasi ini yang akan diteruskan ke output status. Untuk kasus penggunaan `ResultPath` lebih banyak, lihat [Menentukan output status menggunakan Step ResultPath Functions](input-output-resultpath.md).

`ResultPath` adalah filter output opsional untuk status berikut:
+  [Status alur kerja tugas](state-task.md)negara bagian, yang merupakan semua status yang tercantum di tab **Tindakan** pada browser Negara. 
+  [Memetakan status alur kerja](state-map.md)states, di tab **Flow** pada browser States. 
+  [Status alur kerja paralel](state-parallel.md)states, di tab **Flow** pada browser States. 
+  [Lulus status alur kerja](state-pass.md)states, di tab **Flow** pada browser States. 

`ResultPath` dapat digunakan untuk menambahkan hasilnya ke input status asli. Jalur yang ditentukan menunjukkan tempat untuk menambahkan hasilnya.

**Example Contoh untuk menggunakan ResultPath filter**  
Katakanlah berikut ini adalah masukan ke status Tugas.  

```
{
  "details": "Default example",
  "who": "AWS Step Functions"
}
```
Hasil dari status Tugas adalah sebagai berikut.  

```
Hello, AWS Step Functions
```
Anda dapat menambahkan hasil ini ke input status dengan menerapkan `ResultPath` dan memasukkan [jalur](amazon-states-language-paths.md) referensi yang menunjukkan tempat untuk menambahkan hasilnya, seperti `$.taskresult`:  
Dengan `ResultPath` ini, berikut adalah JSON yang diteruskan sebagai output status.  

```
{
  "details": "Default example",
  "who": "AWS Step Functions",
  "taskresult": "Hello, AWS Step Functions!"
}
```

### Gunakan OutputPath
<a name="workflow-studio-process-output-resultselector"></a>

`OutputPath`Filter memungkinkan Anda menyaring informasi yang tidak diinginkan, dan hanya meneruskan sebagian JSON yang Anda butuhkan. `OutputPath`Ini adalah string, dimulai dengan`$`, yang mengidentifikasi node dalam teks JSON.

**Example Contoh untuk menggunakan OutputPath filter**  
Bayangkan panggilan API Lambda Invoke mengembalikan metadata selain hasil fungsi Lambda.  

```
{
  "ExecutedVersion": "$LATEST",
  "Payload": {
     "foo": "bar",
     "colors": [
          "red",
          "blue",
          "green"    
     ],
     "car": {
          "year": 2008,
          "make": "Toyota",
          "model": "Matrix"
     }
   },
"SdkHttpMetadata": {
  "AllHttpHeaders": {
    "X-Amz-Executed-Version": ["$LATEST"]
...
```
Anda dapat menggunakan `OutputPath` untuk memfilter metadata tambahan. Secara default, nilai **OutputPath**filter untuk status Lambda Invoke yang dibuat melalui Workflow Studio adalah. `$.Payload` Nilai default ini menghapus metadata tambahan dan mengembalikan output yang setara dengan menjalankan fungsi Lambda secara langsung.  
Contoh hasil tugas Lambda Invoke dan nilai `$.Payload` untuk filter **Output** meneruskan data JSON berikut sebagai output.  

```
{
 "foo": "bar",
 "colors": [
      "red",
      "blue",
      "green"    
 ],
 "car": {
      "year": 2008,
      "make": "Toyota",
      "model": "Matrix"
 }
}
```
`OutputPath`Filter adalah filter keluaran terakhir yang berlaku, jadi jika Anda menggunakan filter keluaran tambahan seperti `ResultSelector` atau`ResultPath`, Anda harus memodifikasi nilai default `$.Payload` untuk `OutputPath` filter yang sesuai. 

# Siapkan peran eksekusi dengan Workflow Studio di Step Functions
<a name="manage-state-machine-permissions"></a>

Anda dapat menggunakan Workflow Studio untuk mengatur peran eksekusi untuk alur kerja Anda. Setiap mesin Step Functions status memerlukan peran AWS Identity and Access Management (IAM) yang memberikan izin mesin status untuk melakukan tindakan Layanan AWS dan sumber daya atau memanggil HTTPS APIs. Peran ini disebut *peran eksekusi*. 

Peran eksekusi harus berisi IAM kebijakan untuk setiap tindakan, misalnya kebijakan yang memungkinkan mesin status memanggil AWS Lambda fungsi, menjalankan AWS Batch pekerjaan, atau memanggil Stripe API. Step Functionsmengharuskan Anda untuk memberikan peran eksekusi dalam kasus berikut:
+ Anda membuat mesin status di konsol, AWS SDKs atau AWS CLI menggunakan [CreateStateMachine](https://docs.aws.amazon.com/step-functions/latest/apireference/API_CreateStateMachine.html)API.
+ Anda [menguji](test-state-isolation.md) status di konsol AWS SDKs, atau AWS CLI menggunakan [TestState](https://docs.aws.amazon.com/step-functions/latest/apireference/API_TestState.html)API.

**Topics**
+ [Tentang peran yang dibuat secara otomatis](#wfs-auto-gen-roles)
+ [Secara otomatis menghasilkan peran](#auto-generating-roles)
+ [Menyelesaikan masalah generasi peran](#resolve-role-gen-problem)
+ [Peran untuk menguji Tugas HTTP di Workflow Studio](#test-state-role-http)
+ [Peran untuk menguji integrasi layanan yang dioptimalkan di Workflow Studio](#test-state-role-optimized)
+ [Peran untuk menguji integrasi layanan AWS SDK di Workflow Studio](#test-state-role-aws-sdk)
+ [Peran untuk menguji status alur di Workflow Studio](#test-state-role-flow)

## Tentang peran yang dibuat secara otomatis
<a name="wfs-auto-gen-roles"></a>

Saat Anda membuat mesin status di Step Functions konsol, [Workflow Studio](workflow-studio.md) dapat secara otomatis membuat peran eksekusi untuk Anda yang berisi IAM kebijakan yang diperlukan. Workflow Studio menganalisis definisi mesin status Anda dan menghasilkan kebijakan dengan hak istimewa paling sedikit yang diperlukan untuk menjalankan alur kerja Anda.

Workflow Studio dapat menghasilkan IAM kebijakan untuk hal-hal berikut:
+ [HTTP Tasks](call-https-apis.md) yang memanggil HTTPS APIs.
+ Status tugas yang memanggil lainnya Layanan AWS menggunakan [integrasi yang dioptimalkan](integrate-optimized.md), seperti [LambdaInvoke](connect-lambda.md), [DynamoDB GetItem](connect-batch.md), atau. [AWS Glue StartJobRun](connect-glue.md)
+ Status tugas yang menjalankan [alur kerja bersarang](connect-stepfunctions.md).
+ [Status Peta Terdistribusi](state-map-distributed.md), termasuk [kebijakan](iam-policies-eg-dist-map.md) untuk memulai eksekusi alur kerja anak, mencantumkan Amazon S3 bucket, dan membaca atau menulis objek S3.
+ [X-Ray](concepts-xray-tracing.md)melacak. Setiap peran yang dibuat secara otomatis di Workflow Studio berisi [kebijakan](concepts-xray-tracing.md#xray-iam) yang memberikan izin untuk mesin status untuk mengirim jejak. X-Ray
+ [Menggunakan CloudWatch Log untuk mencatat riwayat eksekusi di Step Functions](cw-logs.md)saat logging diaktifkan pada mesin status.

Workflow Studio tidak dapat membuat IAM kebijakan untuk status Tugas yang memanggil lainnya Layanan AWS menggunakan integrasi [AWS SDK](supported-services-awssdk.md).

## Secara otomatis menghasilkan peran
<a name="auto-generating-roles"></a>

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home), pilih **State Machines** dari menu, lalu pilih **Create state machine**.

   Anda juga dapat memperbarui mesin status yang ada. Lihat Langkah 4 jika Anda memperbarui mesin status.

1. Pilih **Buat dari kosong**.

1. Beri nama mesin status Anda, lalu pilih **Lanjutkan** untuk mengedit mesin status Anda di Workflow Studio.

1. Pilih tab **Config**.

1. Gulir ke bawah ke bagian **Izin**, dan lakukan hal berikut:

   1. Untuk **peran Eksekusi**, pastikan Anda menyimpan pilihan default **Buat peran baru**.

      Workflow Studio secara otomatis menghasilkan semua IAM kebijakan yang diperlukan untuk setiap status valid dalam definisi mesin status Anda. Ini menampilkan spanduk dengan pesan, **Peran eksekusi akan dibuat dengan izin penuh**.  
![\[Tangkapan layar ilustratif dari tab Config dengan pratinjau izin yang dibuat secara otomatis.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/wfs-full-permissions-role.png)
**Tip**  
Untuk meninjau izin yang dibuat secara otomatis Workflow Studio untuk mesin status Anda, pilih **Tinjau izin yang dibuat secara otomatis**.
**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. 

      Jika Workflow Studio tidak dapat membuat semua IAM kebijakan yang diperlukan, itu akan menampilkan spanduk dengan pesan **Izin untuk tindakan tertentu tidak dapat dibuat secara otomatis. IAMPeran akan dibuat dengan izin sebagian saja.** Untuk informasi tentang cara menambahkan izin yang hilang, lihat[Menyelesaikan masalah generasi peran](#resolve-role-gen-problem).

   1. Pilih **Buat** jika Anda membuat mesin status. Jika tidak, pilih **Simpan**.

   1. Pilih **Konfirmasi** di kotak dialog yang muncul.

      Workflow Studio menyimpan mesin status Anda dan membuat peran eksekusi baru.

## Menyelesaikan masalah generasi peran
<a name="resolve-role-gen-problem"></a>

Workflow Studio tidak dapat secara otomatis menghasilkan peran eksekusi dengan semua izin yang diperlukan dalam kasus berikut:
+ Ada kesalahan di mesin negara Anda. Pastikan untuk menyelesaikan semua kesalahan validasi di Workflow Studio. Juga, pastikan bahwa Anda mengatasi kesalahan sisi server yang Anda temui selama penyimpanan.
+ Mesin status Anda berisi tugas menggunakan integrasi AWS SDK. Workflow Studio tidak dapat [membuat IAM kebijakan secara otomatis](#auto-generating-roles) dalam kasus ini. Workflow Studio menampilkan spanduk dengan pesan, **Izin untuk tindakan tertentu tidak dapat dibuat secara otomatis. IAMPeran akan dibuat dengan izin sebagian saja.** Di tabel **Meninjau izin yang dibuat secara otomatis**, pilih konten di **Status** untuk informasi selengkapnya tentang kebijakan yang tidak ada peran eksekusi Anda. Workflow Studio masih dapat menghasilkan peran eksekusi, tetapi peran ini tidak akan berisi IAM kebijakan untuk semua tindakan. Lihat tautan di bawah **tautan Dokumentasi** untuk menulis kebijakan Anda sendiri dan menambahkannya ke peran setelah dibuat. Tautan ini tersedia bahkan setelah Anda menyimpan mesin negara.

## Peran untuk menguji Tugas HTTP di Workflow Studio
<a name="test-state-role-http"></a>

[Menguji](call-https-apis.md#http-task-test) status Tugas HTTP memerlukan peran eksekusi. Jika Anda tidak memiliki peran dengan izin yang memadai, gunakan salah satu opsi berikut untuk membuat peran:
+ **Buat peran secara otomatis dengan Workflow Studio (disarankan)** - Ini adalah opsi aman. Tutup kotak dialog **Test state** dan ikuti instruksi di[Secara otomatis menghasilkan peran](#auto-generating-roles). Ini akan mengharuskan Anda untuk membuat atau memperbarui mesin status Anda terlebih dahulu, kemudian kembali ke Workflow Studio untuk menguji status Anda.
+ **Gunakan peran dengan akses Administrator** — Jika Anda memiliki izin untuk membuat peran dengan akses penuh ke semua layanan dan sumber daya AWS, Anda dapat menggunakan peran tersebut untuk menguji semua jenis status dalam alur kerja Anda. Untuk melakukan ini, Anda dapat membuat peran Step Functions layanan dan menambahkan [AdministratorAccess kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) ke dalamnya di IAM konsol [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

## Peran untuk menguji integrasi layanan yang dioptimalkan di Workflow Studio
<a name="test-state-role-optimized"></a>

Tugas menyatakan bahwa [integrasi layanan yang dioptimalkan](integrate-optimized.md) panggilan memerlukan peran eksekusi. Jika Anda tidak memiliki peran dengan izin yang memadai, gunakan salah satu opsi berikut untuk membuat peran:
+ **Buat peran secara otomatis dengan Workflow Studio (disarankan)** - Ini adalah opsi aman. Tutup kotak dialog **Test state** dan ikuti instruksi di[Secara otomatis menghasilkan peran](#auto-generating-roles). Ini akan mengharuskan Anda untuk membuat atau memperbarui mesin status Anda terlebih dahulu, kemudian kembali ke Workflow Studio untuk menguji status Anda.
+ **Gunakan peran dengan akses Administrator** — Jika Anda memiliki izin untuk membuat peran dengan akses penuh ke semua layanan dan sumber daya AWS, Anda dapat menggunakan peran tersebut untuk menguji semua jenis status dalam alur kerja Anda. Untuk melakukan ini, Anda dapat membuat peran Step Functions layanan dan menambahkan [AdministratorAccess kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) ke dalamnya di IAM konsol [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

## Peran untuk menguji integrasi layanan AWS SDK di Workflow Studio
<a name="test-state-role-aws-sdk"></a>

Tugas menyatakan bahwa [integrasi AWS SDK](supported-services-awssdk.md) panggilan memerlukan peran eksekusi. Jika Anda tidak memiliki peran dengan izin yang memadai, gunakan salah satu opsi berikut untuk membuat peran:
+ **Buat peran secara otomatis dengan Workflow Studio (disarankan)** - Ini adalah opsi aman. Tutup kotak dialog **Test state** dan ikuti instruksi di[Secara otomatis menghasilkan peran](#auto-generating-roles). Ini akan mengharuskan Anda untuk membuat atau memperbarui mesin status Anda terlebih dahulu, kemudian kembali ke Workflow Studio untuk menguji status Anda. Lakukan hal-hal berikut:

  1. Tutup kotak dialog **Status uji**

  1. Pilih tab **Config** untuk melihat mode Config.

  1. Gulir ke bawah ke bagian **Izin**.

  1. Workflow Studio menampilkan spanduk dengan pesan, **Izin untuk tindakan tertentu tidak dapat dibuat secara otomatis. IAMPeran akan dibuat dengan izin sebagian saja.** Pilih **Tinjau izin yang dibuat secara otomatis**.

  1. **Tabel izin yang dibuat secara otomatis** akan menampilkan baris yang menunjukkan tindakan yang sesuai dengan status tugas yang ingin Anda uji. Lihat tautan di bawah **tautan Dokumentasi** untuk menulis IAM kebijakan Anda sendiri ke dalam peran khusus.
+ **Gunakan peran dengan akses Administrator** — Jika Anda memiliki izin untuk membuat peran dengan akses penuh ke semua layanan dan sumber daya AWS, Anda dapat menggunakan peran tersebut untuk menguji semua jenis status dalam alur kerja Anda. Untuk melakukan ini, Anda dapat membuat peran Step Functions layanan dan menambahkan [AdministratorAccess kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) ke dalamnya di IAM konsol [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

## Peran untuk menguji status alur di Workflow Studio
<a name="test-state-role-flow"></a>

Anda memerlukan peran eksekusi untuk menguji status alur di Workflow Studio. Status aliran adalah keadaan yang mengarahkan aliran eksekusi, seperti[Status alur kerja pilihan](state-choice.md),, [Status alur kerja paralel](state-parallel.md)[Memetakan status alur kerja](state-map.md),[Lulus status alur kerja](state-pass.md),[Tunggu status alur kerja](state-wait.md),[Status alur kerja yang berhasil](state-succeed.md), atau[Status alur kerja gagal](state-fail.md). [TestState](https://docs.aws.amazon.com/step-functions/latest/apireference/API_TestState.html)API tidak berfungsi dengan status Peta atau Paralel. Gunakan salah satu opsi berikut untuk membuat peran untuk menguji status aliran:
+ **Gunakan peran apa pun dalam Akun AWS (disarankan) Anda** — Status aliran tidak memerlukan IAM kebijakan khusus apa pun, karena tidak memanggil AWS tindakan atau sumber daya. Karena itu, Anda dapat menggunakan IAM peran apa pun dalam peran Anda Akun AWS. 

  1. Dalam kotak dialog **Status uji**, pilih peran apa pun dari daftar tarik-turun **peran Eksekusi**.

  1. Jika tidak ada peran yang muncul di daftar dropdown, lakukan hal berikut:

     1. Di IAM konsol [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/), pilih **Peran**.

     1. Pilih peran dari daftar, dan salin ARN dari halaman detail peran. Anda harus memberikan ARN ini di kotak dialog **status Uji**.

     1. Dalam kotak dialog **Status uji**, pilih **Masukkan ARN peran** dari daftar tarik-turun **peran Eksekusi**.

     1. Tempelkan ARN di Peran **ARN**.
+ **Gunakan peran dengan akses Administrator** — Jika Anda memiliki izin untuk membuat peran dengan akses penuh ke semua layanan dan sumber daya AWS, Anda dapat menggunakan peran tersebut untuk menguji semua jenis status dalam alur kerja Anda. Untuk melakukan ini, Anda dapat membuat peran Step Functions layanan dan menambahkan [AdministratorAccess kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) ke dalamnya di IAM konsol [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

# Konfigurasikan penanganan kesalahan dengan Workflow Studio di Step Functions
<a name="workflow-studio-process-error"></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).

Anda dapat mengonfigurasi penanganan kesalahan dalam editor visual Workflow Studio. Secara default, ketika status melaporkan kesalahan, Step Functions menyebabkan eksekusi alur kerja gagal sepenuhnya. Untuk tindakan dan beberapa status alur, Anda dapat mengonfigurasi cara Step Functions menangani kesalahan. 

Bahkan jika Anda telah mengonfigurasi penanganan kesalahan, beberapa kesalahan mungkin masih menyebabkan eksekusi alur kerja gagal. Untuk informasi selengkapnya, lihat [Menangani kesalahan dalam alur kerja Step Functions](concepts-error-handling.md). Di Workflow Studio, konfigurasikan penanganan **kesalahan di tab Penanganan kesalahan** pada. [Panel Inspector](workflow-studio.md#workflow-studio-components-formdefinition) 

## Coba lagi pada kesalahan
<a name="workflow-studio-process-error-retry"></a>

Anda dapat menambahkan satu aturan atau lebih ke status tindakan dan status alur [Status alur kerja paralel](state-parallel.md) untuk mencoba lagi tugas ketika terjadi kesalahan. Aturan-aturan ini disebut *retriers*. Untuk menambahkan retrier, pilih ikon edit di kotak **Retrier \$11**, lalu konfigurasikan opsinya:
+ (Opsional) Di kolom **Komentar**, tambahkan komentar Anda. Ini tidak akan memengaruhi alur kerja, tetapi dapat digunakan untuk membuat anotasi alur kerja Anda. 
+ Tempatkan kursor di bidang **Kesalahan** dan pilih kesalahan yang akan memicu retrier, atau masukkan nama kesalahan khusus. Anda dapat memilih atau menambahkan beberapa kesalahan.
+ (Opsional) Atur **Interval**. Ini adalah waktu dalam detik sebelum Step Functions melakukan percobaan ulang pertama. Percobaan ulang tambahan akan mengikuti interval yang dapat Anda konfigurasikan dengan **Percobaan maks** dan **Tingkat backoff**.
+ (Opsional) Atur **Percobaan maks**. Ini adalah jumlah maksimum percobaan ulang sebelum Step Functions akan menyebabkan eksekusi gagal.
+ (Opsional) Atur **Tingkat backoff**. Ini adalah pengganda yang menentukan berapa banyak interval percobaan ulang akan meningkat dengan setiap usaha.

**catatan**  
Tidak semua opsi penanganan kesalahan tersedia untuk semua status. Lambda Invoke memiliki satu retrier yang dikonfigurasi secara default.

## Tangkap kesalahan
<a name="workflow-studio-process-error-catch"></a>

Anda dapat menambahkan satu atau beberapa aturan ke status tindakan [Status alur kerja paralel](state-parallel.md) dan ke status and [Memetakan status alur kerja](state-map.md) flow untuk menangkap kesalahan. Aturan-aturan ini disebut *catcher*. Untuk menambahkan catcher, pilih **Tambahkan catcher baru**, lalu konfigurasikan opsinya:
+ (Opsional) Di kolom **Komentar**, tambahkan komentar Anda. Ini tidak akan memengaruhi alur kerja, tetapi dapat digunakan untuk membuat anotasi alur kerja Anda. 
+ Tempatkan kursor di bidang **Kesalahan** dan pilih kesalahan yang akan memicu penangkap, atau masukkan nama kesalahan khusus. Anda dapat memilih atau menambahkan beberapa kesalahan.
+ [Di bidang **status Fallback**, pilih status mundur.](concepts-error-handling.md#error-handling-fallback-states) Ini adalah status saat alur kerja akan berpindah ke berikutnya, setelah kesalahan tertangkap.
+ (Opsional) Di **ResultPath**lapangan, tambahkan `ResultPath` filter untuk menambahkan kesalahan ke input status asli. [`ResultPath`](input-output-resultpath.md)Harus valid [JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/). Ini akan dikirim ke status fallback.

## Timeout
<a name="workflow-studio-process-error-timeout"></a>

Anda dapat mengonfigurasi waktu habis untuk status tindakan untuk menetapkan jumlah maksimum detik status Anda dapat menjalankan sebelum gagal. Gunakan waktu habis untuk mencegah eksekusi macet. Untuk mengonfigurasi waktu habis, masukkan jumlah detik status Anda harus menunggu sebelum eksekusi gagal. Untuk informasi selengkapnya tentang batas waktu, lihat `TimeoutSeconds` di [Status alur kerja tugas](state-task.md) negara bagian.

## HeartbeatSeconds
<a name="workflow-studio-process-error-heartbeat"></a>

Anda dapat mengonfigurasi *Detak Jantung* atau pemberitahuan berkala yang dikirim oleh tugas Anda. Jika Anda menetapkan interval heartbeat, dan status Anda tidak mengirim notifikasi heartbeat dalam interval yang dikonfigurasi, tugas ditandai sebagai gagal. Untuk mengonfigurasi heartbeat, tetapkan jumlah detik dalam bilangan bulat positif, bukan nol. Untuk informasi lebih lanjut, lihat `HeartBeatSeconds` di [Status alur kerja tugas](state-task.md) negara bagian. 

# Menggunakan Workflow Studio Infrastructure Composer untuk membangun alur kerja Step Functions
<a name="use-wfs-in-app-composer"></a>

Workflow Studio tersedia Infrastructure Composer untuk membantu Anda merancang dan membangun alur kerja Anda. Workflow Studio Infrastructure Composer menyediakan infrastruktur visual sebagai lingkungan kode (IAc) yang memudahkan Anda untuk menggabungkan alur kerja dalam aplikasi tanpa server yang dibangun menggunakan alat IAc, seperti template. CloudFormation 

AWS Infrastructure Composeradalah pembangun visual yang membantu Anda mengembangkan AWS SAM dan membuat AWS CloudFormation templat menggunakan antarmuka grafis sederhana. DenganInfrastructure Composer, Anda merancang arsitektur aplikasi dengan menyeret, mengelompokkan, dan menghubungkan Layanan AWS dalam kanvas visual. Infrastructure Composerkemudian membuat template IAC dari desain Anda yang dapat Anda gunakan untuk menyebarkan aplikasi Anda dengan AWS SAM Command Line Interface (AWS SAMCLI) atau. CloudFormation Untuk mempelajari lebih lanjut tentangInfrastructure Composer, lihat [Apa itu Infrastructure Composer](https://docs.aws.amazon.com/application-composer/latest/dg/what-is-composer.html).

Saat Anda menggunakan Workflow Studio diInfrastructure Composer, Infrastructure Composer menghubungkan setiap langkah alur kerja ke AWS sumber daya dan menghasilkan konfigurasi sumber daya dalam templat. AWS SAM Infrastructure Composerjuga menambahkan IAM izin yang diperlukan agar alur kerja Anda berjalan. Menggunakan Workflow Studio inInfrastructure Composer, Anda dapat membuat prototipe aplikasi Anda dan mengubahnya menjadi aplikasi siap produksi.

Saat Anda menggunakan Workflow Studio diInfrastructure Composer, Anda dapat beralih bolak-balik antara Infrastructure Composer kanvas dan Workflow Studio.

**Topics**
+ [Menggunakan Workflow Studio di Infrastructure Composer](#procedure-use-wfs-in-app-composer)
+ [Referensi sumber daya secara dinamis menggunakan substitusi CloudFormation definisi](#use-cfn-sub-edit-state-machine-resource)
+ [Connect tugas integrasi layanan ke kartu komponen yang disempurnakan](#connect-service-integrations-enhanced-cards)
+ [Impor proyek yang ada dan sinkronkan secara lokal](#import-projects-local-sync)
+ [Ekspor alur kerja Step Functions langsung ke AWS Infrastructure Composer](#export-wsf-projects-into-app-composer)
+ [Fitur Workflow Studio yang tidak tersedia di AWS Infrastructure Composer](#wfs-features-unavailable-app-composer)

## Menggunakan Workflow Studio Infrastructure Composer untuk membangun alur kerja tanpa server
<a name="procedure-use-wfs-in-app-composer"></a>

1. Buka [konsol Infrastructure Composer](https://console.aws.amazon.com/composer/home) dan pilih **Create project** untuk membuat proyek.

1. Di bidang pencarian di palet **Sumber Daya**, masukkan**state machine**.

1. Seret sumber daya **mesin Step Functions State** ke kanvas. 

1. Pilih **Edit di Workflow Studio** untuk mengedit sumber daya mesin status Anda.

   Animasi berikut menunjukkan bagaimana Anda dapat beralih ke Workflow Studio untuk mengedit definisi mesin status Anda.  
![\[Animasi yang mengilustrasikan bagaimana Anda dapat menggunakan Workflow Studio di. Infrastructure Composer\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/use-wfs-in-app-composer.gif)

   Integrasi dengan Workflow Studio untuk mengedit sumber daya state machine yang dibuat hanya Infrastructure Composer tersedia untuk [https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html)sumber daya. Integrasi ini tidak tersedia untuk template yang menggunakan [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html)sumber daya.

## Referensi sumber daya secara dinamis menggunakan substitusi CloudFormation definisi di Workflow Studio
<a name="use-cfn-sub-edit-state-machine-resource"></a>

Di Workflow Studio, Anda dapat menggunakan substitusi CloudFormation definisi dalam definisi alur kerja untuk mereferensikan sumber daya secara dinamis yang telah Anda tentukan dalam template IAc Anda. Anda dapat menambahkan substitusi placeholder ke definisi alur kerja Anda menggunakan `${dollar_sign_brace}` notasi dan diganti dengan nilai aktual selama proses pembuatan tumpukan. CloudFormation Untuk informasi lebih lanjut tentang substitusi definisi, lihat. [DefinitionSubstitutions dalam AWS SAM template](concepts-sam-sfn.md#sam-definition-substitution-eg)

Animasi berikut menunjukkan bagaimana Anda dapat menambahkan substitusi placeholder untuk sumber daya dalam definisi mesin status Anda.

![\[Animasi yang menunjukkan cara menambahkan substitusi placeholder untuk sumber daya di mesin status Anda.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/use-def-sub-wfs-app-composer.gif)


## Connect tugas integrasi layanan ke kartu komponen yang disempurnakan
<a name="connect-service-integrations-enhanced-cards"></a>

Anda dapat menghubungkan tugas yang memanggil [integrasi layanan yang dioptimalkan ke kartu komponen yang](integrate-optimized.md) [disempurnakan](https://docs.aws.amazon.com/application-composer/latest/dg/reference-cards.html#reference-cards-enhanced-components) di Infrastructure Composer kanvas. Melakukan hal ini secara otomatis memetakan setiap substitusi placeholder yang ditentukan oleh `${dollar_sign_brace}` notasi dalam definisi alur kerja Anda dan properti untuk sumber daya Anda. `DefinitionSubstitution` `StateMachine` Ini juga menambahkan AWS SAM kebijakan yang sesuai untuk mesin negara.

Jika Anda memetakan tugas integrasi layanan yang dioptimalkan dengan [kartu komponen standar](https://docs.aws.amazon.com/application-composer/latest/dg/using-composer-cards.html#using-composer-cards-component-intro), jalur koneksi tidak muncul di Infrastructure Composer kanvas.

Animasi berikut menunjukkan bagaimana Anda dapat menghubungkan tugas yang dioptimalkan ke kartu komponen yang disempurnakan dan melihat perubahan di [https://docs.aws.amazon.com/application-composer/latest/dg/using-change-inspector.html](https://docs.aws.amazon.com/application-composer/latest/dg/using-change-inspector.html).

![\[Animasi yang menunjukkan cara menghubungkan tugas dan integrasi layanan yang dioptimalkan.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/make-connections-wfs-app-composer.gif)


Anda tidak dapat menghubungkan [integrasi AWS SDK](supported-services-awssdk.md) dalam status Tugas dengan kartu komponen yang disempurnakan atau integrasi layanan yang dioptimalkan dengan kartu komponen standar. Untuk tugas-tugas ini, Anda dapat memetakan substitusi di panel **Resource properties** di Infrastructure Composer canvas, dan menambahkan kebijakan dalam template. AWS SAM

**Tip**  
**Atau, Anda juga dapat memetakan substitusi placeholder untuk mesin status Anda di bawah **Substitusi Definisi di panel properti Resource.**** Ketika Anda melakukan ini, Anda harus menambahkan izin yang diperlukan untuk panggilan status Tugas Layanan AWS Anda dalam peran eksekusi mesin status. Untuk informasi tentang izin yang mungkin diperlukan peran eksekusi Anda, lihat[Siapkan peran eksekusi dengan Workflow Studio di Step Functions](manage-state-machine-permissions.md).

**Animasi berikut menunjukkan bagaimana Anda dapat memperbarui pemetaan substitusi placeholder secara manual di panel properti Resource.**

![\[Animasi yang menunjukkan cara memperbarui pemetaan substitusi placeholder di panel properti sumber daya.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/manual-update-placeholder-mapping.gif)


## Impor proyek yang ada dan sinkronkan secara lokal
<a name="import-projects-local-sync"></a>

Anda dapat membuka yang ada CloudFormation dan AWS SAM proyek Infrastructure Composer untuk memvisualisasikannya untuk pemahaman yang lebih baik dan memodifikasi desain mereka. Menggunakan Infrastructure Composer fitur [sinkronisasi lokal](https://docs.aws.amazon.com/application-composer/latest/dg/reference-features-local-sync.html), Anda dapat secara otomatis menyinkronkan dan menyimpan file template dan kode Anda ke mesin build lokal Anda. Menggunakan mode sinkronisasi lokal dapat melengkapi alur pengembangan yang ada. Pastikan browser Anda mendukung [File System Access API](https://docs.aws.amazon.com/application-composer/latest/dg/reference-fsa.html), yang memungkinkan aplikasi web membaca, menulis, dan menyimpan file di sistem file lokal Anda. Sebaiknya gunakan Google Chrome atau Microsoft Edge.

## Ekspor alur kerja Step Functions langsung ke AWS Infrastructure Composer
<a name="export-wsf-projects-into-app-composer"></a>

 AWS Step Functions Konsol menyediakan kemampuan untuk mengekspor alur kerja mesin status tersimpan sebagai templat yang diakui sebagai sumber daya IAC tingkat lanjut oleh. Infrastructure Composer Fitur ini membuat template IAc sebagai AWS SAM skema dan menavigasi Anda ke. Infrastructure Composer Untuk informasi selengkapnya, lihat [Mengekspor alur kerja Anda ke templat IAc](exporting-iac-templates.md).

## Fitur Workflow Studio yang tidak tersedia di AWS Infrastructure Composer
<a name="wfs-features-unavailable-app-composer"></a>

Saat Anda menggunakan Workflow Studio diInfrastructure Composer, beberapa fitur Workflow Studio tidak tersedia. Selain itu, bagian **Parameter API** yang tersedia di [Panel Inspector](workflow-studio.md#workflow-studio-components-formdefinition) panel mendukung substitusi CloudFormation definisi. Anda dapat menambahkan substitusi dalam [Mode kode](workflow-studio.md#wfs-interface-code-mode) menggunakan notasi. `${dollar_sign_brace}` Untuk informasi lebih lanjut tentang notasi ini, lihat[DefinitionSubstitutions dalam AWS SAM template](concepts-sam-sfn.md#sam-definition-substitution-eg).

Daftar berikut menjelaskan fitur Workflow Studio yang tidak tersedia saat Anda menggunakan Workflow Studio di: Infrastructure Composer
+ [Template pemula](starter-templates.md) - Template pemula adalah proyek ready-to-run sampel yang secara otomatis membuat prototipe dan definisi alur kerja. Template ini menyebarkan semua AWS sumber daya terkait yang dibutuhkan proyek Anda Akun AWS.
+ Mode [Config — Mode](workflow-studio.md#wfs-interface-config-mode) ini memungkinkan Anda mengelola konfigurasi mesin status Anda. Anda dapat memperbarui konfigurasi mesin status Anda di templat IAC Anda atau menggunakan panel **properti Sumber Daya** di Infrastructure Composer kanvas. Untuk informasi tentang memperbarui konfigurasi di panel **Properti sumber daya**, lihat[Connect tugas integrasi layanan ke kartu komponen yang disempurnakan](#connect-service-integrations-enhanced-cards).
+ API [TestState](test-state-isolation.md)
+ Opsi untuk mengimpor atau mengekspor definisi alur kerja dari tombol dropdown **Tindakan** di Workflow Studio. Sebagai gantinya, dari Infrastructure Composer **menu**, pilih **Open** > **Project folder**. Pastikan Anda telah mengaktifkan mode [sinkronisasi lokal](https://docs.aws.amazon.com/application-composer/latest/dg/reference-features-local-sync.html) untuk secara otomatis menyimpan perubahan Anda di Infrastructure Composer kanvas langsung ke mesin lokal Anda.
+ **Jalankan** tombol. Saat Anda menggunakan Workflow Studio diInfrastructure Composer, Infrastructure Composer buat kode IAc untuk alur kerja Anda. Oleh karena itu, Anda harus terlebih dahulu menyebarkan template. Kemudian, jalankan alur kerja di konsol atau melalui file. AWS Command Line Interface (AWS CLI)

# Menggunakan AWS SAM untuk membangun alur kerja Step Functions
<a name="concepts-sam-sfn"></a>

Anda dapat menggunakan AWS Serverless Application Model Step Functions untuk membangun alur kerja dan menyebarkan infrastruktur yang Anda butuhkan, termasuk fungsi Lambda, APIs dan peristiwa, untuk membuat aplikasi tanpa server.

Anda juga dapat menggunakan AWS Serverless Application Model CLI bersama dengan AWS Toolkit for Visual Studio Code sebagai bagian dari pengalaman terintegrasi untuk membangun dan menyebarkan AWS Step Functions mesin status. Anda dapat membuat aplikasi nirserver dengan AWS SAM, kemudian membangun mesin status Anda di VS Code IDE. Kemudian Anda dapat memvalidasi, mengemas, dan menyebarkan sumber daya Anda. 

**Tip**  
*Untuk menerapkan contoh aplikasi tanpa server yang memulai alur kerja Step Functions menggunakan AWS SAM, lihat [Menerapkan](https://catalog.workshops.aws/stepfunctions/iac/deploy-with-sam) dengan di Workshop. AWS SAM AWS Step Functions *

## Mengapa menggunakan Step Functions dengan AWS SAM?
<a name="concepts-sam-sfn-integration"></a>

Bila Anda menggunakan Step Functions dengan AWS SAM Anda dapat:
+ Mulai menggunakan template AWS SAM sampel.
+ Membangun mesin status Anda ke dalam aplikasi nirserver.
+ Gunakan substitusi variabel untuk mengganti ARNs ke mesin status Anda pada saat penerapan.

   AWS CloudFormationmendukung [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions)yang memungkinkan Anda menambahkan referensi dinamis dalam definisi alur kerja Anda ke nilai yang Anda berikan di CloudFormation template Anda. Anda dapat menambahkan referensi dinamis dengan menambahkan substitusi ke definisi alur kerja Anda menggunakan notasi. `${dollar_sign_brace}` Anda juga perlu mendefinisikan referensi dinamis ini di `DefinitionSubstitutions` properti untuk StateMachine sumber daya di CloudFormation template Anda. Substitusi ini diganti dengan nilai aktual selama proses pembuatan CloudFormation tumpukan. Untuk informasi selengkapnya, lihat [DefinitionSubstitutions dalam AWS SAM template](#sam-definition-substitution-eg). 
+ Tentukan peran mesin status Anda menggunakan templat AWS SAM kebijakan.
+ Memulai eksekusi mesin status dengan API Gateway, EventBridge peristiwa, atau pada jadwal dalam template Anda AWS SAM . 

## Integrasi Step Functions dengan AWS SAM spesifikasi
<a name="concepts-sam-sfn-ots2"></a>

Anda dapat menggunakan [Templat AWS SAM Kebijakan](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html) untuk menambahkan izin ke mesin status Anda. Dengan izin ini, Anda dapat mengatur fungsi Lambda dan sumber daya AWS lainnya untuk membentuk alur kerja yang kompleks dan kuat. 

## Integrasi Step Functions dengan SAM CLI
<a name="concepts-sam-sfn-ots3"></a>

Step Functions terintegrasi dengan AWS SAM CLI. Gunakan ini untuk mengembangkan mesin status Anda ke dalam aplikasi nirserver dengan cepat.

Coba [Buat mesin status Step Functions menggunakan AWS SAM](tutorial-state-machine-using-sam.md) tutorial untuk mempelajari cara menggunakan AWS SAM untuk membuat mesin negara.

Fungsi AWS SAM CLI yang didukung meliputi: 


| Perintah CLI | Deskripsi | 
| --- | --- | 
| init sam |  Menginisialisasi Aplikasi Tanpa Server dengan template. AWS SAM Dapat digunakan dengan templat SAM untuk Step Functions.  | 
| validasi sam | Memvalidasi AWS SAM template. | 
| paket sam |  Paket AWS SAM aplikasi. Ini membuat file ZIP kode dan dependensi Anda, dan kemudian mengunggahnya ke Amazon S3. Kemudian mengembalikan salinan templat AWS SAM Anda, menggantikan referensi ke artefak lokal dengan lokasi Amazon S3 tempat perintah mengunggah artefak.  | 
| deploy sam | Menyebarkan AWS SAM aplikasi. | 
| terbitan sam |  Publikasikan AWS SAM aplikasi ke AWS Serverless Application Repository. Perintah ini mengambil AWS SAM template yang dikemas dan menerbitkan aplikasi ke wilayah yang ditentukan.  | 

**catatan**  
Saat menggunakan AWS SAM lokal, Anda dapat meniru Lambda dan API Gateway secara lokal. Namun, Anda tidak dapat meniru Step Functions secara lokal menggunakan. AWS SAM

## DefinitionSubstitutions dalam AWS SAM template
<a name="sam-definition-substitution-eg"></a>

Anda dapat menentukan mesin negara menggunakan CloudFormation templat denganAWS SAM. Dengan menggunakan AWS SAM, Anda dapat mendefinisikan inline mesin status di templat atau di file terpisah. AWS SAMTemplate berikut mencakup mesin negara yang mensimulasikan alur kerja perdagangan saham. Mesin negara ini menggunakan tiga Lambda fungsi untuk memeriksa harga saham dan menentukan apakah akan membeli atau menjual saham. Transaksi ini kemudian dicatat dalam Amazon DynamoDB tabel. ARNs Untuk Lambda fungsi dan DynamoDB tabel dalam template berikut ditentukan menggunakan [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html#cfn-stepfunctions-statemachine-definitionsubstitutions).

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: |
  step-functions-stock-trader
  Sample SAM Template for step-functions-stock-trader
Resources:
  StockTradingStateMachine:
    Type: AWS::Serverless::StateMachine
    Properties:
      DefinitionSubstitutions:
        StockCheckerFunctionArn: !GetAtt StockCheckerFunction.Arn
        StockSellerFunctionArn: !GetAtt StockSellerFunction.Arn
        StockBuyerFunctionArn: !GetAtt StockBuyerFunction.Arn
        DDBPutItem: !Sub arn:${AWS::Partition}:states:::dynamodb:putItem
        DDBTable: !Ref TransactionTable
      Policies:
        - DynamoDBWritePolicy:
            TableName: !Ref TransactionTable
        - LambdaInvokePolicy:
            FunctionName: !Ref StockCheckerFunction
        - LambdaInvokePolicy:
            FunctionName: !Ref StockBuyerFunction
        - LambdaInvokePolicy:
            FunctionName: !Ref StockSellerFunction
      DefinitionUri: statemachine/stock_trader.asl.json
  StockCheckerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/stock-checker/
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
      Architectures:
        - x86_64
  StockSellerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/stock-seller/
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
      Architectures:
        - x86_64
  StockBuyerFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: functions/stock-buyer/
      Handler: app.lambdaHandler
      Runtime: nodejs18.x
      Architectures:
        - x86_64
  TransactionTable:
    Type: AWS::DynamoDB::Table
    Properties:
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
```

Kode berikut adalah definisi mesin negara dalam file `stock_trader.asl.json` yang digunakan dalam [Buat mesin status Step Functions menggunakan AWS SAM](tutorial-state-machine-using-sam.md) tutorial. Definisi mesin negara ini berisi beberapa `DefinitionSubstitutions` dilambangkan dengan notasi. `${dollar_sign_brace}` Misalnya, alih-alih menentukan ARN Lambda fungsi statis untuk tugas `Check Stock Value` tersebut, `${StockCheckerFunctionArn}` substitusi digunakan. Substitusi ini didefinisikan dalam [DefinitionSubstitutions](#sam-template-def-substitution) properti template. `DefinitionSubstitutions`adalah peta pasangan kunci-nilai untuk sumber daya mesin negara. Dalam`DefinitionSubstitutions`, \$1 \$1StockCheckerFunctionArn\$1 memetakan ke ARN `StockCheckerFunction` sumber daya menggunakan fungsi CloudFormation intrinsik. [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html) Saat Anda menyebarkan AWS SAM template, `DefinitionSubstitutions` dalam template diganti dengan nilai sebenarnya.

```
{
    "Comment": "A state machine that does mock stock trading.",
    "StartAt": "Check Stock Value",
    "States": {
        "Check Stock Value": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "OutputPath": "$.Payload",
            "Parameters": {
                "Payload.$": "$",
                "FunctionName": "${StockCheckerFunctionArn}"
            },
            "Next": "Buy or Sell?"
        },
        "Buy or Sell?": {
            "Type": "Choice",
            "Choices": [
                {
                    "Variable": "$.stock_price",
                    "NumericLessThanEquals": 50,
                    "Next": "Buy Stock"
                }
            ],
            "Default": "Sell Stock"
        },
        "Buy Stock": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "OutputPath": "$.Payload",
            "Parameters": {
                "Payload.$": "$",
                "FunctionName": "${StockBuyerFunctionArn}"
            },
            "Retry": [
                {
                    "ErrorEquals": [
                        "Lambda.ServiceException",
                        "Lambda.AWSLambdaException",
                        "Lambda.SdkClientException",
                        "Lambda.TooManyRequestsException"
                    ],
                    "IntervalSeconds": 1,
                    "MaxAttempts": 3,
                    "BackoffRate": 2
                }
            ],
            "Next": "Record Transaction"
        },
        "Sell Stock": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "OutputPath": "$.Payload",
            "Parameters": {
                "Payload.$": "$",
                "FunctionName": "${StockSellerFunctionArn}"
            },
            "Next": "Record Transaction"
        },
        "Record Transaction": {
            "Type": "Task",
            "Resource": "arn:aws:states:::dynamodb:putItem",
            "Parameters": {
                "TableName": "${DDBTable}",
                "Item": {
                    "Id": {
                        "S.$": "$.id"
                    },
                    "Type": {
                        "S.$": "$.type"
                    },
                    "Price": {
                        "N.$": "$.price"
                    },
                    "Quantity": {
                        "N.$": "$.qty"
                    },
                    "Timestamp": {
                        "S.$": "$.timestamp"
                    }
                }
            },
            "End": true
        }
    }
}
```

## Langkah selanjutnya
<a name="concepts-sam-sfn-next-steps"></a>

Anda dapat mempelajari selengkapnya tentang penggunaan Step Functions AWS SAM dengan sumber daya berikut:
+ Lengkapi [Buat mesin status Step Functions menggunakan AWS SAM](tutorial-state-machine-using-sam.md) tutorial untuk membuat mesin negara dengan AWS SAM.
+ Tentukan sumber [AWS::Serverless::StateMachine](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html)daya.
+ Temukan [Templat kebijakan AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html) untuk digunakan.
+ Gunakan [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions.html) dengan Step Functions. 
+ Tinjau [referensi AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html) untuk mempelajari lebih lanjut tentang fitur yang tersedia di. AWS SAM

Anda juga dapat mendesain dan membangun alur kerja Anda di infrastruktur sebagai kode (IAc) menggunakan pembuat visual, seperti Workflow Studio in. Infrastructure Composer Lihat informasi yang lebih lengkap di [Menggunakan Workflow Studio Infrastructure Composer untuk membangun alur kerja Step Functions](use-wfs-in-app-composer.md).

# Menggunakan CloudFormation untuk membuat alur kerja di Step Functions
<a name="tutorial-lambda-state-machine-cloudformation"></a>

Dalam tutorial ini, Anda akan membuat AWS Lambda fungsi menggunakan AWS CloudFormation. Anda akan menggunakan CloudFormation konsol dan template YAMAL untuk membuat *tumpukan* (peran IAM, fungsi Lambda, dan mesin status). Kemudian, Anda akan menggunakan konsol Step Functions untuk memulai eksekusi mesin status.

Untuk informasi selengkapnya, lihat [Bekerja dengan CloudFormation Template](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) dan `[AWS::StepFunctions::StateMachine](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-stepfunctions-statemachine.html)` sumber daya di *Panduan AWS CloudFormation Pengguna*.

## Langkah 1: Siapkan CloudFormation template Anda
<a name="lambda-state-machine-cfn-step-1"></a>

Sebelum Anda menggunakan [Templat contoh](#lambda-state-machine-cfn-step-2), Anda harus memahami cara mendeklarasikan bagian-bagian berbeda dari sebuah templat CloudFormation .

### Untuk membuat IAM role untuk Lambda
<a name="lambda-state-machine-cfn-procedure-create-iam-role"></a>

Tentukan kebijakan kepercayaan yang terkait dengan IAM role untuk fungsi Lambda. Contoh berikut mendefinisikan kebijakan kepercayaan menggunakan YAMAL atau JSON.

------
#### [ YAML ]

```
LambdaExecutionRole:
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: "sts:AssumeRole"
```

------
#### [ JSON ]

```
          "LambdaExecutionRole": {
              "Type": "AWS::IAM::Role",
              "Properties": {
                  "AssumeRolePolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [
                          {
                              "Effect": "Allow",
                              "Principal": {
                                  "Service": "lambda.amazonaws.com"
                              },
                              "Action": "sts:AssumeRole"
                          }
                      ]
                  }
              }
```

------

### Untuk membuat fungsi Lambda
<a name="lambda-state-machine-cfn-create-function"></a>

Tentukan properti berikut untuk fungsi Lambda yang akan mencetak pesan. `Hello World`

**penting**  
Pastikan fungsi Lambda Anda berada di bawah AWS akun yang sama dan Wilayah AWS sebagai mesin status Anda.

------
#### [ YAML ]

```
MyLambdaFunction:
    Type: "AWS::Lambda::Function"
    Properties:
      Handler: "index.handler"
      Role: !GetAtt [ LambdaExecutionRole, Arn ]
      Code:
        ZipFile: |
          exports.handler = (event, context, callback) => {
              callback(null, "Hello World!");
          };
      Runtime: "nodejs12.x"
      Timeout: "25"
```

------
#### [ JSON ]

```
        "MyLambdaFunction": {
              "Type": "AWS::Lambda::Function",
              "Properties": {
                  "Handler": "index.handler",
                  "Role": {
                      "Fn::GetAtt": [
                          "LambdaExecutionRole",
                          "Arn"
                      ]
                  },
                  "Code": {
                      "ZipFile": "exports.handler = (event, context, callback) => {\n    callback(null, \"Hello World!\");\n};\n"
                  },
                  "Runtime": "nodejs12.x",
                  "Timeout": "25"
              }
          },
```

------

### Untuk membuat IAM role untuk eksekusi mesin status
<a name="lambda-state-machine-cfn-create-role"></a>

Tentukan kebijakan kepercayaan yang terkait dengan IAM role untuk eksekusi mesin status.

------
#### [ YAML ]

```
StatesExecutionRole:
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement:
          - Effect: "Allow"
            Principal:
              Service:
                - !Sub states.${AWS::Region}.amazonaws.com
            Action: "sts:AssumeRole"
      Path: "/"
      Policies:
        - PolicyName: StatesExecutionPolicy
          PolicyDocument:
            Version: "2012-10-17"		 	 	 
            Statement:
              - Effect: Allow
                Action:
                  - "lambda:InvokeFunction"
                Resource: "*"
```

------
#### [ JSON ]

```
        "StatesExecutionRole": {
              "Type": "AWS::IAM::Role",
              "Properties": {
                  "AssumeRolePolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [
                          {
                              "Effect": "Allow",
                              "Principal": {
                                  "Service": [
                                      {
                                          "Fn::Sub": "states.${AWS::Region}.amazonaws.com"
                                      }
                                  ]
                              },
                              "Action": "sts:AssumeRole"
                          }
                      ]
                  },
                  "Path": "/",
                  "Policies": [
                      {
                          "PolicyName": "StatesExecutionPolicy",
                          "PolicyDocument": {
                              "Version": "2012-10-17",		 	 	 
                              "Statement": [
                                  {
                                      "Effect": "Allow",
                                      "Action": [
                                          "lambda:InvokeFunction"
                                      ],
                                      "Resource": "*"
                                  }
                              ]
                          }
                      }
                  ]
              }
          },
```

------

### Untuk membuat mesin status Lambda
<a name="lambda-state-machine-cfn-create"></a>

Tentukan mesin status Lambda.

------
#### [ YAML ]

```
MyStateMachine:
    Type: "AWS::StepFunctions::StateMachine"
    Properties:
      DefinitionString:
        !Sub
          - |-
            {
              "Comment": "A Hello World example using an AWS Lambda function",
              "StartAt": "HelloWorld",
              "States": {
                "HelloWorld": {
                  "Type": "Task",
                  "Resource": "${lambdaArn}",
                  "End": true
                }
              }
            }
          - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]}
      RoleArn: !GetAtt [ StatesExecutionRole, Arn ]
```

------
#### [ JSON ]

```
        "MyStateMachine": {
              "Type": "AWS::StepFunctions::StateMachine",
              "Properties": {
                  "DefinitionString": {
                      "Fn::Sub": [
                          "{\n  \"Comment\": \"A Hello World example using an AWS Lambda function\",\n  \"StartAt\": \"HelloWorld\",\n  \"States\": {\n    \"HelloWorld\": {\n      \"Type\": \"Task\",\n      \"Resource\": \"${lambdaArn}\",\n      \"End\": true\n    }\n  }\n}",
                          {
                              "lambdaArn": {
                                  "Fn::GetAtt": [
                                      "MyLambdaFunction",
                                      "Arn"
                                  ]
                              }
                          }
                      ]
                  },
                  "RoleArn": {
                      "Fn::GetAtt": [
                          "StatesExecutionRole",
                          "Arn"
                      ]
                  }
              }
          }
```

------

## Langkah 2: Gunakan CloudFormation template untuk membuat Lambda State Machine
<a name="lambda-state-machine-cfn-step-2"></a>

Setelah Anda memahami komponen CloudFormation template, Anda dapat menyatukannya dan menggunakan template untuk membuat CloudFormation tumpukan.

### Untuk membuat mesin status Lambda
<a name="to-create-the-lam-state-machine"></a>

1. Salin data contoh berikut ke file bernama `MyStateMachine.yaml` untuk contoh YAML, atau `MyStateMachine.json` untuk JSON.

------
#### [ YAML ]

   ```
   AWSTemplateFormatVersion: "2010-09-09"
     Description: "An example template with an IAM role for a Lambda state machine."
     Resources:
       LambdaExecutionRole:
         Type: "AWS::IAM::Role"
         Properties:
           AssumeRolePolicyDocument:
             Version: "2012-10-17"		 	 	 
             Statement:
               - Effect: Allow
                 Principal:
                   Service: lambda.amazonaws.com
                 Action: "sts:AssumeRole"
     
       MyLambdaFunction:
         Type: "AWS::Lambda::Function"
         Properties:
           Handler: "index.handler"
           Role: !GetAtt [ LambdaExecutionRole, Arn ]
           Code:
             ZipFile: |
               exports.handler = (event, context, callback) => {
                   callback(null, "Hello World!");
               };
           Runtime: "nodejs12.x"
           Timeout: "25"
     
       StatesExecutionRole:
         Type: "AWS::IAM::Role"
         Properties:
           AssumeRolePolicyDocument:
             Version: "2012-10-17"		 	 	 
             Statement:
               - Effect: "Allow"
                 Principal:
                   Service:
                     - !Sub states.${AWS::Region}.amazonaws.com
                 Action: "sts:AssumeRole"
           Path: "/"
           Policies:
             - PolicyName: StatesExecutionPolicy
               PolicyDocument:
                 Version: "2012-10-17"		 	 	 
                 Statement:
                   - Effect: Allow
                     Action:
                       - "lambda:InvokeFunction"
                     Resource: "*"
     
       MyStateMachine:
         Type: "AWS::StepFunctions::StateMachine"
         Properties:
           DefinitionString:
             !Sub
               - |-
                 {
                   "Comment": "A Hello World example using an AWS Lambda function",
                   "StartAt": "HelloWorld",
                   "States": {
                     "HelloWorld": {
                       "Type": "Task",
                       "Resource": "${lambdaArn}",
                       "End": true
                     }
                   }
                 }
               - {lambdaArn: !GetAtt [ MyLambdaFunction, Arn ]}
           RoleArn: !GetAtt [ StatesExecutionRole, Arn ]
   ```

------
#### [ JSON ]

   ```
   {
         "AWSTemplateFormatVersion": "2010-09-09",
         "Description": "An example template with an IAM role for a Lambda state machine.",
         "Resources": {
             "LambdaExecutionRole": {
                 "Type": "AWS::IAM::Role",
                 "Properties": {
                     "AssumeRolePolicyDocument": {
                         "Version": "2012-10-17",		 	 	 
                         "Statement": [
                             {
                                 "Effect": "Allow",
                                 "Principal": {
                                     "Service": "lambda.amazonaws.com"
                                 },
                                 "Action": "sts:AssumeRole"
                             }
                         ]
                     }
                 }
             },
             "MyLambdaFunction": {
                 "Type": "AWS::Lambda::Function",
                 "Properties": {
                     "Handler": "index.handler",
                     "Role": {
                         "Fn::GetAtt": [
                             "LambdaExecutionRole",
                             "Arn"
                         ]
                     },
                     "Code": {
                         "ZipFile": "exports.handler = (event, context, callback) => {\n    callback(null, \"Hello World!\");\n};\n"
                     },
                     "Runtime": "nodejs12.x",
                     "Timeout": "25"
                 }
             },
             "StatesExecutionRole": {
                 "Type": "AWS::IAM::Role",
                 "Properties": {
                     "AssumeRolePolicyDocument": {
                         "Version": "2012-10-17",		 	 	 
                         "Statement": [
                             {
                                 "Effect": "Allow",
                                 "Principal": {
                                     "Service": [
                                         {
                                             "Fn::Sub": "states.${AWS::Region}.amazonaws.com"
                                         }
                                     ]
                                 },
                                 "Action": "sts:AssumeRole"
                             }
                         ]
                     },
                     "Path": "/",
                     "Policies": [
                         {
                             "PolicyName": "StatesExecutionPolicy",
                             "PolicyDocument": {
                                 "Version": "2012-10-17",		 	 	 
                                 "Statement": [
                                     {
                                         "Effect": "Allow",
                                         "Action": [
                                             "lambda:InvokeFunction"
                                         ],
                                         "Resource": "*"
                                     }
                                 ]
                             }
                         }
                     ]
                 }
             },
             "MyStateMachine": {
                 "Type": "AWS::StepFunctions::StateMachine",
                 "Properties": {
                     "DefinitionString": {
                         "Fn::Sub": [
                             "{\n  \"Comment\": \"A Hello World example using an AWS Lambda function\",\n  \"StartAt\": \"HelloWorld\",\n  \"States\": {\n    \"HelloWorld\": {\n      \"Type\": \"Task\",\n      \"Resource\": \"${lambdaArn}\",\n      \"End\": true\n    }\n  }\n}",
                             {
                                 "lambdaArn": {
                                     "Fn::GetAtt": [
                                         "MyLambdaFunction",
                                         "Arn"
                                     ]
                                 }
                             }
                         ]
                     },
                     "RoleArn": {
                         "Fn::GetAtt": [
                             "StatesExecutionRole",
                             "Arn"
                         ]
                     }
                 }
             }
         }
     }
   ```

------

1. Buka [konsol CloudFormation](https://console.aws.amazon.com/cloudformation/home) tersebut dan pilih **Buat Tumpukan**.

1. Di halaman **Pilih Templat**, pilih **Unggah templat ke Amazon S3**. Pilih file `MyStateMachine` Anda, lalu pilih **Berikutnya**.

1. Di halaman **Tentukan Detail**, masukkan **Nama tumpukan**, masukkan `MyStateMachine`, lalu pilih **Selanjutnya**.

1. Pada halaman **Opsi**, pilih **Selanjutnya**.

1. Di halaman **Tinjau**, pilih **Saya mengakui bahwa CloudFormation dapat membuat sumber daya IAM.** lalu pilih **Buat**.

   CloudFormation mulai membuat `MyStateMachine` tumpukan dan menampilkan status **CREATE\$1IN\$1PROGRESS**. Saat proses selesai, CloudFormation menampilkan status **CREATE\$1COMPLETE**.

1. (Opsional) Untuk menampilkan sumber daya di tumpukan Anda, pilih tumpukan dan pilih tab **Sumber Daya**.

## Langkah 3: Mulai eksekusi Mesin Status
<a name="lambda-state-machine-cfn-step-3"></a>

Setelah Anda membuat mesin status Lambda Anda, Anda dapat memulai eksekusi.

### Untuk memulai eksekusi mesin status
<a name="to-start-the-state-machine-execution"></a>

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home) dan pilih nama mesin status yang Anda buat menggunakan CloudFormation.

1. Pada ***MyStateMachine-ABCDEFGHIJ1K***halaman, pilih **Eksekusi baru**.

   Halaman **Eksekusi baru** ditampilkan.

1. (Opsional) Masukkan nama eksekusi khusus untuk mengganti default yang dihasilkan.
**Nama dan pencatatan non-ASCII**  
Step Functions menerima nama untuk mesin negara, eksekusi, aktivitas, dan label yang berisi karakter non-ASCII. Karena karakter seperti itu akan CloudWatch mencegah Amazon mencatat data, sebaiknya gunakan hanya karakter ASCII sehingga Anda dapat melacak metrik Step Functions.

1. Pilih **Mulai Eksekusi**.

   Eksekusi baru mesin status Anda dimulai, dan halaman baru yang menunjukkan eksekusi Anda yang sedang berjalan akan ditampilkan.

1. (Opsional) Dalam **Detail Eksekusi**, tinjau stempel waktu **Status eksekusi** dan **Dimulai** dan **Ditutup**.

1. Untuk melihat hasil eksekusi Anda, pilih **Output**.

# Menggunakan AWS CDK untuk membuat alur kerja Standar di Step Functions
<a name="tutorial-lambda-state-machine-cdk"></a>

Anda dapat menggunakan kerangka AWS Cloud Development Kit (AWS CDK) Infrastructure as Code (IAC), untuk membuat mesin AWS Step Functions status yang berisi AWS Lambda fungsi.

Anda akan menentukan AWS infrastruktur menggunakan salah satu bahasa yang didukung. CDK Setelah menentukan infrastruktur, Anda akan mensintesis aplikasi ke CloudFormation template dan menerapkannya ke akun Anda AWS .

 Anda akan menggunakan metode ini untuk mendefinisikan mesin status Step Functions yang berisi fungsi Lambda, dan kemudian menjalankan mesin status dari penggunaan Step Functions. Konsol Manajemen AWS

*Sebelum Anda memulai tutorial ini, Anda harus mengatur lingkungan AWS CDK pengembangan Anda seperti yang dijelaskan dalam [Memulai Dengan AWS CDK - Prasyarat](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) dalam Panduan Pengembang.AWS Cloud Development Kit (AWS CDK) * Kemudian, instal AWS CDK dengan perintah berikut diAWS CLI:

```
npm install -g aws-cdk
```

Tutorial ini menghasilkan hasil yang sama seperti[Menggunakan CloudFormation untuk membuat alur kerja di Step Functions](tutorial-lambda-state-machine-cloudformation.md). Namun, dalam tutorial ini, AWS CDK tidak mengharuskan Anda untuk membuat IAM peran apa pun; itu AWS CDK melakukannya untuk Anda. AWS CDKVersi ini juga menyertakan [Status alur kerja yang berhasil](state-succeed.md) langkah untuk mengilustrasikan cara menambahkan langkah tambahan ke mesin status Anda.

**Tip**  
*Untuk menerapkan contoh aplikasi tanpa server yang memulai Step Functions alur kerja menggunakan AWS CDK dengan TypeScript, lihat [Menerapkan](https://catalog.workshops.aws/stepfunctions/iac/deploy-with-cdk) dengan di Workshop. AWS CDK AWS Step Functions *

## Langkah 1: Siapkan proyek AWS CDK Anda
<a name="lambda-state-machine-cdk-step-1"></a>

1. Di direktori home Anda, atau direktori lain jika Anda mau, jalankan perintah berikut untuk membuat direktori untuk AWS CDK aplikasi baru Anda.
**penting**  
Pastikan untuk memberi nama `step` direktori. Templat aplikasi AWS CDK menggunakan nama direktori untuk membuat nama untuk file sumber dan kelas. Jika Anda menggunakan nama yang berbeda, aplikasi Anda tidak akan cocok dengan tutorial ini.

------
#### [ TypeScript ]

   ```
   mkdir step && cd step
   ```

------
#### [ JavaScript ]

   ```
   mkdir step && cd step
   ```

------
#### [ Python ]

   ```
   mkdir step && cd step
   ```

------
#### [ Java ]

   ```
   mkdir step && cd step
   ```

------
#### [ C\$1 ]

   Pastikan Anda telah menginstal .NET versi 6.0 atau lebih tinggi. Untuk selengkapnya, lihat [Versi yang didukung](https://dotnet.microsoft.com/en-us/download/dotnet).

   ```
   mkdir step && cd step
   ```

------

1. Inisialisasi aplikasi dengan menggunakan perintah **cdk init**. Tentukan template yang diinginkan (“aplikasi”) dan bahasa pemrograman seperti yang ditunjukkan pada contoh berikut.

------
#### [ TypeScript ]

   ```
   cdk init --language typescript
   ```

------
#### [ JavaScript ]

   ```
   cdk init --language javascript
   ```

------
#### [ Python ]

   ```
   cdk init --language python
   ```

   Setelah proyek diinisialisasi, aktifkan lingkungan virtual proyek dan instal AWS CDK dependensi dasar.

   ```
   source .venv/bin/activate
   python -m pip install -r requirements.txt
   ```

------
#### [ Java ]

   ```
   cdk init --language java
   ```

------
#### [ C\$1 ]

   ```
   cdk init --language csharp
   ```

------

## Langkah 2: Gunakan AWS CDK untuk membuat mesin negara
<a name="lambda-state-machine-cdk-step-2"></a>

Pertama, kita akan menyajikan potongan-potongan kode individual yang mendefinisikan Lambda fungsi dan mesin Step Functions negara. Kemudian, kami akan menjelaskan cara menyatukannya di AWS CDK aplikasi Anda. Akhirnya, Anda akan melihat cara mensintesis dan menyebarkan sumber daya ini.

### Untuk membuat Lambda fungsi
<a name="lambda-state-machine-cdk-create-function"></a>

AWS CDKKode berikut mendefinisikan Lambda fungsi, menyediakan kode sumber inline.

------
#### [ TypeScript ]

```
const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
    code: lambda.Code.fromInline(`
          exports.handler = (event, context, callback) => {
              callback(null, "Hello World!");
          };
      `),
    runtime: lambda.Runtime.NODEJS_18_X,
    handler: "index.handler",
    timeout: cdk.Duration.seconds(3)
});
```

------
#### [ JavaScript ]

```
const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
    code: lambda.Code.fromInline(`
          exports.handler = (event, context, callback) => {
              callback(null, "Hello World!");
          };
      `),
    runtime: lambda.Runtime.NODEJS_18_X,
    handler: "index.handler",
    timeout: cdk.Duration.seconds(3)
});
```

------
#### [ Python ]

```
hello_function = lambda_.Function(
            self, "MyLambdaFunction",
            code=lambda_.Code.from_inline("""
            exports.handler = (event, context, callback) => {
                callback(null, "Hello World!");
                }"""),
                runtime=lambda_.Runtime.NODEJS_18_X,
                handler="index.handler",
                timeout=Duration.seconds(25))
```

------
#### [ Java ]

```
final Function helloFunction = Function.Builder.create(this, "MyLambdaFunction")
        .code(Code.fromInline(
                "exports.handler = (event, context, callback) => { callback(null, 'Hello World!' );}"))
        .runtime(Runtime.NODEJS_18_X)
        .handler("index.handler")
        .timeout(Duration.seconds(25))
        .build();
```

------
#### [ C\$1 ]

```
var helloFunction = new Function(this, "MyLambdaFunction", new FunctionProps
{
    Code = Code.FromInline(@"`
      exports.handler = (event, context, callback) => {
        callback(null, 'Hello World!');
      }"),
    Runtime = Runtime.NODEJS_12_X,
    Handler = "index.handler",
    Timeout = Duration.Seconds(25)
});
```

------

Anda dapat melihat dalam kode contoh singkat ini:
+ Nama logis fungsi, `MyLambdaFunction`.
+ Kode sumber untuk fungsi tersebut, disematkan sebagai string dalam kode sumber aplikasi AWS CDK.
+ Atribut fungsi lainnya, seperti runtime yang akan digunakan (Node 18.x), titik masuk fungsi, dan batas waktu.

### Untuk membuat mesin status
<a name="lambda-state-machine-cdk-create"></a>

Mesin status kami memiliki dua status: tugas Lambda fungsi, dan [Status alur kerja yang berhasil](state-succeed.md) status. Fungsi ini mengharuskan kita membuat sebuah Step Functions [Status alur kerja tugas](state-task.md) yang memanggil fungsi kita. Status Tugas ini digunakan sebagai langkah pertama dalam mesin negara. Status sukses ditambahkan ke mesin status menggunakan `next()` metode status Tugas. Kode berikut pertama memanggil fungsi bernama`MyLambdaTask`, kemudian menggunakan `next()` metode untuk mendefinisikan status sukses bernama`GreetedWorld`.

------
#### [ TypeScript ]

```
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
  definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
    lambdaFunction: helloFunction
  }).next(new sfn.Succeed(this, "GreetedWorld"))
});
```

------
#### [ JavaScript ]

```
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
  definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
    lambdaFunction: helloFunction
  }).next(new sfn.Succeed(this, "GreetedWorld"))
});
```

------
#### [ Python ]

```
state_machine = sfn.StateMachine(
                                 self, "MyStateMachine",
                                 definition=tasks.LambdaInvoke(
                                 self, "MyLambdaTask",
                                 lambda_function=hello_function)
                                 .next(sfn.Succeed(self, "GreetedWorld")))
```

------
#### [ Java ]

```
final StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
        .definition(LambdaInvoke.Builder.create(this, "MyLambdaTask")
            .lambdaFunction(helloFunction)
            .build()
            .next(new Succeed(this, "GreetedWorld")))
        .build();
```

------
#### [ C\$1 ]

```
var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps {
    DefinitionBody = DefinitionBody.FromChainable(new LambdaInvoke(this, "MyLambdaTask", new LambdaInvokeProps
    {
        LambdaFunction = helloFunction
    })
    .Next(new Succeed(this, "GreetedWorld")))
});
```

------

### Untuk membangun dan men-deploy aplikasi AWS CDK
<a name="lambda-state-machine-cdk-app"></a>

Dalam AWS CDK proyek Anda yang baru dibuat, edit file yang berisi definisi tumpukan agar terlihat seperti kode contoh berikut. Anda akan mengenali definisi Lambda fungsi dan mesin Step Functions status dari bagian sebelumnya.

1. Perbarui tumpukan seperti yang ditunjukkan pada contoh berikut.

------
#### [ TypeScript ]

   Perbarui `lib/step-stack.ts` dengan kode berikut.

   ```
   import * as cdk from 'aws-cdk-lib';
   import * as lambda from 'aws-cdk-lib/aws-lambda';
   import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
   import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
   
   export class StepStack extends cdk.Stack {
     constructor(app: cdk.App, id: string) {
       super(app, id);
   
       const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
         code: lambda.Code.fromInline(`
             exports.handler = (event, context, callback) => {
                 callback(null, "Hello World!");
             };
         `),
         runtime: lambda.Runtime.NODEJS_18_X,
         handler: "index.handler",
         timeout: cdk.Duration.seconds(3)
       });
   
       const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
         definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
           lambdaFunction: helloFunction
         }).next(new sfn.Succeed(this, "GreetedWorld"))
       });
     }
   }
   ```

------
#### [ JavaScript ]

   Perbarui `lib/step-stack.js` dengan kode berikut.

   ```
   import * as cdk from 'aws-cdk-lib';
   import * as lambda from 'aws-cdk-lib/aws-lambda';
   import * as sfn from 'aws-cdk-lib/aws-stepfunctions';
   import * as tasks from 'aws-cdk-lib/aws-stepfunctions-tasks';
   
   export class StepStack extends cdk.Stack {
     constructor(app, id) {
       super(app, id);
   
       const helloFunction = new lambda.Function(this, 'MyLambdaFunction', {
         code: lambda.Code.fromInline(`
             exports.handler = (event, context, callback) => {
                 callback(null, "Hello World!");
             };
         `),
         runtime: lambda.Runtime.NODEJS_18_X,
         handler: "index.handler",
         timeout: cdk.Duration.seconds(3)
       });
   
       const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
         definition: new tasks.LambdaInvoke(this, "MyLambdaTask", {
           lambdaFunction: helloFunction
         }).next(new sfn.Succeed(this, "GreetedWorld"))
       });
     }
   }
   ```

------
#### [ Python ]

   Perbarui `step/step_stack.py` dengan kode berikut.

   ```
   from aws_cdk import (
       Duration,
       Stack,
       aws_stepfunctions as sfn,
       aws_stepfunctions_tasks as tasks,
       aws_lambda as lambda_
   )
   class StepStack(Stack):
   
       def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
           super().__init__(scope, construct_id, **kwargs)
   
           hello_function = lambda_.Function(
               self, "MyLambdaFunction",
               code=lambda_.Code.from_inline("""
               exports.handler = (event, context, callback) => {
                   callback(null, "Hello World!");
                   }"""),
                   runtime=lambda_.Runtime.NODEJS_18_X,
                   handler="index.handler",
                   timeout=Duration.seconds(25))
   
           state_machine = sfn.StateMachine(
               self, "MyStateMachine",
               definition=tasks.LambdaInvoke(
               self, "MyLambdaTask",
               lambda_function=hello_function)
               .next(sfn.Succeed(self, "GreetedWorld")))
   ```

------
#### [ Java ]

   Perbarui `src/main/java/com.myorg/StepStack.java` dengan kode berikut.

   ```
   package com.myorg;
   
   import software.constructs.Construct;
   import software.amazon.awscdk.Stack;
   import software.amazon.awscdk.StackProps;
   import software.amazon.awscdk.Duration;
   import software.amazon.awscdk.services.lambda.Code;
   import software.amazon.awscdk.services.lambda.Function;
   import software.amazon.awscdk.services.lambda.Runtime;
   import software.amazon.awscdk.services.stepfunctions.StateMachine;
   import software.amazon.awscdk.services.stepfunctions.Succeed;
   import software.amazon.awscdk.services.stepfunctions.tasks.LambdaInvoke;
   
   public class StepStack extends Stack {
       public StepStack(final Construct scope, final String id) {
           this(scope, id, null);
       }
   
       public StepStack(final Construct scope, final String id, final StackProps props) {
           super(scope, id, props);
   
           final Function helloFunction = Function.Builder.create(this, "MyLambdaFunction")
                   .code(Code.fromInline(
                           "exports.handler = (event, context, callback) => { callback(null, 'Hello World!' );}"))
                   .runtime(Runtime.NODEJS_18_X)
                   .handler("index.handler")
                   .timeout(Duration.seconds(25))
                   .build();
   
           final StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
                   .definition(LambdaInvoke.Builder.create(this, "MyLambdaTask")
                           .lambdaFunction(helloFunction)
                           .build()
                           .next(new Succeed(this, "GreetedWorld")))
                   .build();
       }
   }
   ```

------
#### [ C\$1 ]

   Perbarui `src/Step/StepStack.cs` dengan kode berikut.

   ```
   using Amazon.CDK;
   using Constructs;
   using Amazon.CDK.AWS.Lambda;
   using Amazon.CDK.AWS.StepFunctions;
   using Amazon.CDK.AWS.StepFunctions.Tasks;
   
   namespace Step
   {
       public class StepStack : Stack
       {
           internal StepStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
           {
               var helloFunction = new Function(this, "MyLambdaFunction", new FunctionProps
               {
                   Code = Code.FromInline(@"exports.handler = (event, context, callback) => {
                       callback(null, 'Hello World!');
                   }"),
                   Runtime = Runtime.NODEJS_18_X,
                   Handler = "index.handler",
                   Timeout = Duration.Seconds(25)
               });
   
               var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
               {
                   DefinitionBody = DefinitionBody.FromChainable(new LambdaInvoke(this, "MyLambdaTask", new LambdaInvokeProps
                   {
                       LambdaFunction = helloFunction
                   })
                   .Next(new Succeed(this, "GreetedWorld")))
               });
           }
       }
   }
   ```

------

1. Simpan file sumber, lalu jalankan `cdk synth` perintah di direktori utama aplikasi.

   AWS CDKmenjalankan aplikasi dan mensintesis CloudFormation template darinya. AWS CDKkemudian menampilkan template.
**catatan**  
Jika Anda biasa TypeScript membuat AWS CDK proyek Anda, menjalankan `cdk synth` perintah dapat mengembalikan kesalahan berikut.  

   ```
   TSError: ⨯ Unable to compile TypeScript:
   bin/step.ts:7:33 - error TS2554: Expected 2 arguments, but got 3.
   ```
Ubah `bin/step.ts` file seperti yang ditunjukkan pada contoh berikut untuk mengatasi kesalahan ini.  

   ```
   #!/usr/bin/env node
   import 'source-map-support/register';
   import * as cdk from 'aws-cdk-lib';
   import { StepStack } from '../lib/step-stack';
   
   const app = new cdk.App();
   new StepStack(app, 'StepStack');
   app.synth();
   ```

1. Untuk menerapkan fungsi Lambda dan mesin status Step Functions ke akun AWS Anda, masalah. `cdk deploy` Anda akan diminta untuk menyetujui kebijakan IAM yang AWS CDK telah dihasilkan.

## Langkah 3: Mulai eksekusi mesin negara
<a name="lambda-state-machine-cdk-step-3"></a>

Setelah Anda membuat mesin negara Anda, Anda dapat memulai eksekusi.

### Untuk memulai eksekusi mesin status
<a name="to-start-the-state-machine-execution"></a>

1. Buka [Konsol Step Functions](https://console.aws.amazon.com/states/home) lalu pilih nama mesin status yang Anda buat dengan menggunakan AWS CDK.

1. Pada halaman mesin status, pilih **Mulai eksekusi**.

   Kotak dialog **Mulai eksekusi** ditampilkan.

1. (Opsional) Masukkan nama eksekusi khusus untuk mengganti default yang dihasilkan.
**Nama dan pencatatan non-ASCII**  
Step Functions menerima nama untuk mesin negara, eksekusi, aktivitas, dan label yang berisi karakter non-ASCII. Karena karakter seperti itu akan CloudWatch mencegah Amazon mencatat data, sebaiknya gunakan hanya karakter ASCII sehingga Anda dapat melacak metrik Step Functions.

1. Pilih **Mulai Eksekusi**.

   Eksekusi state machine Anda dimulai, dan halaman baru yang menunjukkan eksekusi yang sedang berjalan ditampilkan.

1. Konsol Step Functions mengarahkan Anda ke halaman yang berjudul dengan ID eksekusi Anda. Halaman ini dikenal sebagai halaman *Detail Eksekusi*. Di halaman ini, Anda dapat meninjau hasil eksekusi saat eksekusi berlangsung atau setelah selesai.

   Untuk meninjau hasil eksekusi, pilih status individual pada **tampilan Grafik**, lalu pilih tab individual di [Detail langkah](concepts-view-execution-details.md#exec-details-intf-step-details) panel untuk melihat detail setiap status termasuk input, output, dan definisi masing-masing. Untuk detail tentang informasi eksekusi yang dapat Anda lihat di halaman *Rincian Eksekusi*, lihat[Ikhtisar detail eksekusi](concepts-view-execution-details.md#exec-details-interface-overview).

## Langkah 4: Bersihkan
<a name="lambda-state-machine-cdk-step-4"></a>

Setelah Anda menguji mesin status Anda, kami sarankan Anda menghapus mesin status dan fungsi Lambda terkait untuk membebaskan sumber daya di mesin Anda. Akun AWS Jalankan `cdk destroy` perintah di direktori utama aplikasi Anda untuk menghapus mesin status Anda.

## Langkah selanjutnya
<a name="lambda-state-machine-cdk-next-steps"></a>

Untuk mempelajari lebih lanjut tentang mengembangkan AWS infrastruktur menggunakanAWS CDK, lihat [Panduan AWS CDK Pengembang](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

Untuk informasi tentang menulis aplikasi AWS CDK dalam bahasa pilihan Anda, lihat:

------
#### [ TypeScript ]

 [Bekerja dengan AWS CDK di TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) 

------
#### [ JavaScript ]

 [Bekerja dengan AWS CDK di JavaScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-javascript.html) 

------
#### [ Python ]

 [Bekerja dengan AWS CDK Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html) 

------
#### [ Java ]

 [Bekerja dengan AWS CDK di Jawa](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-java.html) 

------
#### [ C\$1 ]

 [Bekerja dengan AWS CDK di C \$1](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-csharp.html) 

------

Untuk informasi selengkapnya tentang modul AWS Construct Library yang digunakan dalam tutorial ini, lihat ikhtisar Referensi AWS CDK API berikut:
+  [aws-lambda](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda-readme.html) 
+  [aws-stepfunctions](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions-readme.html) 
+  [aws-stepfunctions-tasks](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_stepfunctions_tasks-readme.html) 

# Menggunakan AWS CDK untuk membuat alur kerja Express di Step Functions
<a name="tutorial-step-functions-rest-api-integration-cdk"></a>

Dalam tutorial ini, Anda mempelajari cara membuat API Gateway REST API dengan mesin status ekspres sinkron sebagai integrasi backend, menggunakan kerangka AWS Cloud Development Kit (AWS CDK) Infrastructure as Code (IAC).

Anda akan menggunakan `StepFunctionsRestApi` konstruksi untuk menghubungkan State Machine ke API Gateway. `StepFunctionsRestApi`Konstruksi akan menyiapkan input/output pemetaan default dan API Gateway REST API, dengan izin yang diperlukan dan metode HTTP “APAPUN”.

 Dengan AWS CDK kerangka Infrastructure as Code (IAC), Anda mendefinisikan AWS infrastruktur menggunakan bahasa pemrograman. Anda menentukan aplikasi dalam salah satu bahasa yang didukung CDK, mensintesis kode ke dalam CloudFormation templat, dan kemudian menerapkan infrastruktur ke akun Anda. AWS 

 Anda akan menggunakan CloudFormation untuk mendefinisikan API Gateway REST API, yang terintegrasi dengan Synchronous Express State Machine sebagai backend, lalu gunakan Konsol Manajemen AWS untuk memulai eksekusi. 

Sebelum memulai tutorial ini, siapkan lingkungan AWS CDK pengembangan Anda seperti yang dijelaskan dalam [Memulai Dengan AWS CDK - Prasyarat](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites), lalu instal dengan menerbitkan: AWS CDK 

```
npm install -g aws-cdk
```

## Langkah 1: Siapkan AWS CDK Proyek Anda
<a name="step-functions-rest-api-integration-cdk-step-1"></a>

Pertama, buat direktori untuk AWS CDK aplikasi baru Anda dan inisialisasi proyek.

------
#### [ TypeScript ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language typescript
```

------
#### [ JavaScript ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language javascript
```

------
#### [ Python ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language python
```

Setelah proyek diinisialisasi, aktifkan lingkungan virtual proyek dan instal AWS CDK dependensi dasar.

```
source .venv/bin/activate
python -m pip install -r requirements.txt
```

------
#### [ Java ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language java
```

------
#### [ C\$1 ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language csharp
```

------
#### [ Go ]

```
mkdir stepfunctions-rest-api
cd stepfunctions-rest-api
cdk init --language go
```

------

**catatan**  
Pastikan untuk memberi nama `stepfunctions-rest-api` direktori. Templat aplikasi AWS CDK menggunakan nama direktori untuk membuat nama untuk file sumber dan kelas. Jika Anda menggunakan nama yang berbeda, aplikasi Anda tidak akan cocok dengan tutorial ini.

Sekarang instal modul pustaka konstruksi untuk AWS Step Functions dan Amazon API Gateway.

------
#### [ TypeScript ]

```
npm install @aws-cdk/aws-stepfunctions @aws-cdk/aws-apigateway
```

------
#### [ JavaScript ]

```
npm install @aws-cdk/aws-stepfunctions @aws-cdk/aws-apigateway
```

------
#### [ Python ]

```
python -m pip install aws-cdk.aws-stepfunctions
python -m pip install aws-cdk.aws-apigateway
```

------
#### [ Java ]

Edit `pom.xml` proyek untuk menambahkan dependensi berikut di dalam kontainer `<dependencies>` yang sudah ada.

```
        <dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>stepfunctions</artifactId>
            <version>${cdk.version}</version>
        </dependency>
        <dependency>
            <groupId>software.amazon.awscdk</groupId>
            <artifactId>apigateway</artifactId>
            <version>${cdk.version}</version>
        </dependency>
```

Maven menginstal dependensi ini secara otomatis saat Anda membangun aplikasi berikutnya. Untuk membangun, terbitkan `mvn compile` atau gunakan perintah **Bangun** IDE Java Anda.

------
#### [ C\$1 ]

```
dotnet add src/StepfunctionsRestApi package Amazon.CDK.AWS.Stepfunctions
dotnet add src/StepfunctionsRestApi package Amazon.CDK.AWS.APIGateway
```

Anda juga dapat menginstal paket yang ditunjukkan menggunakan NuGet GUI Visual Studio, tersedia melalui **Tools** > **NuGet Package Manager > Manage NuGet Packages** **for Solution**.

------

Setelah menginstal modul, Anda dapat menggunakannya di AWS CDK aplikasi Anda dengan mengimpor paket-paket berikut.

------
#### [ TypeScript ]

```
@aws-cdk/aws-stepfunctions
@aws-cdk/aws-apigateway
```

------
#### [ JavaScript ]

```
@aws-cdk/aws-stepfunctions
@aws-cdk/aws-apigateway
```

------
#### [ Python ]

```
aws_cdk.aws_stepfunctions
aws_cdk.aws_apigateway
```

------
#### [ Java ]

```
software.amazon.awscdk.services.apigateway.StepFunctionsRestApi
software.amazon.awscdk.services.stepfunctions.Pass
software.amazon.awscdk.services.stepfunctions.StateMachine
software.amazon.awscdk.services.stepfunctions.StateMachineType
```

------
#### [ C\$1 ]

```
Amazon.CDK.AWS.StepFunctions
Amazon.CDK.AWS.APIGateway
```

------
#### [ Go ]

Tambahkan yang berikut ini ke `import` dalam`stepfunctions-rest-api.go`.

```
"github.com/aws/aws-cdk-go/awscdk/awsapigateway"
"github.com/aws/aws-cdk-go/awscdk/awsstepfunctions"
```

------

## Langkah 2: Gunakan AWS CDK untuk membuat API Gateway REST API dengan integrasi backend Synchronous Express State Machine
<a name="step-functions-rest-api-integration-cdk-step-2"></a>

Pertama, kami akan menyajikan potongan kode individual yang mendefinisikan Synchronous Express State Machine dan API Gateway REST API, lalu menjelaskan cara menyatukannya ke dalam AWS CDK aplikasi Anda. Kemudian Anda akan melihat cara mensintesis dan men-deploy sumber daya ini.

**catatan**  
Mesin Negara yang akan kami tunjukkan di sini akan menjadi Mesin Negara sederhana dengan `Pass` status.

### Untuk membuat Mesin Negara Ekspres
<a name="step-functions-rest-api-integration-cdk-create-state-machine"></a>

Ini adalah AWS CDK kode yang mendefinisikan mesin negara sederhana dengan `Pass` status.

------
#### [ TypeScript ]

```
const machineDefinition = new stepfunctions.Pass(this, 'PassState', {
    result: {value:"Hello!"},
})

const stateMachine = new stepfunctions.StateMachine(this, 'MyStateMachine', {
    definition: machineDefinition,
    stateMachineType: stepfunctions.StateMachineType.EXPRESS,
});
```

------
#### [ JavaScript ]

```
const machineDefinition = new sfn.Pass(this, 'PassState', {
    result: {value:"Hello!"},
})

const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
    definition: machineDefinition,
    stateMachineType: stepfunctions.StateMachineType.EXPRESS,
});
```

------
#### [ Python ]

```
machine_definition = sfn.Pass(self,"PassState", 
                        result = sfn.Result("Hello"))
    
state_machine = sfn.StateMachine(self, 'MyStateMachine', 
        definition = machine_definition, 
        state_machine_type = sfn.StateMachineType.EXPRESS)
```

------
#### [ Java ]

```
Pass machineDefinition = Pass.Builder.create(this, "PassState")
                        .result(Result.fromString("Hello"))
                        .build();

StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
                            .definition(machineDefinition)
                            .stateMachineType(StateMachineType.EXPRESS)
                            .build();
```

------
#### [ C\$1 ]

```
var machineDefinition = new Pass(this, "PassState", new PassProps
{
    Result = Result.FromString("Hello")
});

var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
{
    Definition = machineDefinition,
    StateMachineType = StateMachineType.EXPRESS
});
```

------
#### [ Go ]

```
var machineDefinition = awsstepfunctions.NewPass(stack, jsii.String("PassState"), &awsstepfunctions.PassProps
{
    Result: awsstepfunctions.NewResult(jsii.String("Hello")),
})

var stateMachine = awsstepfunctions.NewStateMachine(stack, jsii.String("StateMachine"), &awsstepfunctions.StateMachineProps
{    
    Definition: machineDefinition,
    StateMachineType: awsstepfunctions.StateMachineType_EXPRESS,
})
```

------

Anda dapat melihat dalam cuplikan singkat ini:
+ Definisi mesin bernama`PassState`, yang merupakan `Pass` Negara.
+ Nama logis dari State Machine, `MyStateMachine`
+ Definisi mesin digunakan sebagai definisi State Machine.
+ Jenis Mesin Negara diatur sebagai `EXPRESS` karena hanya `StepFunctionsRestApi` akan mengizinkan mesin status Synchronous Express.

### Untuk membuat API API Gateway REST API menggunakan `StepFunctionsRestApi` build
<a name="step-functions-rest-api-integration-cdk-create-rest-api"></a>

Kami akan menggunakan `StepFunctionsRestApi` konstruksi untuk membuat API Gateway REST API dengan izin yang diperlukan dan pemetaan default input/output .

------
#### [ TypeScript ]

```
const api = new apigateway.StepFunctionsRestApi(this, 
  'StepFunctionsRestApi', { stateMachine: stateMachine });
```

------
#### [ JavaScript ]

```
const api = new apigateway.StepFunctionsRestApi(this, 
  'StepFunctionsRestApi', { stateMachine: stateMachine });
```

------
#### [ Python ]

```
api = apigw.StepFunctionsRestApi(self, "StepFunctionsRestApi",
                            state_machine = state_machine)
```

------
#### [ Java ]

```
StepFunctionsRestApi api = StepFunctionsRestApi.Builder.create(this, "StepFunctionsRestApi")
                           .stateMachine(stateMachine)
                           .build();
```

------
#### [ C\$1 ]

```
var api = new StepFunctionsRestApi(this, "StepFunctionsRestApi", new StepFunctionsRestApiProps
{
    StateMachine = stateMachine
});
```

------
#### [ Go ]

```
awsapigateway.NewStepFunctionsRestApi(stack, jsii.String("StepFunctionsRestApi"), &awsapigateway.StepFunctionsRestApiProps
{
    StateMachine = stateMachine,
})
```

------

### Untuk membangun dan menerapkan aplikasi AWS CDK
<a name="step-functions-rest-api-integration-cdk-app"></a>

Dalam AWS CDK proyek yang Anda buat, edit file yang berisi definisi tumpukan agar terlihat seperti kode di bawah ini. Anda akan mengenali definisi mesin status Step Functions dan API Gateway dari atas.

------
#### [ TypeScript ]

Perbarui ` lib/stepfunctions-rest-api-stack.ts` untuk membaca sebagai berikut.

```
import * as cdk from 'aws-cdk-lib';
import * as stepfunctions from 'aws-cdk-lib/aws-stepfunctions' 
import * as apigateway from 'aws-cdk-lib/aws-apigateway';


export class StepfunctionsRestApiStack extends cdk.Stack {
    constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const machineDefinition = new stepfunctions.Pass(this, 'PassState', {
        result: {value:"Hello!"},
    });
    
    const stateMachine = new stepfunctions.StateMachine(this, 'MyStateMachine', {
        definition: machineDefinition,
        stateMachineType: stepfunctions.StateMachineType.EXPRESS,
    });
    
    const api = new apigateway.StepFunctionsRestApi(this, 
        'StepFunctionsRestApi', { stateMachine: stateMachine });
```

------
#### [ JavaScript ]

Perbarui `lib/stepfunctions-rest-api-stack.js` untuk membaca sebagai berikut.

```
const cdk = require('@aws-cdk/core');
const stepfunctions = require('@aws-cdk/aws-stepfunctions');
const apigateway = require('@aws-cdk/aws-apigateway');


class StepfunctionsRestApiStack extends cdk.Stack {
    constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const machineDefinition = new stepfunctions.Pass(this, "PassState", {
        result: {value:"Hello!"},
    })
    
    const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', {
        definition: machineDefinition,
        stateMachineType: stepfunctions.StateMachineType.EXPRESS,
    });
    
    const api = new apigateway.StepFunctionsRestApi(this, 
        'StepFunctionsRestApi', { stateMachine: stateMachine });

    }
}

module.exports = { StepStack }
```

------
#### [ Python ]

Perbarui `stepfunctions_rest_api/stepfunctions_rest_api_stack.py` untuk membaca sebagai berikut.

```
from aws_cdk import App, Stack
from constructs import Construct
from aws_cdk import aws_stepfunctions as sfn
from aws_cdk import aws_apigateway as apigw

class StepfunctionsRestApiStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        
        
        machine_definition = sfn.Pass(self,"PassState", 
                                result = sfn.Result("Hello"))

        state_machine = sfn.StateMachine(self, 'MyStateMachine', 
                definition = machine_definition, 
                state_machine_type = sfn.StateMachineType.EXPRESS)

        api = apigw.StepFunctionsRestApi(self, 
                    "StepFunctionsRestApi",
                    state_machine = state_machine)
```

------
#### [ Java ]

Perbarui `src/main/java/com.myorg/StepfunctionsRestApiStack.java` untuk membaca sebagai berikut.

```
package com.myorg;


import software.amazon.awscdk.core.Construct;
import software.amazon.awscdk.core.Stack;
import software.amazon.awscdk.core.StackProps;
import software.amazon.awscdk.services.stepfunctions.Pass;
import software.amazon.awscdk.services.stepfunctions.StateMachine;
import software.amazon.awscdk.services.stepfunctions.StateMachineType;
import software.amazon.awscdk.services.apigateway.StepFunctionsRestApi;

public class StepfunctionsRestApiStack extends Stack {
    public StepfunctionsRestApiStack(final Construct scope, final String id) {
        this(scope, id, null);
    }

    public StepfunctionsRestApiStack(final Construct scope, final String id, final StackProps props) {
        super(scope, id, props);

        Pass machineDefinition = Pass.Builder.create(this, "PassState")
                                .result(Result.fromString("Hello"))
                                .build();
        
        StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine")
                                    .definition(machineDefinition)
                                    .stateMachineType(StateMachineType.EXPRESS)
                                    .build();
                                    
        StepFunctionsRestApi api = StepFunctionsRestApi.Builder.create(this, "StepFunctionsRestApi")
                                   .stateMachine(stateMachine)
                                   .build();
                                   
    }
}
```

------
#### [ C\$1 ]

Perbarui `src/StepfunctionsRestApi/StepfunctionsRestApiStack.cs` untuk membaca sebagai berikut.

```
using Amazon.CDK;
using Amazon.CDK.AWS.StepFunctions;
using Amazon.CDK.AWS.APIGateway;

namespace StepfunctionsRestApi
{
    public class StepfunctionsRestApiStack : Stack
    {
        internal StepfunctionsRestApi(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
        {
            var machineDefinition = new Pass(this, "PassState", new PassProps
            {
                Result = Result.FromString("Hello")
            });

            var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps
            {
                Definition = machineDefinition,
                StateMachineType = StateMachineType.EXPRESS
            });
            
            var api = new StepFunctionsRestApi(this, "StepFunctionsRestApi", new StepFunctionsRestApiProps
            {
                StateMachine = stateMachine
            });

        }
    }
}
```

------
#### [ Go ]

Perbarui `stepfunctions-rest-api.go` untuk membaca sebagai berikut.

```
package main
import (
    "github.com/aws/aws-cdk-go/awscdk"
    "github.com/aws/aws-cdk-go/awscdk/awsapigateway"
    "github.com/aws/aws-cdk-go/awscdk/awsstepfunctions"
    "github.com/aws/constructs-go/constructs/v3"
    "github.com/aws/jsii-runtime-go"
)


type StepfunctionsRestApiGoStackProps struct {
    awscdk.StackProps
}

func NewStepfunctionsRestApiGoStack(scope constructs.Construct, id string, props *StepfunctionsRestApiGoStackProps) awscdk.Stack {
    var sprops awscdk.StackProps
    if props != nil {
        sprops = props.StackProps
    }
    stack := awscdk.NewStack(scope, &id, &sprops)

    // The code that defines your stack goes here
    var machineDefinition = awsstepfunctions.NewPass(stack, jsii.String("PassState"), &awsstepfunctions.PassProps
    {
        Result: awsstepfunctions.NewResult(jsii.String("Hello")),
    })

    var stateMachine = awsstepfunctions.NewStateMachine(stack, jsii.String("StateMachine"), &awsstepfunctions.StateMachineProps{
        Definition: machineDefinition,
        StateMachineType: awsstepfunctions.StateMachineType_EXPRESS,
    });

    awsapigateway.NewStepFunctionsRestApi(stack, jsii.String("StepFunctionsRestApi"), &awsapigateway.StepFunctionsRestApiProps{
        StateMachine = stateMachine,
    })

    return stack
}

func main() {
    app := awscdk.NewApp(nil)

    NewStepfunctionsRestApiGoStack(app, "StepfunctionsRestApiGoStack", &StepfunctionsRestApiGoStackProps{
        awscdk.StackProps{
            Env: env(),
        },
    })

    app.Synth(nil)
}

// env determines the AWS environment (account+region) in which our stack is to
// be deployed. For more information see: https://docs.aws.amazon.com/cdk/latest/guide/environments.html
func env() *awscdk.Environment {
    // If unspecified, this stack will be "environment-agnostic".
    // Account/Region-dependent features and context lookups will not work, but a
    // single synthesized template can be deployed anywhere.
    //---------------------------------------------------------------------------
    return nil

    // Uncomment if you know exactly what account and region you want to deploy
    // the stack to. This is the recommendation for production stacks.
    //---------------------------------------------------------------------------
    // return &awscdk.Environment{
    //  Account: jsii.String("account-id"),
    //  Region:  jsii.String("us-east-1"),
    // }

    // Uncomment to specialize this stack for the AWS Account and Region that are
    // implied by the current CLI configuration. This is recommended for dev
    // stacks.
    //---------------------------------------------------------------------------
    // return &awscdk.Environment{
    //  Account: jsii.String(os.Getenv("CDK_DEFAULT_ACCOUNT")),
    //  Region:  jsii.String(os.Getenv("CDK_DEFAULT_REGION")),
    // }
}
```

------

Simpan file sumber, lalu terbitkan `cdk synth` di direktori utama aplikasi. AWS CDK Menjalankan aplikasi dan mensintesis CloudFormation template darinya, lalu menampilkan template.

Untuk benar-benar menerapkan Amazon API Gateway dan mesin AWS Step Functions status ke akun AWS Anda, masalah`cdk deploy`. Anda akan diminta untuk menyetujui kebijakan IAM yang AWS CDK telah dihasilkan.

## Langkah 3: Uji API Gateway
<a name="step-functions-rest-api-integration-cdk-step-3"></a>

Setelah Anda membuat API Gateway REST API dengan Synchronous Express State Machine sebagai integrasi backend, Anda dapat menguji API Gateway.

### Untuk menguji API Gateway yang diterapkan menggunakan konsol API Gateway
<a name="to-test-the-deployed-api-gateway-using-console"></a>

1. Buka [konsol Amazon API Gateway](https://console.aws.amazon.com/apigateway/) dan masuk.

1. Pilih REST API Anda bernama`StepFunctionsRestApi`.

1. Di panel **Resources**, pilih `ANY` metode.

1. Pilih tab **Uji**. Anda mungkin perlu memilih tombol panah kanan untuk menampilkan tab. 

1. Untuk **Metode**, pilih **POST**.

1. Untuk **badan Permintaan**, salin parameter permintaan berikut.

   ```
   {
       "key": "Hello"
   }
   ```

1. Pilih **Uji**. Informasi berikut akan ditampilkan:
   + **Permintaan** adalah jalur sumber daya yang dipanggil untuk metode. 
   + **Status** adalah kode status HTTP respon.
   + **Latensi** adalah waktu antara penerimaan permintaan dari penelepon dan respons yang dikembalikan.
   + **Response body** adalah badan respon HTTP.
   + **Response header** adalah header respon HTTP.
   + **Log** menunjukkan simulasi entri Amazon CloudWatch Logs yang akan ditulis jika metode ini dipanggil di luar konsol API Gateway.
**catatan**  
Meskipun entri CloudWatch Log disimulasikan, hasil pemanggilan metode adalah nyata.

Output **tubuh Response** harus seperti ini:

```
"Hello"
```

**Tip**  
Coba API Gateway dengan metode yang berbeda dan input yang tidak valid untuk melihat keluaran kesalahan. Anda mungkin ingin mengubah mesin status untuk mencari kunci tertentu dan selama pengujian memberikan kunci yang salah untuk gagal eksekusi State Machine dan menghasilkan pesan kesalahan dalam output **badan Response**.

### Untuk menguji API yang diterapkan menggunakan cURL
<a name="to-test-the-deployed-api-gateway-using-curl"></a>

1. Buka jendela terminal.

1. Salin perintah cURL berikut dan tempelkan ke jendela terminal, ganti `<api-id>` dengan API ID API Anda dan `<region>` dengan wilayah tempat API Anda digunakan. 

   ```
   curl -X POST\
    'https://<api-id>.execute-api.<region>.amazonaws.com/prod' \
    -d '{"key":"Hello"}' \
    -H 'Content-Type: application/json'
   ```

Output **Response Body** harus seperti ini:

```
"Hello"
```

**Tip**  
Coba API Gateway dengan metode yang berbeda dan input yang tidak valid untuk melihat keluaran kesalahan. Anda mungkin ingin mengubah mesin status untuk mencari kunci tertentu dan selama pengujian memberikan kunci yang salah untuk gagal eksekusi State Machine dan menghasilkan pesan kesalahan dalam output **Response Body**.

## Langkah 4: Bersihkan
<a name="step-functions-rest-api-integration-cdk-step-4"></a>

Setelah selesai mencoba API Gateway, Anda dapat meruntuhkan mesin status dan API Gateway menggunakan AWS CDK. Terbitkan `cdk destroy` di direktori utama aplikasi Anda.

# Menggunakan Terraform untuk menyebarkan mesin status di Step Functions
<a name="terraform-sfn"></a>

[Terraform](https://www.terraform.io/intro/) by HashiCorp adalah kerangka kerja untuk membangun aplikasi menggunakan infrastruktur sebagai kode (IAc). Dengan Terraform, Anda dapat membuat mesin status dan menggunakan fitur, seperti melihat pratinjau penerapan infrastruktur dan membuat templat yang dapat digunakan kembali. Template Terraform membantu Anda memelihara dan menggunakan kembali kode dengan memecahnya menjadi potongan-potongan yang lebih kecil.

Jika Anda terbiasa dengan Terraform, Anda dapat mengikuti siklus hidup pengembangan yang dijelaskan dalam topik ini sebagai model untuk membuat dan menerapkan mesin status Anda di Terraform. Jika Anda tidak terbiasa dengan Terraform, kami sarankan Anda menyelesaikan lokakarya terlebih dahulu [Pengantar Terraform tentang AWS untuk berkenalan dengan Terraform](https://catalog.workshops.aws/terraform101/en-US).

**Tip**  
*Untuk menerapkan contoh mesin status yang dibuat menggunakan Terraform, lihat [Menerapkan dengan Terraform](https://catalog.workshops.aws/stepfunctions/iac/deploy-with-terraform) di Workshop. AWS Step Functions *

**Topics**
+ [Prasyarat](#terraform-sfn-prerequisites)
+ [Siklus hidup pengembangan dengan Terraform](#terraform-sfn-dev-lifecycle)
+ [Peran dan kebijakan IAM untuk mesin negara Anda](#terraform-sfn-iam-policy)

## Prasyarat
<a name="terraform-sfn-prerequisites"></a>

Sebelum Anda memulai, pastikan Anda menyelesaikan prasyarat berikut:
+ Instal Terraform di mesin Anda. Untuk informasi tentang menginstal Terraform, lihat [Menginstal](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) Terraform.
+ Instal Step Functions Local di mesin Anda. Kami menyarankan Anda menginstal image Step Functions Local Docker untuk menggunakan Step Functions Local. Untuk informasi selengkapnya, lihat [Menguji mesin status dengan Step Functions Local (tidak didukung)](sfn-local.md).
+ Instal AWS SAM CLI. Untuk informasi penginstalan, lihat [Menginstal AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) di Panduan *AWS Serverless Application Model Pengembang*.
+ Instal AWS Toolkit for Visual Studio Code untuk melihat diagram alur kerja mesin negara Anda. Untuk informasi penginstalan, lihat [Menginstal AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html) di *Panduan AWS Toolkit for Visual Studio Code Pengguna*.

## Siklus hidup pengembangan mesin negara dengan Terraform
<a name="terraform-sfn-dev-lifecycle"></a>

Prosedur berikut menjelaskan bagaimana Anda dapat menggunakan prototipe mesin status yang Anda buat menggunakan [Workflow Studio](workflow-studio.md) di konsol Step Functions sebagai titik awal untuk pengembangan lokal dengan Terraform dan. [AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/welcome.html)

Untuk melihat contoh lengkap yang membahas pengembangan mesin status dengan Terraform dan menyajikan praktik terbaik secara detail, lihat Praktik terbaik [untuk menulis proyek Step Functions](https://aws.amazon.com/blogs/devops/best-practices-for-writing-step-functions-terraform-projects/) Terraform.

**Untuk memulai siklus hidup pengembangan mesin status dengan Terraform**

1. Bootstrap proyek Terraform baru dengan perintah berikut.

   ```
   terraform init
   ```

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) untuk membuat prototipe untuk mesin status Anda.

1. Di Workflow Studio, lakukan hal berikut:

   1. Buat prototipe alur kerja Anda.

   1. Ekspor definisi [Amazon States Language (ASL)](concepts-amazon-states-language.md) dari alur kerja Anda. **Untuk melakukan ini, pilih daftar dropdownlist **Impor/Ekspor**, lalu pilih Ekspor definisi JSON.**

1. Simpan definisi ASL yang diekspor dalam direktori proyek Anda.

   Anda meneruskan definisi ASL yang diekspor sebagai parameter input ke sumber daya [https://registry.terraform.io/modules/terraform-aws-modules/step-functions/aws/latest](https://registry.terraform.io/modules/terraform-aws-modules/step-functions/aws/latest)Terraform yang menggunakan fungsi tersebut. [https://developer.hashicorp.com/terraform/language/functions/templatefile](https://developer.hashicorp.com/terraform/language/functions/templatefile) Fungsi ini digunakan di dalam bidang definisi yang melewati definisi ASL yang diekspor dan substitusi variabel apa pun.
**Tip**  
Karena file definisi ASL dapat berisi blok teks yang panjang, kami sarankan Anda menghindari metode EOF sebaris. Ini membuatnya lebih mudah untuk mengganti parameter ke dalam definisi mesin status Anda.

1. (Opsional) Perbarui definisi ASL dalam IDE Anda dan visualisasikan perubahan Anda menggunakan. AWS Toolkit for Visual Studio Code  
![\[Screenshot definisi ASL dari alur kerja dalam Visual Studio Code dan representasi visualnya.\]](http://docs.aws.amazon.com/id_id/step-functions/latest/dg/images/visualize-sm-terraform-iac.png)

   [Untuk menghindari terus-menerus mengekspor definisi Anda dan memfaktorkannya kembali ke proyek Anda, kami sarankan Anda membuat pembaruan secara lokal di IDE Anda dan melacak pembaruan ini dengan Git.](https://git-scm.com/) 

1. Uji alur kerja Anda menggunakan [Step Functions Local](sfn-local.md).
**Tip**  
[Anda juga dapat menguji integrasi layanan secara lokal dengan fungsi Lambda dan API Gateway APIs di mesin status Anda menggunakan CLI Local.AWS SAM](sfn-local-lambda.md)

1. Pratinjau mesin status Anda dan AWS sumber daya lainnya sebelum menerapkan mesin status. Untuk melakukan ini, jalankan perintah berikut.

   ```
   terraform plan
   ```

1. Terapkan mesin status Anda dari lingkungan lokal Anda atau melalui [pipa CI/CD](https://aws.amazon.com/blogs/developer/build-infrastructure-ci-for-terraform-code-leveraging-aws-developer-tools-and-terratest/) menggunakan perintah berikut.

   ```
   terraform apply
   ```

1. (Opsional) Bersihkan sumber daya Anda dan hapus mesin status menggunakan perintah berikut.

   ```
   terraform destroy
   ```

## Peran dan kebijakan IAM untuk mesin negara Anda
<a name="terraform-sfn-iam-policy"></a>

Gunakan [kebijakan integrasi layanan Terraform](https://registry.terraform.io/modules/terraform-aws-modules/step-functions/aws/latest#service-integration-policies) untuk menambahkan izin IAM yang diperlukan ke mesin status Anda, misalnya, izin untuk menjalankan fungsi Lambda. Anda juga dapat menentukan peran dan kebijakan eksplisit dan mengaitkannya dengan mesin status Anda.

Contoh kebijakan IAM berikut memberikan akses mesin status Anda untuk memanggil fungsi Lambda bernama. `myFunction`

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:InvokeFunction"
      ],
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:myFunction"
    }
  ]
}
```

Kami juga merekomendasikan penggunaan sumber [https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document)data saat mendefinisikan kebijakan IAM untuk mesin negara Anda di Terraform. Ini membantu Anda memeriksa apakah kebijakan Anda salah bentuk dan mengganti sumber daya apa pun dengan variabel.

Contoh kebijakan IAM berikut menggunakan sumber `aws_iam_policy_document` data dan memberikan akses mesin status Anda untuk memanggil fungsi Lambda bernama. `myFunction`

```
data "aws_iam_policy_document" "state_machine_role_policy" {
  
  statement {
    effect = "Allow"

    actions = [
      "lambda:InvokeFunction"
    ]

    resources = ["${aws_lambda_function.function-1.arn}:*"]
  }
  
}
```

**Tip**  
Untuk melihat lebih banyak pola AWS arsitektur lanjutan yang diterapkan dengan Terraform, lihat [contoh Terraform di Koleksi Alur Kerja Tanah](https://serverlessland.com/workflows?framework=Terraform) Tanpa Server.

# Mengekspor alur kerja Anda ke templat IAc
<a name="exporting-iac-templates"></a>

 AWS Step Functions Konsol menyediakan kemampuan untuk mengekspor dan mengunduh alur kerja yang disimpan sebagai templat AWS CloudFormation atau AWS SAM (SAM). Untuk dukungan Wilayah AWS itu AWS Infrastructure Composer, ini juga menyediakan kemampuan untuk mengekspor alur kerja Anda ke Infrastructure Composer dan menavigasi ke konsol Infrastructure Composer, di mana Anda dapat terus bekerja dengan template yang baru dibuat.

## Opsi konfigurasi templat
<a name="exporting-iac-templates-config-options"></a>

Opsi berikut tersedia dengan fitur ini. Jika Anda memilih untuk mengekspor dan mengunduh file templat IAC, konsol akan menampilkan opsi yang berlaku untuk mesin status tersimpan untuk dipilih. Jika Anda mengekspor ke Infrastructure Composer, konsol Step Functions secara otomatis mengimplementasikan konfigurasi yang berlaku untuk mesin status Anda.
+  **Sertakan peran IAM yang dibuat oleh konsol atas nama Anda** — Opsi ini mengekspor kebijakan peran eksekusi. Ini membangun peran IAM dalam template dan menempelkannya ke sumber daya mesin negara. Opsi ini hanya berlaku jika mesin status memiliki peran eksekusi yang dibuat oleh konsol.
+  **Sertakan Grup CloudWatch Log** - Membangun grup CloudWatch log di template dan melampirkannya ke sumber daya mesin negara. Opsi ini hanya berlaku jika mesin status memiliki grup CloudWatch log yang dilampirkan padanya dan [level log](cw-logs.md#cloudwatch-log-level) *tidak* disetel ke`OFF`. 
+  **Ganti referensi sumber daya dengan DefinitionSubstitutions** — Opsi ini menghasilkan [DefinitionSubstitutions](concepts-sam-sfn.md#sam-definition-substitution-eg)komponen berikut: 
  + Bidang [Peta S3 Terdistribusi](state-map-distributed.md).
  + `Activity`sumber daya. Ekspor menyertakan `Activity` sumber daya dalam CloudFormation template untuk `Run Activity` tugas apa pun. Ekspor juga menyediakan `DefinitionSubstitutions` referensi `Activity` sumber daya yang dibuat.
  + Setiap `ARN` atau `S3URI` di bidang Payload untuk semua integrasi layanan.
  + Selain `S3URI` bidang `ARN` dan, ekspor menghasilkan `DefinitionSubstitutions` bidang payload integrasi layanan lainnya yang sering digunakan. Integrasi layanan spesifik adalah sebagai berikut: 
    + `athena:startQueryExecution`
    + `batch:submitJob`
    +  `dynamodb:getItem`, `dynamodb:updateItem`, `dynamodb:updateItem`, `dynamodb:deleteItem` 
    + `ecs:runTask`
    + `glue:startJobRun`
    + `http:invoke`
    + `lambda:invoke`
    + `sns:publish`
    + `sqs:sendMessage`
    + `states:startExecution`

## Ekspor dan unduh templat IAc alur kerja Anda
<a name="exporting-iac-templates-files-procedure"></a>

**Untuk mengekspor alur kerja Anda ke file template IAC**

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) dan pilih mesin status yang ingin Anda gunakan. Pastikan bahwa setiap perubahan pada mesin status disimpan sebelum Anda melanjutkan ke langkah berikutnya.

1. Pilih **Ekspor ke CloudFormation atau template SAM** dari menu **Tindakan**.

1. Pilih **Ketik** sebagai **SAM** atau **CloudFormation**dari kotak dialog yang muncul.
   + Jika Anda memilih **CloudFormation**template, selanjutnya pilih format file **JSON** atau **YAMB**.
   + Jika Anda memilih template **SAM**, tidak ada pilihan format yang disajikan. Template SAM default ke format file YAMB.

1. Perluas **Konfigurasi tambahan**. Secara default semua opsi dipilih. Tinjau dan perbarui pilihan opsi untuk template IAC Anda. Opsi dijelaskan secara rinci di bagian sebelumnya berjudul[Opsi konfigurasi templat](#exporting-iac-templates-config-options). 

   Jika opsi tidak berlaku untuk alur kerja spesifik Anda, maka opsi tersebut tidak akan ditampilkan di kotak dialog.

1. Pilih **Unduh** untuk mengekspor dan mengunduh file template IAC yang Anda hasilkan.

## Ekspor alur kerja Anda langsung ke AWS Infrastructure Composer
<a name="exporting-iac-templates-infra-composer-procedure"></a>

**Untuk mengekspor alur kerja Anda ke Infrastructure Composer**

1. Buka [konsol Step Functions](https://console.aws.amazon.com/states/home?region=us-east-1#/) dan pilih mesin status yang ingin Anda gunakan. Pastikan bahwa setiap perubahan pada mesin status disimpan sebelum Anda melanjutkan ke langkah berikutnya.

1. Pilih **Ekspor ke Komposer Infrastruktur** dari menu **Tindakan**.

1. Kotak dialog **Ekspor ke Infrastruktur Komposer** ditampilkan. Anda dapat menggunakan nama default yang ditampilkan di bidang **Transfer nama bucket** atau memasukkan nama baru. Nama bucket Amazon S3 harus unik secara global dan mengikuti aturan [penamaan bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).

1. Pilih **Konfirmasi dan buat proyek** untuk mengekspor alur kerja Anda ke Infrastructure Composer.

1. Untuk menyimpan definisi proyek dan alur kerja Anda di Infrastructure Composer, aktifkan mode [sinkronisasi lokal](https://docs.aws.amazon.com/application-composer/latest/dg/reference-features-local-sync.html).

**catatan**  
Jika Anda pernah menggunakan fitur **Export to Infrastructure Composer** sebelumnya dan membuat bucket Amazon S3 menggunakan nama default, Step Functions dapat menggunakan kembali bucket ini jika masih ada. Terima nama bucket default di kotak dialog untuk menggunakan kembali bucket yang ada.

### Konfigurasi bucket transfer Amazon S3
<a name="export-appcomposer-bucket-info"></a>

Bucket Amazon S3 yang dibuat Step Functions untuk mentransfer alur kerja Anda secara otomatis mengenkripsi objek menggunakan standar enkripsi AES 256. Step Functions juga mengonfigurasi bucket untuk menggunakan [kondisi pemilik bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-owner-condition.html) untuk memastikan bahwa hanya Anda Akun AWS yang dapat menambahkan objek ke bucket.

Nama bucket default menggunakan awalan`states-templates`, string alfanumerik 10 digit, dan alur kerja yang Wilayah AWS Anda buat di:. `states-templates-amzn-s3-demo-bucket-us-east-1` Untuk menghindari biaya tambahan ditambahkan ke Anda Akun AWS, kami sarankan Anda menghapus bucket Amazon S3 segera setelah Anda selesai mengekspor alur kerja Anda ke Infrastructure Composer.

[Harga Amazon S3](https://aws.amazon.com/s3/pricing/) standar berlaku.

### Izin yang diperlukan
<a name="export-appcomposer-permissions"></a>

Untuk menggunakan fitur ekspor Step Functions ini dengan Infrastructure Composer, Anda memerlukan izin tertentu untuk mengunduh AWS SAM template dan menulis konfigurasi template Anda ke Amazon S3.

Untuk mengunduh AWS SAM templat, Anda harus memiliki izin untuk menggunakan tindakan API berikut:
+ [saya: GetPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicy.html)
+ [saya: GetPolicyVersion](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html)
+ [saya: GetRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRole.html)
+ [saya: GetRolePolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetRolePolicy.html)
+ [saya: ListAttachedRolePolicies](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedRolePolicies.html)
+ [saya: ListRolePolicies](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRolePolicies.html)
+ [saya: ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html)

Agar Step Functions dapat menulis konfigurasi fungsi Anda ke Amazon S3, Anda harus memiliki izin untuk menggunakan tindakan API berikut:
+ [S3: PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [S3: CreateBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html)
+ [S3: PutBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)

Jika Anda tidak dapat mengekspor konfigurasi fungsi Anda ke Infrastructure Composer, periksa apakah akun Anda memiliki izin yang diperlukan untuk operasi ini. 