标签: aws-step-functions

AWS Step Function 的操作 startExecution 不会在 mysql .query() 回调上启动

我希望能够使用 mysql 查询的结果开始执行步骤函数,但我无法让它工作。

我在运行nodejs 4.3mysql package的lambda上使用AWS-SDK

我成功地使用 AWS-SDK 轻松启动了步骤函数的执行,并将其包装在一个函数中:

function startExecution(){
    var AWS = require('aws-sdk');

    var stepfunctions = new AWS.StepFunctions();

    var params = {
      stateMachineArn: 'arn:aws:states:us-east-1:453687599700:stateMachine:Temp',
      input: '{"OrderID":266}',
      name: '00002'
    };

    stepfunctions.startExecution(params, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else     console.log(data);           // successful response
    });
}
Run Code Online (Sandbox Code Playgroud)

调用startExecution()

exports.handler = (event, context, callback) => {
Run Code Online (Sandbox Code Playgroud)

工作完美。

但是,在mysql的connection.query的回调函数中调用相同的startExecution()不起作用:

connection.query('SELECT * FROM `books` WHERE `author` = "David"', function …
Run Code Online (Sandbox Code Playgroud)

mysql node.js aws-lambda aws-sdk-nodejs aws-step-functions

5
推荐指数
1
解决办法
3397
查看次数

使用 API Gateway 处理 AWS Lambda 错误

class BadRequest(Exception): pass我的 Lambda 函数中有。

我想让raise BadRequest("Invalid request params")API 返回状态代码为 400 和正文(或等效内容)的响应{ "message": "Invalid request params" }

然而,简单地这样做会返回一个带有状态代码 200(哦不!)和正文的响应

{
    "errorMessage": "Invalid request params",
    "errorType": "BadRequest",
    "stackTrace": <my application code that the user shouldnt see>
}
Run Code Online (Sandbox Code Playgroud)

网上查了一下,好像有3个选择:

1)chalice

2) 使用集成响应和方法响应将该错误解析为更好的响应。[BadRequest].*当我抛出异常时,我会像正则表达式一样插入一个前缀(IMO 不是很优雅)。

3) 使用Step Functions创建 API 的有状态表示。这看起来有点乏味,因为我需要学习美国手语,而且我不认识聋人。-.-

-.-亚马逊国家语言


我应该进入哪个兔子洞,为什么?

python amazon-web-services aws-lambda aws-api-gateway aws-step-functions

5
推荐指数
1
解决办法
2333
查看次数

如何避免在aws步骤函数中同时执行

目前我有一个用例,云监视规则将每 5 分钟触发一个步骤函数。如果步骤函数中已经运行了一个执行,我希望有一个逻辑来跳过启动另一次执行。有办法做到吗?

amazon-web-services amazon-cloudwatch aws-lambda aws-step-functions

5
推荐指数
1
解决办法
6155
查看次数

使用 ECS Fargate 执行 Step Function "Tasks"

在 Re:Invent 2018 中,AWS 似乎推出了与 Step Functions 的新集成,其中包括 ECS Fargate 支持。

https://docs.aws.amazon.com/step-functions/latest/dg/connectors-ecs.html

我一直在对此进行深入研究,并且能够启动 ECS 任务并执行其操作,但是我无法将所需的输出发送回 step 函数。响应语法似乎也没有与特定状态的输出相对应的任何内容。

https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RunTask.html#API_RunTask_ResponseSyntax

ECS 任务是否可以将输出发送回步进函数?任何线索都会有所帮助。

PS:我知道活动,并且对活动进行 ECS 轮询,并在完成时发送任务成功。但是,如果可行的话,我希望利用 step 函数调用 ECS。

amazon-web-services amazon-ecs aws-step-functions aws-fargate

5
推荐指数
1
解决办法
4192
查看次数

Step Functions AWS SAM CLI 本地连接被拒绝错误

按照 AWS 文档中的步骤操作

https://docs.aws.amazon.com/step-functions/latest/dg/sfn-local-lambda.html

使用 aws-stepfuncitons-local docker 容器

我在最后一步收到连接被拒绝的错误

2019-05-28 12:37:05.004: arn:aws:states:us-east-1:123456789012:execution:HelloWorld:test : 
{
    "Type":"ExecutionFailed",
    "PreviousEventId":5,
    "ExecutionFailedEventDetails":
    {
        "Error":"Lambda.SdkClientException",
        "Cause":"Unable to execute HTTP request: Connect to 127.0.0.1:3001 [/127.0.0.1] failed: Connection refused (Connection refused)"
    }
}
Run Code Online (Sandbox Code Playgroud)

任何有关如何解决它的帮助将不胜感激。

amazon-web-services aws-step-functions aws-sam-cli

5
推荐指数
1
解决办法
949
查看次数

MaxConcurrency 属性如何用于 AWS Step Functions 中的 Map Task?

更新:地图状态步骤模板创建一个步骤函数并运行它也会引发错误。这是强有力的证据表明该MaxConcurrency属性与Parameters值一起不起作用。

我无法MaxConcurrency在步骤函数定义中成功使用该属性。

这可以通过使用地图任务文档中提供的示例(2019 年 9 月 18 日新增)来演示:

{
  "StartAt": "ExampleMapState",
  "States": {
    "ExampleMapState": {
      "Type": "Map",
      "MaxConcurrency": 2,
      "Parameters": {
        "ContextIndex.$": "$$.Map.Item.Index",
        "ContextValue.$": "$$.Map.Item.Value"
      },
      "Iterator": {
         "StartAt": "TestPass",
         "States": {
           "TestPass": {
             "Type": "Pass",    
             "End": true
           }
         }
      },
      "End": true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

通过使用以下输入执行 step 函数:

[
  {
    "who": "bob"
  },
  {
    "who": "meg"
  },
  {
    "who": "joe"
  }
]

Run Code Online (Sandbox Code Playgroud)

我们可以在执行事件历史记录中观察到:

  • ExecutionStarted
  • MapStateEntered
  • MapStateStarted …

amazon-web-services aws-step-functions

5
推荐指数
1
解决办法
2156
查看次数

如何将 AWS Glue 作业的输出返回到调用 Step Function 工作流?

AWS Step Functions 允许调用 AWS Glue 作业,如下所述:https : //docs.aws.amazon.com/step-functions/latest/dg/connect-glue.html

我想运行作业并(在将结果保存到 S3 之后)将作业期间产生的一些元数据(如行数或过滤行数)返回到 Step 函数流。

我们可以将参数从 Step 函数传递给 Glue 作业,如下所示:

              "RunGlueJob": {
                "Type": "Task",
                "Resource": "arn:aws:states:::glue:startJobRun.sync",
                "Parameters": {
                  "JobName": "MyJobName",
                  "Arguments": {
                    "--param1.$": "$.param1",
                    "--param2.$": "$.param2"
                  }
                },
                "Next": "NextState"
              },
Run Code Online (Sandbox Code Playgroud)

但是 Glue 作业如何将输出返回到 Step Function 工作流?我尝试从 (Scala) Glue 作业中的 main() 函数返回一个字符串,但它没有出现在返回到步骤函数流的 JSON 中:

{
      "AllocatedCapacity": 3,
      "Arguments": {
        "--param1.$": "$.param1",
        "--param2.$": "$.param2"
      },
      "Attempt": 0,
      "CompletedOn": 1570114802442,
      "ExecutionTime": 39,
      "GlueVersion": "0.9",
      "Id": "jr_some_id",
      "JobName": "MyJobName",
      "JobRunState": "SUCCEEDED",
      "LastModifiedOn": 1570114802442, …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-step-functions aws-glue

5
推荐指数
1
解决办法
3375
查看次数

如何在 Step Function 中包含 AWS Glue 爬网程序

这是我的要求:我在 AWS Glue 中有一个爬网程序和一个 pyspark 作业。我必须使用 step 函数设置工作流程。

问题:

  1. 如何将 Crawler 添加为第一个状态。我需要提供哪些参数(资源、类型等)。
  2. 如何确保下一个状态 - Pyspark 作业仅在爬虫成功运行后启动。
  3. 有什么方法可以安排 Step Function 状态机在特定时间运行?

参考:

amazon-web-services aws-step-functions aws-glue

5
推荐指数
1
解决办法
3108
查看次数

AWS Step Functions:将任务输入与 *部分* 任务输出相结合

我正在研究 AWS Step 函数。我已阅读有关InputPath、OutputPath 和 ResultPath 的文档。我的问题是我想将输入到 Lambda 任务的值与任务的部分输出相结合。

任务的输入类似于以下内容。我想继续将这些值传递给后续任务。

{
    "previous_task_result": 100,
    "next_task_input": "asdf"
}
Run Code Online (Sandbox Code Playgroud)

我想要的是让我的 Lambda 任务的输出看起来像这样:

{
    "previous_task_result": 100,
    "next_task_input": "asdf",
    "current_task_result": {
        "val1": "ghjk",
        "val2": [0,2,13,100]
    }
}
Run Code Online (Sandbox Code Playgroud)

具体问题是 Lambda 任务的原始输出看起来像这样。我只关心Payload节点。其余的输出是样板文件,我宁愿不通过 Step Function。

{
  "resourceType": "lambda",
  "resource": "invoke",
  "output": {
    "ExecutedVersion": "$LATEST",
    "Payload": {
        "val1": "ghjk",
        "val2": [0,2,13,100]
    },
    "SdkHttpMetadata": {
      "HttpHeaders": {
        "Connection": "keep-alive",
        "Content-Length": "42",
        "Content-Type": "application/json",
        "Date": "Tue, 25 Feb 2020 14:36:29 GMT",
        "X-Amz-Executed-Version": "$LATEST", …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-step-functions

5
推荐指数
1
解决办法
2786
查看次数

如何在 AWS Lambda 函数中获取任务令牌

我有一个 AWS Step Function 和用 Java 实现的处理程序。

我的步骤函数定义:

definition:
  Comment: Steps for issuing a card
  StartAt: RecipientFraudChecks
  States:
    RecipientFraudChecks:
      Type: Task
      Next: SaveTaskToken
      Resource: arn:aws:lambda:eu-west-1:099720403855:RecipientFraudChecks
    SaveTaskToken:
      Type: Task
      Resource: arn:aws:lambda:eu-west-1:12345678:function:SaveTaskToken
      End: true
Run Code Online (Sandbox Code Playgroud)

我有一个 Java 项目,所有的 Lambda 函数处理程序都在那里定义:

public class SaveTaskToken implements RequestHandler<Map<String,String>, String> {

   ....

   @Override
   public String handleRequest(Map<String, String> input, final Context context) {

      // do the fraud checks
      System.out.println("the context is: " + gson.toJson(context));
      System.out.println("input: " + gson.toJson(input));

}
Run Code Online (Sandbox Code Playgroud)

我正在使用 AWS SAM 在本地运行 step 函数,并根据此触发:https : //docs.aws.amazon.com/step-functions/latest/dg/sfn-local-lambda.html#install-sam …

java amazon-web-services aws-lambda aws-step-functions

5
推荐指数
1
解决办法
804
查看次数