Mar*_* K. 8 python amazon-web-services aws-step-functions
我使用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 = boto3.client(service_name='ses')
to = email.split(', ')
message_conrainer = {'Subject': {'Data': 'Email from step functions'},
'Body': {'Html': {
'Charset': "UTF-8",
'Data': """<html><body>
<p>""" + data """</p>
</body> </html> """
}}}
destination = {'ToAddresses': to,
'CcAddresses': [],
'BccAddresses': []}
return client.send_email(Source=from_addresses,
Destination=destination,
Message=message_container)
Run Code Online (Sandbox Code Playgroud)
它确实有效,但问题是我将完整数据从initStep外部服务发送到外部服务,只是为了稍后将其传递给complete. 可能会添加更多步骤。
我相信最好将其作为某种全局数据(当前步骤函数的)共享,这样我就可以添加或删除步骤,并且数据仍然可供所有人使用。
根据Marcin Sucharski的回答,我想出了自己的解决方案。
我需要使用Type: TasksinceinitStep是一个lambda,它发送SQS。
我不需要InputPathin ValidationWaiting,而只需要ResultPath,它存储在活动中收到的数据。
我使用无服务器框架,这是我的最终解决方案:
StartAt: initStep
States:
initStep:
Type: Task
Resource: arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:init-step
Next: ValidationWaiting
ValidationWaiting:
Type: Task
ResultPath: $.validationOutput
Resource: arn:aws:states:#{AWS::Region}:#{AWS::AccountId}:activity:validationActivity
Next: Complete
Catch:
- ErrorEquals:
- States.ALL
ResultPath: $.validationOutput
Next: Complete
Complete:
Type: Task
Resource: arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:complete-step
End: true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8504 次 |
| 最近记录: |