阻止CloudFormation从CloudFront中删除Lambda Edge关联

时间:2018-02-19 14:50:17

标签: amazon-web-services aws-lambda amazon-cloudfront amazon-cloudformation aws-lambda-edge

我使用 CloudFormation 来管理 CloudFront分配

在此 CloudFront分配上,我已关联 Lambda Edge功能(不使用CloudFormation)。

问题是稍后,当我使用相同的CloudFormation堆栈更新CloudFront分配时,会删除所有Lambda Edge关联

如何预防?

真的很不幸......

PS:有时CloudFormation会删除Lambda关联(例如更新证书ARN时),有时则不会。

编辑:我可以尝试使用https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html,但是有一种不太常见的方式吗? Nope ..

编辑:AWS论坛https://forums.aws.amazon.com/thread.jspa?threadID=274111上的相同问题(需要登录)

1 个答案:

答案 0 :(得分:0)

可以"部署"新的Lambda @ Edge适用于CloudFront和CloudFormation。

CloudFront和Lambda @ Edge需要版本化的Lambda函数。因此,您需要确保您的CloudFront模板发布Lambda代码更改的新版本,并且您的Distribution使用版本别名。

请参阅我的CloudFormation template应用中的boilerplate Go/Lambda了解工作示例:

  WebAuthFunction:
    Properties:
      AutoPublishAlias: Live
      CodeUri: ./web/handlers/auth/index.zip
      Environment: !Ref AWS::NoValue
      FunctionName: !Sub ${AWS::StackName}-WebAuthFunction
      Handler: index.handler
      Role: !GetAtt WebAuthFunctionRole.Arn
      Runtime: nodejs6.10
    Type: AWS::Serverless::Function

  WebDistribution:
    Condition: WebDomainNameSpecified
    Properties:
      DistributionConfig:
        Aliases:
          - !Ref WebDomainName
        Comment: !Sub Distribution for ${WebBucket}
        DefaultCacheBehavior:
          AllowedMethods:
            - GET
            - HEAD
          Compress: true
          ForwardedValues:
            Cookies:
              Forward: none
            QueryString: true
          LambdaFunctionAssociations:
            - !If
              - OAuthClientIdSpecified
              - EventType: viewer-request
                LambdaFunctionARN: !Ref WebAuthFunction.Version
              - !Ref AWS::NoValue
          TargetOriginId: !Ref WebBucket
          ViewerProtocolPolicy: redirect-to-https
        DefaultRootObject: index.html
        Enabled: true
        HttpVersion: http2
        Origins:
          - DomainName: !Sub ${WebBucket}.s3.amazonaws.com
            Id: !Ref WebBucket
            S3OriginConfig:
              OriginAccessIdentity: !Sub origin-access-identity/cloudfront/${WebOriginAccessIdentity}
        PriceClass: PriceClass_All
        ViewerCertificate:
          AcmCertificateArn: !Ref WebCertificate
          SslSupportMethod: sni-only
    Type: AWS::CloudFront::Distribution