Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan AWS CDK untuk membuat alur kerja Standar di Step Functions
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 AWS 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. AWS Management Console
Sebelum Anda memulai tutorial ini, Anda harus mengatur lingkungan AWS CDK pengembangan Anda seperti yang dijelaskan dalam Memulai Dengan AWS CDK - Prasyarat 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 sepertiMenggunakan AWS CloudFormation untuk membuat alur kerja di Step Functions. 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 langkah untuk mengilustrasikan cara menambahkan langkah tambahan ke mesin status Anda.
Untuk menerapkan contoh aplikasi tanpa server yang memulai Step Functions alur kerja menggunakan AWS CDK dengan TypeScript, lihat Menerapkan dengan di Workshop. AWS CDK AWS Step Functions
Langkah 1: Siapkan proyek AWS CDK Anda
-
Di direktori home Anda, atau direktori lain jika Anda mau, jalankan perintah berikut untuk membuat direktori untuk AWS CDK aplikasi baru Anda.
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#
-
Pastikan Anda telah menginstal .NET versi 6.0 atau lebih tinggi. Untuk selengkapnya, lihat Versi yang didukung.
mkdir step && cd step
-
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#
-
cdk init --language csharp
Langkah 2: Gunakan AWS CDK untuk membuat mesin negara
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
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#
-
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
Mesin status kami memiliki dua status: tugas Lambda fungsi, dan Status alur kerja yang berhasil status. Fungsi ini mengharuskan kita membuat sebuah Step Functions Status alur kerja tugas 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 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 men-deploy aplikasi AWS CDK
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.
-
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")))
});
}
}
}
-
Simpan file sumber, lalu jalankan cdk synth
perintah di direktori utama aplikasi.
AWS CDKmenjalankan aplikasi dan mensintesis AWS CloudFormation template darinya. AWS CDKkemudian menampilkan template.
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();
-
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
Setelah Anda membuat mesin negara Anda, Anda dapat memulai eksekusi.
Untuk memulai eksekusi mesin status
-
Buka Konsol Step Functions lalu pilih nama mesin status yang Anda buat dengan menggunakan AWS CDK.
-
Pada halaman mesin status, pilih Mulai eksekusi.
Kotak dialog Mulai eksekusi ditampilkan.
(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 tidak akan berfungsi dengan Amazon CloudWatch, kami sarankan hanya menggunakan karakter ASCII sehingga Anda dapat melacak metrik. CloudWatch
-
Pilih Mulai Eksekusi.
Eksekusi state machine Anda dimulai, dan halaman baru yang menunjukkan eksekusi yang sedang berjalan ditampilkan.
-
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 mesin Anda. Akun AWS Jalankan cdk destroy
perintah di direktori utama aplikasi Anda untuk menghapus mesin status Anda.
Langkah selanjutnya
Untuk mempelajari lebih lanjut tentang mengembangkan AWS infrastruktur menggunakanAWS CDK, lihat Panduan AWS CDK Pengembang.
Untuk informasi tentang menulis aplikasi AWS CDK dalam bahasa pilihan Anda, lihat:
- TypeScript
-
Bekerja dengan AWS CDK di TypeScript
- JavaScript
-
Bekerja dengan AWS CDK di JavaScript
- Python
-
Bekerja dengan AWS CDK Python
- Java
-
Bekerja dengan AWS CDK di Jawa
- C#
-
Bekerja dengan AWS CDK di C #
Untuk informasi selengkapnya tentang modul AWS Construct Library yang digunakan dalam tutorial ini, lihat ikhtisar Referensi AWS CDK API berikut: