

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

# Jalankan tugas AWS Systems Manager Automation secara sinkron dari AWS Step Functions
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions"></a>

*Elie El khoury, Amazon Web Services*

## Ringkasan
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-summary"></a>

Pola ini menjelaskan cara berintegrasi AWS Step Functions dengan AWS Systems Manager. Ini menggunakan integrasi layanan AWS SDK untuk memanggil Systems Manager **startAutomationExecution**API dengan token tugas dari alur kerja mesin status, dan berhenti sampai token kembali dengan panggilan sukses atau gagal. Untuk mendemonstrasikan integrasi, pola ini mengimplementasikan pembungkus dokumen Otomasi (runbook) di sekitar `AWS-RunPowerShellScript` dokumen `AWS-RunShellScript` atau, dan digunakan `.waitForTaskToken` untuk memanggil atau secara sinkron. `AWS-RunShellScript` `AWS-RunPowerShellScript` Untuk informasi selengkapnya tentang integrasi layanan AWS SDK di Step Functions, lihat Panduan [AWS Step Functions Pengembang](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html).

Step Functions**** adalah layanan alur kerja visual dengan kode rendah yang dapat Anda gunakan untuk membangun aplikasi terdistribusi, mengotomatiskan proses TI dan bisnis, serta membangun jaringan data dan pembelajaran mesin dengan menggunakan layanan. AWS Alur kerja mengelola kegagalan, percobaan ulang, paralelisasi, integrasi layanan, dan observabilitas sehingga Anda dapat fokus pada logika bisnis bernilai lebih tinggi.

Otomatisasi, kemampuan AWS Systems Manager, menyederhanakan tugas pemeliharaan, penyebaran, dan remediasi umum Layanan AWS seperti Amazon Elastic Compute Cloud (Amazon), Amazon Relational Database Service (Amazon RDS EC2), Amazon Redshift, dan Amazon Simple Storage Service (Amazon S3). Otomasi memberi Anda kontrol terperinci atas konkurensi otomatisasi Anda. Misalnya, Anda dapat menentukan berapa banyak sumber daya yang akan ditargetkan secara bersamaan, dan berapa banyak kesalahan yang dapat terjadi sebelum otomatisasi dihentikan.

Untuk detail implementasi, termasuk langkah runbook, parameter, dan contoh, lihat bagian [Informasi tambahan](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).

## Prasyarat dan batasan
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-prereqs"></a>

**Prasyarat**
+  AWS Akun aktif
+ AWS Identity and Access Management Izin (IAM) untuk mengakses Step Functions dan Systems Manager
+ Sebuah EC2 instance dengan Systems Manager Agent (SSM Agent) [diinstal](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html) pada instance
+ [Profil instans IAM untuk Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html) yang dilampirkan ke instance tempat Anda berencana menjalankan runbook
+ Peran Step Functions yang memiliki izin IAM berikut (yang mengikuti prinsip hak istimewa terkecil):

```
{
             "Effect": "Allow",
             "Action": "ssm:StartAutomationExecution",
             "Resource": "*"
 }
```

**Versi produk**
+ Skema dokumen SSM versi 0.3 atau yang lebih baru
+ Agen SSM versi 2.3.672.0 atau yang lebih baru

## Arsitektur
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-architecture"></a>

**Tumpukan teknologi target**
+ AWS Step Functions
+ AWS Systems Manager Otomasi

**Arsitektur target**

![\[Arsitektur untuk menjalankan tugas otomatisasi Systems Manager secara sinkron dari Step Functions\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/47c19e4f-d68d-4f91-bb68-202098757529/images/2d248aae-d858-4565-8af2-593cde0da780.png)


**Otomatisasi dan skala**
+ Pola ini menyediakan AWS CloudFormation template yang dapat Anda gunakan untuk menyebarkan runbook pada beberapa instance. (Lihat GitHub [Step Functions dan repositori implementasi Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken).)

## Alat
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-tools"></a>

**Layanan AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan Wilayah.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)adalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan AWS Lambda fungsi dan lainnya Layanan AWS untuk membangun aplikasi bisnis yang penting.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)membantu Anda mengelola aplikasi dan infrastruktur yang berjalan di AWS Cloud. Ini menyederhanakan aplikasi dan manajemen sumber daya, mempersingkat waktu untuk mendeteksi dan menyelesaikan masalah operasional, dan membantu Anda mengelola AWS sumber daya Anda dengan aman dalam skala besar.

**Kode**

Kode untuk pola ini tersedia di repositori [implementasi GitHub Step Functions dan Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken). 

## Epik
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-epics"></a>

### Buat runbook
<a name="create-runbooks"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unduh CloudFormation template. | Unduh `ssm-automation-documents.cfn.json` templat dari `cloudformation ` folder GitHub repositori. | AWS DevOps | 
| Buat runbook. | Masuk ke Konsol Manajemen AWS, buka [CloudFormation konsol](https://console.aws.amazon.com/cloudformation/), dan terapkan template. Untuk informasi selengkapnya tentang penerapan CloudFormation templat, lihat [Membuat tumpukan di CloudFormation konsol](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dalam CloudFormation dokumentasi.  CloudFormation Template menyebarkan tiga sumber daya:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.html) | AWS DevOps | 

### Buat mesin status sampel
<a name="create-a-sample-state-machine"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat mesin status uji.  | Ikuti petunjuk di [Panduan AWS Step Functions Pengembang](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) untuk membuat dan menjalankan mesin status. Untuk definisi, gunakan kode berikut. Pastikan untuk memperbarui `InstanceIds` nilai dengan ID instance Systems Manager-enabled yang valid di akun Anda.<pre>{<br />  "Comment": "A description of my state machine",<br />  "StartAt": "StartAutomationWaitForCallBack",<br />  "States": {<br />    "StartAutomationWaitForCallBack": {<br />      "Type": "Task",<br />      "Resource": "arn:aws:states:::aws-sdk:ssm:startAutomationExecution.waitForTaskToken",<br />      "Parameters": {<br />        "DocumentName": "SfnRunCommandByInstanceIds",<br />        "Parameters": {<br />          "InstanceIds": [<br />            "i-1234567890abcdef0"<br />          ],<br />          "taskToken.$": "States.Array($$.Task.Token)",<br />          "workingDirectory": [<br />            "/home/ssm-user/"<br />          ],<br />          "Commands": [<br />            "echo \"This is a test running automation waitForTaskToken\" >> automation.log",<br />            "sleep 100"<br />          ],<br />          "executionTimeout": [<br />              "10800"<br />          ],<br />          "deliveryTimeout": [<br />              "30"<br />          ],<br />          "shell": [<br />              "Shell"<br />          ]<br />            }<br />      },<br />      "End": true<br />    }<br />  }<br />}</pre>Kode ini memanggil runbook untuk menjalankan dua perintah yang mendemonstrasikan `waitForTaskToken` panggilan ke Systems Manager Automation.Nilai `shell` parameter (`Shell`atau`PowerShell`) menentukan apakah dokumen Otomasi berjalan `AWS-RunShellScript` atau`AWS-RunPowerShellScript`.Tugas menulis “Ini adalah pengujian yang menjalankan waitForTask Token otomatisasi” ke dalam `/home/ssm-user/automation.log` file, dan kemudian tidur selama 100 detik sebelum merespons dengan token tugas dan melepaskan tugas berikutnya dalam alur kerja.Jika Anda ingin memanggil `SfnRunCommandByTargets` runbook sebagai gantinya, ganti `Parameters` bagian dari kode sebelumnya dengan yang berikut:<pre>"Parameters": {<br />          "Targets": [<br />            {<br />              "Key": "InstanceIds",<br />              "Values": [<br />                "i-02573cafcfEXAMPLE",<br />                "i-0471e04240EXAMPLE"<br />              ]<br />            }<br />          ],</pre> | AWS DevOps | 
| Perbarui peran IAM untuk mesin status. | Langkah sebelumnya secara otomatis membuat peran IAM khusus untuk mesin status. Namun, itu tidak memberikan izin untuk memanggil runbook. Perbarui peran dengan menambahkan izin berikut:<pre>{<br />      "Effect": "Allow",<br />      "Action": "ssm:StartAutomationExecution",<br />      "Resource": "*"<br /> }</pre> | AWS DevOps | 
| Validasi panggilan sinkron. | Jalankan state machine untuk memvalidasi panggilan sinkron antara Step Functions dan Systems Manager Automation. Untuk keluaran sampel, lihat bagian [Informasi tambahan](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).  | AWS DevOps | 

## Sumber daya terkait
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-resources"></a>
+ [Memulai dengan AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) (*Panduan AWS Step Functions Pengembang*)
+ [Tunggu panggilan balik dengan token tugas](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token) (*Panduan AWS Step Functions Pengembang*, pola integrasi layanan)
+ [panggilan API send\$1task\$1success dan [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) (dokumentasi Boto3) 
+ [AWS Systems Manager Otomatisasi](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) (*Panduan AWS Systems Manager Pengguna*)

## Informasi tambahan
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional"></a>

**Detail implementasi**

Pola ini menyediakan CloudFormation template yang menyebarkan dua runbook Systems Manager:
+ `SfnRunCommandByInstanceIds`menjalankan `AWS-RunPowerShellScript` perintah `AWS-RunShellScript` or dengan menggunakan instance IDs.
+ `SfnRunCommandByTargets`menjalankan `AWS-RunPowerShellScript` perintah `AWS-RunShellScript` or dengan menggunakan target.

Setiap runbook mengimplementasikan empat langkah untuk mencapai panggilan sinkron saat menggunakan `.waitForTaskToken` opsi di Step Functions.


| 
| 
| Langkah | Tindakan | Deskripsi | 
| --- |--- |--- |
| **1** | `Branch` | Memeriksa nilai `shell` parameter (`Shell`atau`PowerShell`) untuk memutuskan apakah akan dijalankan `AWS-RunShellScript` untuk Linux atau `AWS-RunPowerShellScript` untuk Windows. | 
| **2** | `RunCommand_Shell` atau `RunCommand_PowerShell` | Mengambil beberapa input dan menjalankan `RunPowerShellScript` perintah `RunShellScript` atau. Untuk informasi selengkapnya, periksa tab **Detail** untuk dokumen `RunCommand_PowerShell` Otomatisasi `RunCommand_Shell` atau di konsol Systems Manager. | 
| **3** | `SendTaskFailure` | Berjalan saat langkah 2 dibatalkan atau dibatalkan. Ini memanggil Step Functions [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) API, yang menerima tiga parameter sebagai input: token yang dilewatkan oleh mesin status, kesalahan kegagalan, dan deskripsi penyebab kegagalan. | 
| **4** | `SendTaskSuccess` | Berjalan ketika langkah 2 berhasil. Ini memanggil Step Functions [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) API, yang menerima token yang diteruskan oleh mesin status sebagai input. | 

**Parameter buku runbook**

`SfnRunCommandByInstanceIds`buku runbook:


| 
| 
| Nama parameter | Jenis | Opsional atau diperlukan | Deskripsi | 
| --- |--- |--- |--- |
| `shell` | String | Diperlukan | Contoh shell untuk memutuskan apakah akan dijalankan `AWS-RunShellScript` untuk Linux atau `AWS-RunPowerShellScript` untuk Windows. | 
| `deliveryTimeout` | Bilangan Bulat | Opsional | Waktu, dalam hitungan detik, untuk menunggu perintah dikirim ke Agen SSM pada sebuah instance. Parameter ini memiliki nilai minimum 30 (0,5 menit) dan nilai maksimum 2592000 (720 jam). | 
| `executionTimeout` | String | Opsional | Waktu, dalam hitungan detik, untuk menyelesaikan perintah sebelum dianggap gagal. Nilai defaultnya adalah 3600 (1 jam). Nilai maksimum adalah 172800 (48 jam). | 
| `workingDirectory` | String | Opsional | Jalur direktori kerja pada instans Anda. | 
| `Commands` | StringList | Diperlukan | Skrip shell atau perintah untuk dijalankan. | 
| `InstanceIds` | StringList | Diperlukan |  IDs Contoh di mana Anda ingin menjalankan perintah. | 
| `taskToken` | String | Diperlukan | Token tugas yang digunakan untuk respons callback. | 

`SfnRunCommandByTargets`buku runbook:


| 
| 
| Nama | Jenis | Opsional atau diperlukan | Deskripsi | 
| --- |--- |--- |--- |
| `shell` | String | Diperlukan | Contoh shell untuk memutuskan apakah akan dijalankan `AWS-RunShellScript` untuk Linux atau `AWS-RunPowerShellScript` untuk Windows. | 
| `deliveryTimeout` | Bilangan Bulat | Opsional | Waktu, dalam hitungan detik, untuk menunggu perintah dikirim ke Agen SSM pada sebuah instance. Parameter ini memiliki nilai minimum 30 (0,5 menit) dan nilai maksimum 2592000 (720 jam). | 
| `executionTimeout` | Bilangan Bulat | Opsional | Waktu, dalam hitungan detik, untuk menyelesaikan perintah sebelum dianggap gagal. Nilai defaultnya adalah 3600 (1 jam). Nilai maksimum adalah 172800 (48 jam). | 
| `workingDirectory` | String | Opsional | Jalur direktori kerja pada instans Anda. | 
| `Commands` | StringList | Diperlukan | Skrip shell atau perintah untuk dijalankan. | 
| `Targets` | MapList | Diperlukan | Array kriteria pencarian yang mengidentifikasi instance dengan menggunakan pasangan kunci-nilai yang Anda tentukan. Misalnya: `[{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]` | 
| `taskToken` | String | Diperlukan | Token tugas yang digunakan untuk respons callback. | 

**Keluaran sampel**

Tabel berikut memberikan output sampel dari fungsi langkah. Ini menunjukkan bahwa total waktu berjalan lebih dari 100 detik antara langkah 5 (`TaskSubmitted`) dan langkah 6 (`TaskSucceeded`). Ini menunjukkan bahwa fungsi langkah menunggu `sleep 100` perintah selesai sebelum pindah ke tugas berikutnya dalam alur kerja.


| 
| 
| ID | Jenis | Langkah | Sumber daya | Waktu Berlalu (ms) | Stempel Waktu | 
| --- |--- |--- |--- |--- |--- |
| **1** | `ExecutionStarted` |  | - | 0 | 11 Mar 2022 02:50:34.303 | 
| **2** | `TaskStateEntered` | `StartAutomationWaitForCallBack` | - | 40 | 11 Mar 2022 02:50:34.343 | 
| **3** | `TaskScheduled` | `StartAutomationWaitForCallBack` | - | 40 | 11 Mar 2022 02:50:34.343 | 
| **4** | `TaskStarted` | `StartAutomationWaitForCallBack` | - | 154 | 11 Mar 2022 02:50:34.457 | 
| **5** | `TaskSubmitted` | `StartAutomationWaitForCallBack` | - | 657 | 11 Mar 2022 02:50:34.960 | 
| **6** | `TaskSucceeded` | `StartAutomationWaitForCallBack` | - | 103835 | 11 Mar 2022 02:52:18.138 | 
| **7** | `TaskStateExited` | `StartAutomationWaitForCallBack` | - | 103860 | 11 Mar 2022 02:52:18.163 | 
| **8** | `ExecutionSucceeded` |  | - | 103897 | 11 Mar 2022 02:52:18.200 | 