Penggunaan AWS CDK untuk membuat alur kerja Standar di 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.

Penggunaan AWS CDK untuk membuat alur kerja Standar di Step Functions

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

Anda akan mendefinisikan AWS Infrastruktur menggunakan salah satu CDKbahasa yang didukung. Setelah menentukan infrastruktur, Anda akan mensintesis aplikasi ke AWS CloudFormation template dan menyebarkannya ke AWS akun.

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

Sebelum Anda memulai tutorial ini, Anda harus mengatur AWS CDK lingkungan pengembangan seperti yang dijelaskan dalam Memulai Dengan AWS CDK - Prasyarat di AWS Cloud Development Kit (AWS CDK) Panduan Pengembang. Kemudian, instal AWS CDK dengan perintah berikut di AWS CLI:

npm install -g aws-cdk

Tutorial ini menghasilkan hasil yang sama sepertiPenggunaan AWS CloudFormation untuk membuat alur kerja di Step Functions. Namun, dalam tutorial ini, AWS CDK tidak mengharuskan Anda untuk membuat IAM peran; AWS CDK melakukannya untuk Anda. Bagian AWS CDK versi juga mencakup Status alur kerja yang berhasil 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 untuk Anda Akun AWS, lihat Modul 10 - Terapkan dengan AWS CDKdari AWS Step Functions Lokakarya.

Langkah 1: Siapkan AWS CDK proyek

  1. Di direktori home Anda, atau direktori lain jika Anda mau, jalankan perintah berikut untuk membuat direktori untuk yang baru AWS CDK aplikasi.

    penting

    Pastikan untuk memberi nama step direktori. Bagian AWS CDK Template aplikasi menggunakan nama direktori untuk menghasilkan 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#

    Pastikan Anda telah menginstal. NETversi 6.0 atau lebih tinggi. Untuk selengkapnya, lihat Versi yang didukung.

    mkdir step && cd step
  2. 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 CDKdependensi dasar.

    source .venv/bin/activate python -m pip install -r requirements.txt
    Java
    cdk init --language java
    C#
    cdk init --language csharp

Langkah 2: Gunakan AWS CDK untuk membuat mesin negara

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

Untuk membuat Lambda Fungsi

Berikut ini AWS CDK kode mendefinisikan Lambda fungsi, menyediakan kode sumbernya 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#
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, disematkan sebagai string dalam kode sumber AWS CDK aplikasi.

  • Atribut fungsi lainnya, seperti runtime yang akan digunakan (Node 18.x), titik masuk fungsi, dan batas waktu.

Untuk membuat mesin status

Mesin negara kami memiliki dua status: a Lambda tugas fungsi, dan Status alur kerja yang berhasil negara. Fungsi tersebut mengharuskan kita membuat Step Functions Status alur kerja tugasyang 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 bernamaMyLambdaTask, kemudian menggunakan next() metode untuk mendefinisikan status sukses bernamaGreetedWorld.

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#
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 menyebarkan AWS CDK aplikasi

Dalam Anda yang baru dibuat AWS CDK proyek, edit file yang berisi definisi tumpukan agar terlihat seperti kode contoh berikut. Anda akan mengenali definisi dari Lambda fungsi dan Step Functions mesin negara 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#

    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"))) }); } } }
  2. Simpan file sumber, lalu jalankan cdk synth perintah di direktori utama aplikasi.

    AWS CDK menjalankan aplikasi dan mensintesis AWS CloudFormation Template dari itu. AWS CDK kemudian menampilkan template.

    catatan

    Jika Anda TypeScript terbiasa membuat AWS CDK proyek, 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();
  3. Untuk menyebarkan fungsi Lambda dan mesin status Step Functions ke AWS akun, masalahcdk deploy. Anda akan diminta untuk menyetujui IAM kebijakan AWS CDK telah dihasilkan.

Langkah 3: Mulai eksekusi mesin negara

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

Untuk memulai eksekusi mesin status

  1. Buka konsol Step Functions dan pilih nama mesin status yang Anda buat AWS CDK.

  2. Pada halaman mesin status, pilih Mulai eksekusi.

    Kotak dialog Mulai eksekusi ditampilkan.

  3. (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

  4. Pilih Mulai Eksekusi.

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

  5. 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 4: Bersihkan

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

Langkah selanjutnya

Untuk mempelajari lebih lanjut tentang pengembangan AWS Infrastruktur menggunakan AWS CDK, lihat AWS CDK Panduan Pengembang.

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

TypeScript

Bekerja dengan AWS CDK di TypeScript

JavaScript

Bekerja dengan AWS CDK di JavaScript

Python

Bekerja dengan AWS CDK di Python

Java

Bekerja dengan AWS CDK di Jawa

C#

Bekerja dengan AWS CDK di C #

Untuk informasi lebih lanjut tentang AWS Membangun modul Library yang digunakan dalam tutorial ini, lihat berikut AWS CDK APIIhtisar referensi: