首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无服务器框架-无法为任务状态生成IAM策略语句

无服务器框架-无法为任务状态生成IAM策略语句
EN

Stack Overflow用户
提问于 2022-02-08 14:12:36
回答 2查看 309关注 0票数 1

我正在尝试使用无服务器框架来部署一个调用两个lambdas的step函数。这是我的serverless.yml:

代码语言:javascript
复制
    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 )

关于如何解决问题有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-08 16:29:41

这是YAML语法问题。Fn::GetAtt:[pullSqlSvr, Arn]被解析为字符串,而不是键值对.在最后一个冒号之后添加一个空格,或者使用!GetAtt快捷方式。

代码语言:javascript
复制
Resource:
  Fn::GetAtt:[pullSqlSvr, Arn] # string :(
  Fn::GetAtt: [pullSqlSvr, Arn] # key-value :)
  !GetAtt pullSqlSvr.Arn # alternative shorthand intrinsic function :)
票数 1
EN

Stack Overflow用户

发布于 2022-02-08 14:41:15

根据我的经验,如果serverless-step-functions块中的任何键以小写字母开头,则Steps无法正确部署。将其更改为似乎区分大小写的等价物,如以下所示,并进行重新部署可能会有效果:

代码语言:javascript
复制
States:
  PullSqlSvr:
    Type: Task
    Resource:
      Fn::GetAtt:[pullSqlSvr, Arn]
    Next: sendToDataLake
  SendToDataLake:
    Type: Task
    Resource:
      Fn::GetAtt:[sendToDataLake, Arn]
    End: true

(我刚刚将pullSqlSvrsendToDataLake转换为它们的PascalCase等价物PullSqlSvrSendToDataLake。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71035349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档