我使用 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上的相同问题(需要登录)
答案 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