Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
In diesem Tutorial erstellen Sie eine AWS Lambda Funktion verwenden AWS CloudFormation. Du wirst die benutzen AWS CloudFormation Konsole und eine YAML Vorlage zum Erstellen eines Stacks (IAMRollen, die Lambda-Funktion und die Zustandsmaschine). Anschließend verwenden Sie die Step Functions Functions-Konsole, um die Ausführung der Zustandsmaschine zu starten.
Weitere Informationen finden Sie unter Arbeiten mit CloudFormation Vorlagen und in der AWS::StepFunctions::StateMachine
Ressource im AWS CloudFormation Benutzerleitfaden.
Schritt 1: Richten Sie Ihre ein AWS CloudFormation Vorlage
Bevor Sie die Beispielvorlagen verwenden, sollten Sie wissen, wie Sie die verschiedenen Teile eines deklarieren AWS CloudFormation
Vorlage.
Um eine IAM Rolle für Lambda zu erstellen
Definieren Sie die Vertrauensrichtlinie, die der IAM Rolle für die Lambda-Funktion zugeordnet ist. In den folgenden Beispielen wird eine Vertrauensrichtlinie definiert, die entweder YAML oder JSON verwendet.
- 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"
}
]
}
}
Eine Lambda-Funktion erstellen
Definieren Sie die folgenden Eigenschaften für eine Lambda-Funktion, die die Nachricht Hello World
ausgibt.
Stellen Sie sicher, dass Ihre Lambda-Funktion unter derselben steht AWS Konto und AWS-Region als deine Staatsmaschine.
- 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"
}
},
Um eine IAM Rolle für die State-Machine-Ausführung zu erstellen
Definieren Sie die Vertrauensrichtlinie, die der IAM Rolle für die State-Machine-Ausführung zugeordnet ist.
- 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": "*"
}
]
}
}
]
}
},
So erstellen Sie eine Lambda-Zustandsmaschine
Definieren Sie die Lambda-Zustandsmaschine.
- 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"
]
}
}
}
Schritt 2: Verwenden Sie den AWS CloudFormation Vorlage zum Erstellen einer Lambda State Machine
Sobald Sie die Komponenten des verstanden haben AWS CloudFormation Vorlage können Sie sie zusammenstellen und mit der Vorlage eine erstellen AWS CloudFormation stapeln.
Um die Lambda-Zustandsmaschine zu erstellen
-
Kopieren Sie die folgenden Beispieldaten in eine Datei, die nach dem MyStateMachine.yaml
YAML Beispiel oder MyStateMachine.json
nach JSON benannt ist.
- 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"
]
}
}
}
}
}
-
Öffnen Sie AWS CloudFormation
Konsole und wählen Sie Create Stack.
-
Wählen Sie auf der Seite Select Template (Vorlage auswählen) Upload a template to Amazon S3 (Eine Vorlage zu Amazon S3 hochladen) aus. Wählen Sie Ihre Datei MyStateMachine
und anschließend Next aus.
-
Geben Sie auf der Seite Specify Details (Details angeben) unter Stack name (Stack-Name) MyStateMachine
ein und wählen Sie dann Next (Weiter) aus.
-
Wählen Sie auf der Seite Optionen Weiter aus.
-
Wählen Sie auf der Bewertungsseite die Option Ich bestätige das AWS CloudFormation
könnte IAM Ressourcen erstellen. und wählen Sie dann Create.
AWS CloudFormation beginnt mit der Erstellung des MyStateMachine
Stacks und zeigt den Status CREATE_IN_ PROGRESS an. Wenn der Vorgang abgeschlossen ist, AWS CloudFormation
zeigt den COMPLETE Status CREATE_ an.
-
(Optional) Wählen Sie zum Anzeigen der Ressourcen in Ihrem Stack den Stack und anschließend die Registerkarte Resources aus.
Schritt 3: Starten Sie eine State Machine-Ausführung
Nachdem Sie Ihre Lambda-Zustandsmaschine erstellt haben, können Sie deren Ausführung starten.
Starten der Ausführung des Zustandsautomaten
-
Öffnen Sie die Step Functions Functions-Konsole und wählen Sie den Namen der Zustandsmaschine aus, die Sie mit AWS CloudFormation.
-
Auf dem MyStateMachine-ABCDEFGHIJ1K
Wählen Sie auf der Seite Neue Ausführung aus.
Die Seite New execution wird angezeigt.
(Optional) Geben Sie einen benutzerdefinierten Ausführungsnamen ein, um den generierten Standard zu überschreiben.
ASCIINichtnamen und Protokollierung
Step Functions akzeptiert Namen für Zustandsmaschinen, Ausführungen, Aktivitäten und Bezeichnungen, die ASCII Nichtzeichen enthalten. Da solche Zeichen nicht mit Amazon funktionieren, empfehlen wir CloudWatch, nur ASCII Zeichen zu verwenden, damit Sie die Messwerte verfolgen können CloudWatch.
-
Wählen Sie Start Execution aus.
Eine neue Ausführung Ihres Zustandsautomaten startet und eine neue Seite mit Ihrer laufenden Ausführung wird angezeigt.
-
(Optional) Überprüfen Sie unter Execution Details (Ausführungsdetails) den Execution Status (Ausführungsstatus) sowie die Zeitstempel Started (Gestartet) und Closed (Geschlossen).
-
Um die Ergebnisse Ihrer Ausführung anzuzeigen, wählen Sie Output (Ausgabe).