Cloudformation循环依赖混乱

时间:2018-07-08 18:50:31

标签: amazon-web-services amazon-cloudformation

我对Cloudformation的这种循环依赖问题完全迷失了。我写了这个模板,它可以很好地从CLI运行,但是当我尝试从浏览器作为Stack启动它时,出现了循环依赖问题。

有人可以告诉我依赖来自哪里吗?

这是我得到的错误

Circular dependency between resources: [VehiclesLambda, HelloAPI, AuthorizerFuncPerm]

这是我的模板

AWSTemplateFormatVersion: '2010-09-09'
Description: Yes you can use SAM to create an Authorizer
Parameters:
  Environment:
    Type: String
    Default: dev
Outputs:
  ExampleAPIUrl:
    Value: !Sub "https://${HelloAPI}.execute-api.${AWS::Region}.amazonaws.com/${Environment}/"
Resources:
  HelloAPI:
    Type: AWS::Serverless::Api
    Properties:
      StageName: !Sub ${Environment}
      DefinitionBody:
        swagger: 2.0
        info:
          title:
            Ref: AWS::StackName
        securityDefinitions:
          test-authorizer:
            type: apiKey
            name: Authorization
            in: header
            x-amazon-apigateway-authtype: custom
            x-amazon-apigateway-authorizer:
              type: token
              authorizerUri:
                Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${AuthorizerFunc.Arn}/invocations
              authorizerResultTtlInSeconds: 5
        paths:
          /vehicles:
            get:
              x-amazon-apigateway-integration:
                httpMethod: POST
                type: aws_proxy
                uri:
                  !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${VehiclesLambda.Arn}/invocations
              responses: {}
              security:
                - test-authorizer: []
  VehiclesLambda:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs4.3 
      CodeUri: 's3://companyrentalaws/vehicles.zip'
      MemorySize: 128 
      Timeout: 30
      Policies:
        - AWSLambdaBasicExecutionRole
      Events:
        MyEndpoint:
          Type: Api 
          Properties:
            Path: /vehicles
            Method: GET
            RestApiId:
              Ref: HelloAPI
  AuthorizerFunc:
      Type: AWS::Serverless::Function
      Properties:
        Handler: authorizer.authorizer
        Runtime: nodejs4.3
        CodeUri: 's3://companyrentalaws/authorizer.zip'
  AuthorizerFuncPerm:
      Type: AWS::Lambda::Permission
      DependsOn:
        - HelloAPI
        - AuthorizerFunc
      Properties:
        Action: lambda:InvokeFunction
        FunctionName:
          Ref: AuthorizerFunc
        Principal: apigateway.amazonaws.com

很抱歉发布了这么多代码,但不想遗漏任何东西。

1 个答案:

答案 0 :(得分:1)

VehiclesLambda具有一个引用HelloAPI的属性RestApiId。

            RestApiId:
              Ref: HelloAPI

HelloAPI Fn:GetAttr的车辆Lambda的Arn

!Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${VehiclesLambda.Arn}/invocations

存在循环依赖。