6

我正在使用CloudFormation来管理CloudFront 分配

在这个CloudFront 分配上,我关联了一个Lambda Edge 函数(不使用 CloudFormation)。

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

如何预防?

真是可惜了。。

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

编辑:我可以尝试使用https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html,但有没有更简单的方法?没有..

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

4

1 回答 1

0

可以使用 CloudFormation 为 CloudFront“部署”新的 Lambda@Edge 函数。

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

有关工作示例,请参阅我的样板 Go/Lambda应用程序中的CloudFormation 模板

  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
于 2018-03-30T15:59:04.963 回答