我使用AWS Step Functions
并拥有以下工作流程
initStep - 这是一个 lambda 函数处理程序,它获取一些数据并将其发送给SQS
外部服务。
activity = os.getenv('ACTIVITY')
queue_name = os.getenv('QUEUE_NAME')
def lambda_handler(event, context):
event['my_activity'] = activity
data = json.dumps(event)
# Retrieving a queue by its name
sqs = boto3.resource('sqs')
queue = sqs.get_queue_by_name(QueueName=queue_name)
queue.send_message(MessageBody=data, MessageGroupId='messageGroup1' + str(datetime.time(datetime.now())))
return event
Run Code Online (Sandbox Code Playgroud)
validationWaiting - 它activity
等待来自包含数据的外部服务的答案。
complete - 它是一个 lambda 函数处理程序,它使用initStep
.
def lambda_handler(event, context):
email = event['email'] if 'email' in event else None
data = event['data'] if 'data' in event else None
client …
Run Code Online (Sandbox Code Playgroud) 我在 step 函数中有一个活动TimeoutSeconds
,如下所示:
ActivityWaiting:
Type: Task
ResultPath: $.output
Resource: arn:aws:states:#{AWS::Region}:#{AWS::AccountId}:activity:myActivity
TimeoutSeconds: 3600
Run Code Online (Sandbox Code Playgroud)
我想控制 的值TimeoutSeconds
并使用上一步中的参数更改它。我试过这样的事情:
ActivityWaiting:
Type: Task
ResultPath: $.output
Resource: arn:aws:states:#{AWS::Region}:#{AWS::AccountId}:activity:myActivity
TimeoutSeconds: $.myTimeout
Run Code Online (Sandbox Code Playgroud)
但不幸的是,它没有奏效。
编辑:我想myTimeout
在使用 python 执行 step 函数之前计算/定义时间。类似的东西:
data['myTimeout'] = getTimeout() #dymanic time in the seconds(ex 15000)
response = step_functions.start_execution(stateMachineArn=state_machine, input=json.dumps(data))
Run Code Online (Sandbox Code Playgroud)