我正在尝试使用无服务器框架来部署一个调用两个lambdas的step函数。这是我的serverless.yml:
org: bizrob
app: flexipod-2-queue
service: flexipod-2-queue
frameworkVersion: "2 || 3"
custom:
region: eu-west-1
provider:
name: aws
runtime: nodejs14.x
plugins:
- serverless-step-functions
functions:
pullSqlSvr:
handler: flexipod-2-queue/pullSqlSvrData.pullSqlSvr
environment:
REGION: ${self:custom.region}
API_VERSION_S3: "2006-03-01"
API_VERSION_SQS: "2012-11-05"
SQS_QUEUE_URL: !Ref "MyQueue"
sendToDataLake:
handler: queue-2-datalake/sendToDataLake.sendBatchToQueue
environment:
REGION: ${self:custom.region}
API_VERSION_S3: "2006-03-01"
API_VERSION_SQS: "2012-11-05"
stepFunctions:
stateMachines:
flexipodFlow:
name: flexipodFlow
definition:
StartAt: pullSqlSvr
States:
pullSqlSvr:
Type: Task
Resource:
Fn::GetAtt:[pullSqlSvr, Arn]
Next: sendToDataLake
sendToDataLake:
Type: Task
Resource:
Fn::GetAtt:[sendToDataLake, Arn]
End: true
resources:
Resources:
MyQueue:
Type: "AWS::SQS::Queue"
Properties:
QueueName: "flexipod"当我运行无服务器部署时,我会看到以下错误:
部署到statement (us 1,“serverless 2”提供程序)的
无法为任务状态生成IAM策略语句{ Type:'Task',Resource:'Fn::GetAtt:pullSqlSvr,Arn',Next:'sendToDataLake‘}不能为任务状态生成IAM策略语句{ Type:’任务‘,资源:'Fn::GetAtt:sendToDataLake,Arn',End: true }
未能部署(72 S)环境: win32,节点16.1.0,框架3.0.0,插件6.0.0,SDK 4.3.0凭据: Serverless仪表板,“无服务器管理-2”提供程序(https://app.serverless.com/bizrob/apps/flexipod-2-queue/flexipod-2-queue/dev/us-east-1/providers)文档: docs.serverless.com支持: forum.serverless.com Bugs: github.com/serverub.com/serverless/forum.serverless.com问题
错误: CREATE_FAILED: FlexipodFlow (AWS::StepFunctions::StateMachine)资源处理程序返回消息:“无效状态机定义:'SCHEMA_VALIDATION_FAILED: Value不是有效资源ARN at / State /pullSqlSvr/ resource,SCHEMA_VALIDATION_FAILED: Value不是有效资源ARN at /State/sendToDataLake/ Resource‘(服务: AWSStepFunctions;状态代码: 400;错误代码: InvalidDefinition )
关于如何解决问题有什么建议吗?
发布于 2022-02-08 16:29:41
这是YAML语法问题。Fn::GetAtt:[pullSqlSvr, Arn]被解析为字符串,而不是键值对.在最后一个冒号之后添加一个空格,或者使用!GetAtt快捷方式。
Resource:
Fn::GetAtt:[pullSqlSvr, Arn] # string :(
Fn::GetAtt: [pullSqlSvr, Arn] # key-value :)
!GetAtt pullSqlSvr.Arn # alternative shorthand intrinsic function :)发布于 2022-02-08 14:41:15
根据我的经验,如果serverless-step-functions块中的任何键以小写字母开头,则Steps无法正确部署。将其更改为似乎区分大小写的等价物,如以下所示,并进行重新部署可能会有效果:
States:
PullSqlSvr:
Type: Task
Resource:
Fn::GetAtt:[pullSqlSvr, Arn]
Next: sendToDataLake
SendToDataLake:
Type: Task
Resource:
Fn::GetAtt:[sendToDataLake, Arn]
End: true(我刚刚将pullSqlSvr和sendToDataLake转换为它们的PascalCase等价物PullSqlSvr和SendToDataLake。)
https://stackoverflow.com/questions/71035349
复制相似问题