amazon-web-services - 如何从我的步骤函数工作流中调用动态事件?

标签 amazon-web-services dynamic aws-step-functions

我想从我的工作流中调用“事件”任务,但事件 ARN 由外部资源定义(例如,事件 ARN 可以来自输入,也可以作为在工作流的其他部分执行 lambda。

但是,任务的 Resource 属性似乎不接受 JsonPath 替换语法。例如,对于此任务定义:

    "DynamicActivity":{
      "Type": "Task",
      "Resource.$": "$.activityArn",
      "Next":"Continue"
    },

我立即从控制台的状态解析器中得到错误:

enter image description here

我知道可以为 lambda 设置一个动态名称,因为使用 lambda,您可以从资源 ARN 中拆分函数名称,例如:

    "DynamicLambda": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": {
        "FunctionName.$": "$.functionName"
      },
      "Next": "Continue"
    }

是否有用于在 Step Functions 中动态指定事件名称的等效语法?

    "Resource": "arn:aws:states:::activity:???"
    "Parameters": {
      "ActivityName.$": "$.activityName"
    } 

如果不是,是否有任何其他方法可以在不知道其 ARN 或静态名称的情况下动态启动事件?是否可以从工作流本身以外的进程启动事件(即 lambda 函数是否可以启动事件)?

最佳答案

[编辑] 假设不正确,因此原始答案不适用。现在合理的解决方案是:

  • 在动态创建事件的同时,还将创建具有该事件任务和 arn 的单节点状态机。
  • 后续任务将运行新创建的状态机,并使用具有轮询机制的 wait state 或在事件状态机完成后继续执行的 async callback 任务。
  • 对于这两种模式,我们都可以在当前状态机中通过 SDK 读取事件状态机的输出并继续流程。
  • 当 Activity 在某个时候被清理时,我们也可能会清理 Activity 状态机。

[原始答案] 假设:由于事件的数量和名称将始终是有限的和已知的。 您可以通过重新设计工作流程来解决此问题,这样,第一个状态确定要执行的事件。

它将通过选择状态来完成。

"ChoiceStateX": {
  "Type": "Choice",
  "Choices": [
    {
      "Variable": "$.activityName",
      "StringEquals": "myActivity",
      "Next": "myActivityState"
    }
  ],
  "Default": "DefaultState"
},

"myActivityState": {
  "Type" : "Task",
  "Resource": "arn:aws:states:us-east-1:123456789012:activity:activity-1",
  "End": true
},

"DefaultState": {
  "Type": "Fail",
  "Cause": "No Matches!"
}

它可以扩展为任意数量的事件,并且在通过 SDK 或 CLI 运行状态机时,您必须传递事件名称。您可以将其作为当前状态机的一部分,或者根据耦合要求使用不同的状态机。

关于amazon-web-services - 如何从我的步骤函数工作流中调用动态事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65939993/

相关文章:

amazon-web-services - 'NULL' 中的 AWS 策略条件运算符 'YAML'

linq - 如何才能在动态 LINQ 中使用动态 Lambda

c++ - 许多堆栈分配与动态分配

aws-step-functions - aws 步骤工作流程是否可以无限循环使用?

java - 使用 fargate 作为 worker 的 AWS Step Functions 工作流程 - 如何将输出发送到下一步?

amazon-web-services - AWS : How to manage instance ppk or pem files?

javascript - 从 aws 中删除多个图像

java - JSP 上的动态图像预览

amazon-web-services - AWS Step Function ContainerOverrides 清除已定义的环境变量

amazon-web-services - 在不破坏AWS s3中的链接的情况下移动文件