Membuat mesin status Aktivitas menggunakan Step Functions - AWS Step Functions

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

Membuat mesin status Aktivitas menggunakan Step Functions

Tutorial ini menunjukkan cara membuat mesin state berbasis aktivitas menggunakan Java dan AWS Step Functions. Aktivitas memungkinkan Anda mengontrol kode pekerja yang berjalan di tempat lain dari mesin status Anda. Untuk gambaran umum, lihat Pelajari tentang Aktivitas di Step Functions di Pelajari tentang mesin status di Step Functions.

Untuk menyelesaikan tutorial ini, Anda memerlukan hal berikut:

  • SDKUntuk Jawa. Contoh aktivitas dalam tutorial ini adalah aplikasi Java yang menggunakan AWS SDK for Java untuk berkomunikasi dengan AWS.

  • AWS kredensil di lingkungan atau dalam standar AWS file konfigurasi. Untuk informasi selengkapnya, lihat Mengatur AWS Kredensi di AWS SDK for Java Panduan Pengembang.

Langkah 1: Buat Aktivitas

Anda harus membuat Step Functions mengetahui aktivitas yang pekerjanya (sebuah program) yang ingin Anda buat. Step Functions merespons dengan Amazon Resource Name (ARN) yang menetapkan identitas untuk aktivitas tersebut. Gunakan identitas ini untuk mengoordinasikan informasi yang diteruskan antara mesin status dan pekerja Anda.

penting

Pastikan tugas aktivitas Anda berada di bawah yang sama AWS akun sebagai mesin negara Anda.

  1. Di konsol Step Functions, di panel navigasi yang ada di sebelah kiri, pilih Aktivitas.

  2. Pilih Buat aktivasi.

  3. Masukkan Nama untuk aktivitas, misalnyaget-greeting, lalu pilih Buat aktivitas.

  4. Saat tugas aktivitas Anda dibuat, catat tugasnyaARN, seperti yang ditunjukkan pada contoh berikut.

    arn:aws:states:us-east-1:123456789012:activity:get-greeting

Langkah 2: Buat mesin negara

Buat mesin status yang menentukan waktu aktivitas Anda dipanggil dan waktu pekerja Anda harus melakukan pekerjaan utamanya, mengumpulkan hasilnya, dan mengembalikannya. Untuk membuat mesin status, Anda akan menggunakan Editor kode Workflow Studio.

  1. Di dalam konsol Step Functions, di panel navigasi yang ada di sebelah kiri, pilih Mesin status.

  2. Pada halaman State Machines, pilih Create state machine.

  3. Dalam kotak dialog Pilih templat, pilih Kosong.

  4. Pilih Pilih untuk membuka Workflow Studio diMode desain.

  5. Untuk tutorial ini, Anda akan menulis definisi Amazon States Language (ASL) dari mesin status Anda di editor kode. Untuk melakukan ini, pilih Kode.

  6. Hapus kode boilerplate yang ada dan tempel kode berikut. Ingatlah untuk mengganti contoh ARN dalam kode ini dengan tugas aktivitas yang Anda buat sebelumnya di Resource bidang. ARN

    { "Comment": "An example using a Task state.", "StartAt": "getGreeting", "Version": "1.0", "TimeoutSeconds": 300, "States": { "getGreeting": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:get-greeting", "End": true } } }

    Ini adalah deskripsi mesin negara Anda menggunakan Amazon States Language (ASL). ARN menentukan satu status Task bernama getGreeting. Untuk informasi selengkapnya, lihat Struktur Mesin Status.

  7. PadaVisualisasi grafik, pastikan grafik alur kerja untuk ASL definisi yang Anda tambahkan terlihat mirip dengan grafik berikut.

    Visualisasi grafik mesin negara dengan status RunActivity tugas.
  8. Tentukan nama untuk mesin negara Anda. Untuk melakukan ini, pilih ikon edit di sebelah nama mesin status default MyStateMachine. Kemudian, dalam konfigurasi mesin Negara, tentukan nama di kotak Nama mesin Negara.

    Untuk tutorial ini, masukkan nama ActivityStateMachine.

  9. (Opsional) Dalam konfigurasi mesin State, tentukan pengaturan alur kerja lainnya, seperti jenis mesin status dan peran pelaksanaannya.

    Untuk tutorial ini, simpan semua pilihan default di pengaturan mesin State.

    Jika sebelumnya Anda telah membuat IAM peran dengan izin yang benar untuk mesin status dan ingin menggunakannya, di Izin, pilih Pilih peran yang ada, lalu pilih peran dari daftar. Atau pilih Masukkan peran ARN dan kemudian berikan IAM peran ARN untuk itu.

  10. Dalam kotak dialog Konfirmasi pembuatan peran, pilih Konfirmasi untuk melanjutkan.

    Anda juga dapat memilih Lihat pengaturan peran untuk kembali ke konfigurasi mesin Status.

    catatan

    Jika Anda menghapus IAM peran yang dibuat Step Functions, Step Functions tidak dapat membuatnya kembali nanti. Demikian pula, jika Anda mengubah peran (misalnya, dengan menghapus Step Functions dari prinsipal dalam IAM kebijakan), Step Functions tidak dapat memulihkan pengaturan aslinya nanti.

Langkah 3: Terapkan Pekerja

Buat pekerja. Seorang pekerja adalah program yang bertanggung jawab untuk:

  • Polling Step Functions untuk kegiatan menggunakan GetActivityTask API aksi.

  • Melakukan pekerjaan aktivitas menggunakan kode Anda, (misalnya, metode getGreeting() dalam kode berikut).

  • Mengembalikan hasil menggunakanSendTaskSuccess,SendTaskFailure, dan SendTaskHeartbeat API tindakan.

catatan

Untuk contoh pekerja aktivitas yang lebih lengkap, lihat Contoh: Pekerja Aktivitas di Ruby. Contoh ini memberikan implementasi berdasarkan praktik terbaik, yang dapat Anda gunakan sebagai referensi untuk pekerja aktivitas Anda. Kode menerapkan pola konsumen-produsen dengan jumlah utas yang dapat dikonfigurasi untuk poller dan pekerja aktivitas.

Untuk mengimplementasikan pekerja

  1. Buat file bernama GreeterActivities.java.

  2. Tambahkan kode berikut ke file tersebut.

    import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.EnvironmentVariableCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.stepfunctions.AWSStepFunctions; import com.amazonaws.services.stepfunctions.AWSStepFunctionsClientBuilder; import com.amazonaws.services.stepfunctions.model.GetActivityTaskRequest; import com.amazonaws.services.stepfunctions.model.GetActivityTaskResult; import com.amazonaws.services.stepfunctions.model.SendTaskFailureRequest; import com.amazonaws.services.stepfunctions.model.SendTaskSuccessRequest; import com.amazonaws.util.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; import java.util.concurrent.TimeUnit; public class GreeterActivities { public String getGreeting(String who) throws Exception { return "{\"Hello\": \"" + who + "\"}"; } public static void main(final String[] args) throws Exception { GreeterActivities greeterActivities = new GreeterActivities(); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSocketTimeout((int)TimeUnit.SECONDS.toMillis(70)); AWSStepFunctions client = AWSStepFunctionsClientBuilder.standard() .withRegion(Regions.US_EAST_1) .withCredentials(new EnvironmentVariableCredentialsProvider()) .withClientConfiguration(clientConfiguration) .build(); while (true) { GetActivityTaskResult getActivityTaskResult = client.getActivityTask( new GetActivityTaskRequest().withActivityArn(ACTIVITY_ARN)); if (getActivityTaskResult.getTaskToken() != null) { try { JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput()); String greetingResult = greeterActivities.getGreeting(json.get("who").textValue()); client.sendTaskSuccess( new SendTaskSuccessRequest().withOutput( greetingResult).withTaskToken(getActivityTaskResult.getTaskToken())); } catch (Exception e) { client.sendTaskFailure(new SendTaskFailureRequest().withTaskToken( getActivityTaskResult.getTaskToken())); } } else { Thread.sleep(1000); } } } }
    catatan

    Kelas EnvironmentVariableCredentialsProvider dalam contoh ini mengasumsikan bahwa variabel lingkungan AWS_ACCESS_KEY_ID (atau AWS_ACCESS_KEY) dan AWS_SECRET_KEY (atau AWS_SECRET_ACCESS_KEY) ditetapkan. Untuk informasi lebih lanjut tentang memberikan kredensi yang diperlukan ke pabrik, lihat AWSCredentialsProviderdi AWS SDK for Java APIReferensi dan Pengaturan AWS Kredensi dan Wilayah untuk Pembangunan di AWS SDK for Java Panduan Pengembang.

    Secara default AWS SDKakan menunggu hingga 50 detik untuk menerima data dari server untuk operasi apa pun. Operasi GetActivityTask adalah operasi poll panjang yang akan menunggu hingga 60 detik untuk tugas yang tersedia berikutnya. Untuk mencegah menerima SocketTimeoutException kesalahan, atur SocketTimeout ke 70 detik.

  3. Dalam daftar parameter GetActivityTaskRequest().withActivityArn() konstruktor, ganti ACTIVITY_ARN nilai dengan tugas ARN aktivitas yang Anda buat sebelumnya.

Langkah 4: Jalankan mesin negara

Saat Anda memulai eksekusi mesin status, pekerja Anda melakukan polling Step Functions untuk aktivitas, melakukan pekerjaannya (menggunakan input yang Anda berikan), dan mengembalikan hasilnya.

  1. Pada ActivityStateMachinehalaman, pilih Mulai eksekusi.

    Kotak dialog Mulai eksekusi ditampilkan.

  2. Dalam kotak dialog Mulai eksekusi, lakukan hal berikut:

    1. (Opsional) Masukkan nama eksekusi khusus untuk mengganti default yang dihasilkan.

      Non- ASCII nama dan logging

      Step Functions menerima nama untuk mesin negara, eksekusi, aktivitas, dan label yang berisi ASCII non-karakter. Karena karakter seperti itu tidak akan berfungsi dengan Amazon CloudWatch, kami sarankan hanya menggunakan ASCII karakter sehingga Anda dapat melacak metrik. CloudWatch

    2. Dalam kotak Input, masukkan JSON input berikut untuk menjalankan alur kerja Anda.

      { "who": "AWS Step Functions" }
    3. Pilih Mulai Eksekusi.

    4. 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 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, lihatIkhtisar detail eksekusi.

Langkah 5: Jalankan dan Hentikan Pekerja

Agar pekerja melakukan polling pada mesin status Anda untuk aktivitas, Anda harus menjalankan pekerja.

  1. Pada baris perintah, navigasikan ke direktori tempat Anda membuatGreeterActivities.java.

  2. Untuk menggunakan AWS SDK, tambahkan path lengkap third-party direktori lib dan ke dependensi file build Anda dan ke Java Anda. CLASSPATH Untuk informasi selengkapnya, lihat Mengunduh dan Mengekstrak SDK di AWS SDK for Java Panduan Pengembang.

  3. Kompilasikan file.

    $ javac GreeterActivities.java
  4. Jalankan file.

    $ java GreeterActivities
  5. Pada konsol Step Functions, navigasikan ke halaman Execution Details.

  6. Ketika eksekusi selesai, periksa hasil eksekusi Anda.

  7. Hentikan pekerja.