【问题标题】:AWS SAM - Circular dependency between resources errorAWS SAM - 资源错误之间的循环依赖
【发布时间】:2017-12-12 07:01:11
【问题描述】:

我按照tutorial 设置了一个 AWS Lambda 函数,该函数在上传到 S3 时调用并填充 DynamoDB。

我正在尝试使用AWS SAM 来实现相同的效果,我需要为此定义一个带有配置信息的template.yaml 文件。使用 Cloudformation 进行部署时,我不断收到此错误 -

Failed to create the changeset: Waiter ChangeSetCreateComplete failed: Waiter encountered a terminal failure state Status: FAILED. Reason: Circular dependency between resources: [LambdaPerm]

我找不到很多这方面的信息,所以我正在努力调试。是什么导致了这个错误,我该如何解决这个问题?这是我的模板配置 -

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  Gradebook:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: LambdaGradebookServerless
      Handler: serverless.LambdaGradebook
      Runtime: java8
      CodeUri: ./target/serverless-0.0.1-SNAPSHOT.jar
      Role: arn:aws:iam::xxxxxxxxxxxx:role/lambda-s3-execution-role
  LambdaPerm:
    Type: AWS::Lambda::Permission
    Properties:
      Action: lambda:InvokeFunction
      FunctionName:
        Ref: Gradebook
      Principal: s3.amazonaws.com
      SourceAccount:
        Ref: AWS::xxxxxxxxxxxx
      SourceArn:
        Fn::Join:
        - ':'
        - - arn
          - aws
          - s3
          - ''
          - ''
          - Ref: gradebookBucket
  gradebookBucket:
    Type: AWS::S3::Bucket
    Properties:
      Bucket: gradebook-lambda
      NotificationConfiguration:
        LambdaConfigurations:
        - Event: s3:ObjectCreated:*
          Function:
            Ref: Gradebook

【问题讨论】:

  • 顺便说一句:您可以使用 !Ref "AWS::AccountId" 而不是硬编码您的帐户 ID。不过,这不是您循环依赖的原因。

标签: amazon-web-services amazon-s3 lambda amazon-cloudformation amazon-iam


【解决方案1】:

为避免这种循环依赖,请分别创建 S3 存储桶和 Lambda 函数,然后使用 S3 notification configuration 更新堆栈。

【讨论】:

    【解决方案2】:

    如果有人来搜索这个,我写了一篇博客来解决这个问题。 https://aws.amazon.com/blogs/mt/resolving-circular-dependency-in-provisioning-of-amazon-s3-buckets-with-aws-lambda-event-notifications/

    实现方法类似于 jarmod 在接受的答案中描述的方法。稍后使用 CloudFormation 自定义资源设置事件通知。

    【讨论】:

      【解决方案3】:

      我收到循环依赖错误,结果发现这是我从 CloudFormation 模板上的资源中引用的缺失参数!。

      【讨论】:

        猜你喜欢
        • 2021-04-16
        • 2021-09-27
        • 2019-12-04
        • 2020-11-08
        • 2018-08-19
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 2018-12-01
        相关资源
        最近更新 更多