如何调用AWS Cloudfront Update-CFDistribution Powershell Cmdlet

问题描述

我已经编写了脚本来更改CloudFront中特定发行版上特定原始的原始路径。更改路径后,尝试使用更改来更新发行版时出现错误。我不想更改任何内容除了“原始路径”之外,还有其他分布,因此,我如何调用Update-CFdistribution理想地进行这些更改而不必设置每个参数(API的未来更新可能会导致此脚本失败,甚至最糟糕的是使脚本不完整修改

$distributions = Get-CFdistributionList 

foreach($distribution in $distributions) {
    if($distribution.Id -eq "$CloudfrontdistributionId") {
        foreach ($origin in $distribution.Origins) {
            foreach($item in $origin.Items) {
                if($item.Id -eq "OriginName") {
                    $item.OriginPath = "/$($S3BucketPrefix)"
                    Update-CFdistribution -Id $CloudfrontdistributionId -Origins_Item @($item)
                }
            }
        }
    }
}

错误

InvalidOperation:检测到5个验证错误:值为null 'distributionConfig.defaultCacheBehavior'无法满足 约束:成员不能为空;值为null 'distributionConfig.enabled'无法满足约束条件:成员必须 不为空; “ distributionConfig.callerReference”处的值为null失败 满足约束条件:Member不能为null;值为null 'distributionConfig.origins.quantity'无法满足约束: 成员不能为空; “ distributionConfig.comment”处的值失败 满足约束条件:成员不能为空

解决方法

我没有声誉,只能添加评论,因此我不得不将其作为答案,但更适合作为评论。

根据文档,即使您只是尝试更新一件东西,发布更新时也会有许多必填字段:

https://docs.aws.amazon.com/powershell/latest/reference/items/Update-CFDistribution.html

更新发行版时,必填字段比 创建发行版时。当您通过以下方式更新您的分配时 使用此API操作,请按照此处的步骤获取最新的 配置,然后进行更新,以确保您 包括所有必填字段。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...