我希望能够使用 mysql 查询的结果开始执行步骤函数,但我无法让它工作。
我在运行nodejs 4.3和mysql 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) 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 分钟触发一个步骤函数。如果步骤函数中已经运行了一个执行,我希望有一个逻辑来跳过启动另一次执行。有办法做到吗?
amazon-web-services amazon-cloudwatch aws-lambda aws-step-functions
在 Re:Invent 2018 中,AWS 似乎推出了与 Step Functions 的新集成,其中包括 ECS Fargate 支持。
https://docs.aws.amazon.com/step-functions/latest/dg/connectors-ecs.html
我一直在对此进行深入研究,并且能够启动 ECS 任务并执行其操作,但是我无法将所需的输出发送回 step 函数。响应语法似乎也没有与特定状态的输出相对应的任何内容。
ECS 任务是否可以将输出发送回步进函数?任何线索都会有所帮助。
PS:我知道活动,并且对活动进行 ECS 轮询,并在完成时发送任务成功。但是,如果可行的话,我希望利用 step 函数调用 ECS。
amazon-web-services amazon-ecs aws-step-functions aws-fargate
按照 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)
任何有关如何解决它的帮助将不胜感激。
更新:从地图状态步骤模板创建一个步骤函数并运行它也会引发错误。这是强有力的证据表明该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)
我们可以在执行事件历史记录中观察到:
ExecutionStartedMapStateEnteredMapStateStarted …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) 这是我的要求:我在 AWS Glue 中有一个爬网程序和一个 pyspark 作业。我必须使用 step 函数设置工作流程。
问题:
参考:
我正在研究 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) 我有一个 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 …
aws-lambda ×5
aws-glue ×2
amazon-ecs ×1
aws-fargate ×1
aws-sam-cli ×1
java ×1
mysql ×1
node.js ×1
python ×1