!加入无服务器框架已损坏

!Join in Serverless Framework is broken

  RetrieveAllSubscribersLambdaPermissionApiGateway:
    Type: 'AWS::Lambda::Permission'
    Properties:
      FunctionName: { "Fn::GetAtt": [ RetrieveAllSubscribersLambdaFunction, Arn ] }
      Action: lambda:InvokeFunction
      Principal: apigateway.amazonaws.com
      SourceArn: 
        !Join
          - "/"
          - - 'arn:aws:execute-api:us-west-2:12345'
          - - 'other stuff'

我有这个代码块,我在其中尝试为这个块获取 sourceArn。我意识到 sourceArn 在此示例中无效,但 Serverless 的查看输出也是如此。

An error occurred: RetrieveAllSubscribersLambdaPermissionApiGateway - 1 validation error detected: Value 'arn:aws:execute-api:us-west-2:12345/aws/:execute-api:/us-west-2/:/12345/:/a5dghhjk9//*/*' at 'sourceArn' failed to satisfy constraint: Member must satisfy regular expression pattern: arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\-])+:([a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\d{1})?:(\d{12})?:(.*) (Service: AWSLambda; Status Code: 400; Error Code: ValidationException; Request ID: a8db5326-dcdd-4abc-b4ae-e4fa5c03c6bd; Proxy: null).

-- 更新 2022/01/16 12:49 上午 问题确实出在标签上。一切都可以在问题上看到。 TLDR;使用完整的函数名称(例如 'Fn::Join')。

不过,我几乎可以肯定 shorthand 可以工作,只是需要先满足一些条件。我不会调查,因为原始问题的有效解决方案已经实现,其他任何问题都超出了范围。

-- 原创 在 Ryan 和我自己来回交流之后。 Ryan 使用了涉及 !Subserverless-cloudformation-sub-variables 插件的替代解决方案,可以查看 here.

简而言之,问题可能在于涉及标签的依赖项未正确解析(很可能是由于配置错误。仍在调查中,如果原始解决方案可以通过其他插件解决,将会更新)。

以下插件抽象了 !Sub 的使用,从而解决了问题, serverless-cloudformation-sub-variables