我想使用CloudFormation在计划(30分钟)内使用Step Functions将一堆预先存在的Lambda函数创建到状态机中。我已经为其他方法成功创建了堆栈。
本质上,我需要有关如何在CloudFormation中为Step Functions创建计划事件的帮助或指导。这是我一直在尝试的方法:
"NOTDScheduler": {
"Type": "AWS::Events::Rule",
"Properties": {
"Description": "Schedules a NOTD every 30 minutes",
"ScheduleExpression": "rate(30 minutes)",
"State": "ENABLED",
"Targets": [
{
"Arn": "${statemachineARN}",
"statemachineARN": {
"Fn::GetAtt": [
"NOTDStateMachine",
"Arn"
]
},
"Id": "NOTDScheduleTarget"
}
]
},
Run Code Online (Sandbox Code Playgroud)
但我不断收到诸如
[错误] / Resources / NOTDScheduler / Properties / Targets / 0 / statemachineARN / Fn :: GetAtt:资源类型AWS :: StepFunctions :: StateMachine不支持属性{Arn}。
而且不知道Arn如何不支持的属性。有解决方法吗?
amazon-web-services aws-cloudformation amazon-cloudwatch aws-step-functions
我正在执行步进功能。但是,我在执行一种状态时出错。
它给出错误:Lambda.Unknown 原因:无法确定原因,因为 Lambda 没有返回错误类型。
我的 lambda 函数调用外部网络服务。我不想等到收到网络服务响应。
我们可以在不等待 web 服务响应的情况下从函数返回数据吗??
我的 Lambda 函数
var http = require('http');
exports.handler = (event, context, callback) => {
var inputJson= {};
inputJson.firstname= event.firstname;
inputJson.lastname= event.lastname;
inputJson.workspacename= event.workspacename;
inputJson.customermailid= event.customermailid;
inputJson.mobilenumber= event.mobilenumber;
inputJson.orgname= event.orgname;
inputJson.sessionid= event.sessionid;
var post_data = JSON.stringify({
"domainname" : inputJson.domainname,
"orgname" : inputJson.orgname,
"customermailid" : inputJson.customermailid,
"adminmailid":"postmaster@test.int",
"product":3
});
// An object of options to indicate where to post to
var post_options = {
host: 'host_ip',
path: 'path',
method: 'POST', …Run Code Online (Sandbox Code Playgroud) 假设我想保留一个StateMachine,但有旧Executions的已经完成,我不想再保留了,有什么方法可以删除它们或者它们有 TTL 吗?StepFunctions我们计划每天跑很多次,我希望有一个 TTL,说明Executions它们完成后的寿命。
我目前正在使用 boto3(适用于 Python 的 Amazon Web Services (AWS) SDK)来创建状态机、开始执行,并在我的工作线程中检索任务并报告其状态(成功完成或失败)。
我有另一项服务需要了解任务的状态,我想通过从 AWS 检索它来实现这一点。我搜索了可用的方法,只能获取整个状态机/执行的状态(RUNNING|SUCCEEDED|FAILED|TIMED_OUT|ABORTED)。
还有 get_execution_history 方法,但每个步骤都由按顺序编号的 id 标识,并且没有有关任务本身的信息(仅在“stateEnteredEventDetails”事件中,其中存在任务的名称,但后续事件可能不存在)与之相关,因此无法知道任务是否成功)。
是否真的无法检索特定任务的状态,或者我错过了什么?
谢谢你!
有谁知道为什么 ECS Fargate 任务会失败并出现此错误?
Timeout waiting for network interface provisioning to complete。我正在使用步骤函数运行 ECS Fargate 任务。步骤函数的 IAM 角色可以访问任务定义。状态机代码看起来也不错。相同的步骤函数之前工作得很好,但我刚才遇到了这个错误。想知道为什么会发生这种情况吗?是偶尔的吗?
我有一个选择状态如下:
"ChoiceStateX": {
"Type": "Choice",
"Choices": [
{
"Not": {
"Variable": "$.type",
"StringEquals": "Private"
},
"Next": "Public"
},
{
"Variable": "$.value",
"NumericEquals": 0,
"Next": "MyEndState" // can I do something like this?
},
}
Run Code Online (Sandbox Code Playgroud)
对于 $.value == 0 的状态,我需要结束步骤函数,因为Choices不支持End: true,我需要明确地拥有类似 的东西MyEndState。
MyEndState那么我应该如何在step函数中定义呢?有这样的办法吗?
假设我有一个 AWS 步骤函数,它只是将第一步的输出传递到第二步。但现在假设我需要为第二步添加额外的输入值。
如何设置第二步的参数以保留所有输入字段(无需单独指定它们)并添加新的输入值?
我能得到的最接近的参数是这样设置的:
"Second Step": {
"Type": "Task",
"Resource": "arn:aws:lambda:blahblahblah",
"InputPath": "$",
"Parameters": {
"Input.$":"$",
"additionalValue": "ABC"
}
}
Run Code Online (Sandbox Code Playgroud)
但这会导致将所有输入值推送到新的“Input”键下,我实际上只想将它们放在字典的根目录中。我可以发誓,我曾经看到过一些神奇的表情,使这个作品按照我想要的方式工作,但现在我找不到它了。
AWS 现在有一个模拟器,您可以在. 将 InputPath 设置为$并将参数设置为{"Input.$":"$","additionalValue":"ABC"}以查看这种情况的示例。
我有一个在步骤函数中运行的 Lambda 函数。
Lambda 函数返回 JSON 字符串作为输出。
当我在本地调试函数时,我看到 JSON 是有效的,但是当我运行步骤函数并进入函数后的下一步时,我可以看到我的所有内容"都已转向,并且在开头和结尾\"有一个"我的 JSON.
因此,当我调试函数时,JSON 对象如下所示:
{"test":60,"test2":"30000","test3":"result1"}
Run Code Online (Sandbox Code Playgroud)
作为 lambda 之后步骤的输入,最终看起来如下所示:
"{\"test\":60,\"test2\":\"30000\",\"test3\":\"result1\"}"
Run Code Online (Sandbox Code Playgroud)
为什么我的有效 JSON 对象最终被转义?
我怎样才能防止这种情况发生?
我是AWS的初学者,我已经创建了我的第一个AWS步骤函数,现在下一步是单元测试这个步骤函数.我独立单元测试了我的lambda函数,现在我卡住了,不知道,我怎样才能进行步进功能的单元测试.
我在脑海里也有一个问题是值得对步进功能进行单元测试,有时候感觉可以做到或不做,因为它只是一个json.
我试图搜索,但我没有任何关于互联网或AWS文档的任何线索任何帮助将不胜感激任何关于此或任何样本用例的博客谢谢
{
"Comment": "An example of the Amazon States Language using a choice state.",
"StartAt": "LoginState",
States": {
"LoginState": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:170344690019:function:myfirstLogin",
"Next": "ChoiceState"
},
"ChoiceState": {
"Type" : "Choice",
"Choices": [
{
"Variable": "$.success",
"BooleanEquals": true,
"Next": "logoutState"
},
{
"Variable": "$.success",
"BooleanEquals": false,
"Next": "DefaultState"
}
],
"Default": "DefaultState"
},
"logoutState": {
"Type" : "Task",
"Resource": "arn:aws:lambda:us-east-1:170344690019:function:myFirstLogout",
"End": true
},
"DefaultState": {
"Type": "Fail",
"Error": "DefaultStateError",
"Cause": "No Matches!"
}
}
}
Run Code Online (Sandbox Code Playgroud) 只是想知道是否有人遇到过以下用例:
我知道如果我们将 Lambda 与 step 函数一起使用,它允许基于资源的策略,我们可以允许 Lambda 中的“主体”作为来自另一个帐户的状态机,并从帐户 A 中的状态机执行帐户 B 中的 lambda 函数。
但是 DynamoDB 不支持基于资源的策略,有没有办法部署 CloudFormation 模板,在其中我们创建一个 DynamoDB 表,该表具有允许来自另一个 Account PutItem 的状态机的策略/权限?