aws lambda 函数禁用和删除 python boto3 中的 CloudFront 分配

aws lambda function to disable and delete CloudFront distribution in python boto3

我正在研究用 python 编写的 Lambda 函数,并使用 boto3 调用 AWS APIs。
lambda函数的工作如下-

  1. 获取 CloudFront 分发列表。
  2. 获取 CloudFront 分配 ID。
  3. 获取超过 60 分钟的那些分配的 CloudFront 分配配置。
  4. 创建 CloudFront 分发配置的 JSON 文件。
  5. 读取JSON文件并制作字典数组传入CF更新API.
  6. 调用更新分发 API 并传递所需的参数。

参考文档是 - AWS Boto3

现在的问题是,只要请求的数据是正确的,更新 API 就会给我一个错误。

请找到我的 python lambda 函数代码 link - Lambda function to disable and delete CloudFront destribution

这是我在通过更新 API-

更新(禁用)CloudFront 分发时遇到的错误
Parameter validation failed:
Missing required parameter in DistributionConfig: "CallerReference"
Missing required parameter in DistributionConfig: "Origins"
Missing required parameter in DistributionConfig: "DefaultCacheBehavior"
Missing required parameter in DistributionConfig: "Comment"
Missing required parameter in DistributionConfig: "Enabled"
Unknown parameter in DistributionConfig: "ETag", must be one of: CallerReference, Aliases, DefaultRootObject, Origins, OriginGroups, DefaultCacheBehavior, CacheBehaviors, CustomErrorResponses, Comment, Logging, PriceClass, Enabled, ViewerCertificate, Restrictions, WebACLId, HttpVersion, IsIPV6Enabled
Unknown parameter in DistributionConfig: "DistributionConfig", must be one of: CallerReference, Aliases, DefaultRootObject, Origins, OriginGroups, DefaultCacheBehavior, CacheBehaviors, CustomErrorResponses, Comment, Logging, PriceClass, Enabled, ViewerCertificate, Restrictions, WebACLId, HttpVersion, IsIPV6Enabled
Unknown parameter in DistributionConfig: "ResponseMetadata", must be one of: CallerReference, Aliases, DefaultRootObject, Origins, OriginGroups, DefaultCacheBehavior, CacheBehaviors, CustomErrorResponses, Comment, Logging, PriceClass, Enabled, ViewerCertificate, Restrictions, WebACLId, HttpVersion, IsIPV6Enabled

上面的错误信息显示缺少参数,但我已经检查了请求是否包含所有必需的参数,我不明白为什么会报错。

如果有人对此有任何解决方案,请分享或从 AWS Lambda 中禁用和删除 CloudFront 分发的任何其他想法。

问题是您的 dist_list 变量是调用 cloudfrontclient.get_distribution_config(...) 的返回值。这实际上不是分发配置。这是一个包含分发配置的字典。

按如下方式更改您的更新调用:

dc = dist_list['DistributionConfig']
dist_update = cloudfrontclient.update_distribution(DistributionConfig=dc, ...)