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 次  |  
        
|   最近记录:  |