我在 AWS 文档中找不到我想要的任何答案。
是否可以执行 100,000 个(大约)Step Functions 并且状态等待 3 个月?等待状态每30分钟检查一次,否则2个月后退出状态。
等待状态将执行 lambda 函数 - 它将在继续下一个状态之前检查字段 (dynamodb) 是否匹配条件。
我想知道有没有什么限制?
如果 WAIT 状态不是好方法,有什么替代方法?
我有一个由 FIFO SQS 触发的 lambda 函数。我只想运行该函数的一个实例。该函数调用状态机,并且状态机比 lambda 函数需要更长的时间才能完成。我希望 lambda 函数仅在步骤函数完成执行后才能完成。
amazon-sqs amazon-web-services aws-lambda aws-step-functions
AWS 发布了 AWS Step Functions(回调模式)的新功能:
https://aws.amazon.com/about-aws/whats-new/2019/05/aws-step-functions-support-callback-patterns/
我现在想知道,与现有的活动实际上有什么区别。
让我为您总结一下:
与新公布的回调模式有何不同?在我看来,其实是完全一样的——我是不是错过了什么?
我创建了一个状态机来并行运行一些 Glue/ETL 作业。我正在试验映射状态以利用动态并行性。这是阶跃函数的定义:
{
"StartAt": "Map",
"States": {
"Map": {
"Type": "Map",
"InputPath": "$.data",
"ItemsPath": "$.array",
"MaxConcurrency": 2,
"Iterator": {
"StartAt": "glue job",
"States": {
"glue Job": {
"Type": "Task",
"Resource": "arn:aws:states:::glue:startJobRun.sync",
"End": true,
"Parameters": {
"JobName": "glue-etl-job",
"Arguments": {
"--db": "db-dev",
"--file": "$.file",
"--bucket": "$.bucket"
}
}
}
}
},
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"Next": "NotifyError"
}
],
"Next": "NotifySuccess"
},
}
}
Run Code Online (Sandbox Code Playgroud)
传递给步骤函数的输入格式如下:
{
"data": {
"array": [
{"file": "path-to-file1", "bucket": "bucket-name1"},
{"file": "path-to-file2", "bucket": …Run Code Online (Sandbox Code Playgroud) 我正在使用 AWS CDK 创建状态机。而不是默认的重试策略,如下所示:
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
]
Run Code Online (Sandbox Code Playgroud)
我只想制定一项如下所示的包罗万象的政策:
"Retry": [
{
"ErrorEquals": [
"States.ALL"
],
"IntervalSeconds": 10,
"MaxAttempts": 3,
"BackoffRate": 1.5
}
]
Run Code Online (Sandbox Code Playgroud)
不幸的是,我找不到在部署堆栈时删除默认策略的方法。我的包罗万象只是添加到重试策略数组的末尾。
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
},
{
"ErrorEquals": [
"States.ALL"
],
"IntervalSeconds": 10,
"MaxAttempts": 3,
"BackoffRate": 1.5
}
]
Run Code Online (Sandbox Code Playgroud)
有人知道如何摆脱默认政策吗?
当我使用step函数调用API网关时,我填写了“Headers.$”:“$.input.headers”,但是当我测试它时,它could not be used to start the Task: [The value of the field 'Headers' has an invalid format]每次都会给我,我尝试了这个
"input": {
"headers": {
"Authorization": "abcd",
"Content-Type": "application-json"
}
}
Run Code Online (Sandbox Code Playgroud)
它不起作用,任何人都可以给我这个标题字段的示例吗?
万分感激!
默认情况下,每个 AWS Step Function 执行名称都是随机生成的。我想为每个随机生成的名称添加一个前缀。我在文档中的任何地方都找不到执行此操作的方法。我设想这样做的方式是在定义 EventBridge 规则的 CloudFormation 模板中,但如果有我目前不知道的方式,我愿意接受建议。
有其他人能够做到这一点,还是我运气不好?
我已按照 AWS 文档中的步骤在本地设置和运行 AWS Step Functions:https: //docs.aws.amazon.com/step-functions/latest/dg/sfn-local-lambda.html。
一切都运行良好,但在步骤 #5 中,它表示您必须创建一个状态机,并且当定义包含大量任务时,使用命令行执行此操作可能会很痛苦。
有没有办法开始执行本地 .asl 文件中定义的状态机?
这是我在本地定义的状态机的示例(从模板):
{
"Comment": "A state machine that does mock stock trading.",
"StartAt": "Check Stock Value",
"States": {
"Check Stock Value": {
"Type": "Task",
"Resource": "${StockCheckerFunctionArn}",
"Retry": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"IntervalSeconds": 15,
"MaxAttempts": 5,
"BackoffRate": 1.5
}
],
"Next": "Buy or Sell?"
},
"Buy or Sell?": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.stock_price",
"NumericLessThanEquals": 50,
"Next": "Buy Stock"
}
],
"Default": "Sell Stock" …Run Code Online (Sandbox Code Playgroud) 我有一个状态机,其中包含以下相关状态:
States:
'Analyze Report':
Type: Task
Resource: 'arn:aws:states:::lambda:invoke'
Parameters:
FunctionName: '(redacted)'
OutputPath: '$.Payload'
Next: 'Setup Email'
'Setup Email':
Type: Pass
Result:
recipients: '$.accounts'
subject: 'some email subject'
body: 'some email body'
ResultPath: '$'
Next: 'Send Email'
'Send Email':
Type: Task
Resource: 'arn:aws:states:::lambda:invoke'
Parameters:
FunctionName: '(redacted)'
OutputPath: '$.Payload'
Next: '(some downstream task)'
Run Code Online (Sandbox Code Playgroud)
与该步骤关联的 lambda 函数的输出Analyze Report具有以下形式:
{
"accounts": ["foo", "bar", "baz"],
"error_message": null,
"success": true
}
Run Code Online (Sandbox Code Playgroud)
与步骤关联的 lambda 函数Send Email需要以下形式的输入:
{
"recipients": ["foo", "bar", "baz"],
"subject": "some …Run Code Online (Sandbox Code Playgroud) 也许这个问题可以很快得到解答。我正在努力在步骤函数中添加重试机制。我想以 1 小时左右的间隔继续重试失败的活动 24 小时。
我在这里详细介绍了“错误后重试”部分: https: //docs.aws.amazon.com/step-functions/latest/dg/concepts-error-handling.html 它说“乘数每次尝试期间重试间隔都会增加(默认为 2.0)。” 并且还给出了 3 秒后第一次重试和 4.5 秒后下一次重试的示例,因为 BackoffRate 为 1.5。
那么这不是指数退避吗?因为,在同一页面上的“使用重试处理失败”部分下,它表示退避将以指数方式应用。