AWS PowerShell 更新 CloudFront 分布
AWS PowerShell update CloudFront distribution
我正在尝试使用适用于 PowerShell 的 AWSPowerShell 模块更新我的 CloudFront 分配。当我使用模块中的更新 cmdlet 时,我总是收到关于未提供 "IfMatch" 参数的错误。
$cfd = Update-CFDistribution @parameters -Id "E2POBWR9AXFROP"
Error: The If-Match version is missing or not valid for the resource.
Update-CFDistribution : The If-Match version is missing or not valid for the resource.
我去 AWS 文档了解这个参数,它说:
-IfMatch: The value of the ETag header that you received when retrieving the distribution's configuration. For example:
E2QWRUHAPOMQZL.
我想知道是否有办法使用 AWSPowerShell 模块 cmdlet 获取 ETag header 的内容。我不想直接调用 AWS API 在我的 PowerShell 脚本中执行 Http 请求只是为了获取 header 的内容...但也许这是唯一的方法。
我尝试使用 Get-CFDistributionConfig cmdlet,但 return 没有此信息。
$cfd = Get-CFDistributionConfig @parameters -Id "E2POBWR9AXFROP"
这是我使用的 PowerShell 版本:
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 15063 608
这是我使用的 AWSPowerShell 模块的版本:
PS C:\> Get-Module "AWSPowerShell" -ListAvailable
ModuleType Version Name
---------- ------- ----
Binary 3.3.169.0 AWSPowerShell
我发现目前可以使用的解决方法是直接调用 API 并读取 header。我必须实施签名版本 4 才能获得安全性 Authorization
header.
$headers = Get-AWSSecurityHeaders -service "cloudfront" -httpVerb "GET" -uri "/2017-03-25/distribution/$distributionId/config"
$response = Invoke-WebRequest -Uri "https://cloudfront.amazonaws.com/2017-03-25/distribution/$distributionId/config" -Headers $headers
$etag = $response.Headers.ETag
然后我能够向 Update-CFDistribution
cmdlet 提供 ETag
并使其工作。
$distribution = Update-CFDistribution @parameters -Id $distributionId -IfMatch $etag -Verbose
希望 ETag
将在下一个版本中由 AWSPowerShell 模块返回,以避免必须执行所有这些操作。
调用 Get-CFDistributionConfig 后,可以在 $AWSHistory.LastServiceResponse.ETag
找到 ETag 值
我正在尝试使用适用于 PowerShell 的 AWSPowerShell 模块更新我的 CloudFront 分配。当我使用模块中的更新 cmdlet 时,我总是收到关于未提供 "IfMatch" 参数的错误。
$cfd = Update-CFDistribution @parameters -Id "E2POBWR9AXFROP"
Error: The If-Match version is missing or not valid for the resource.
Update-CFDistribution : The If-Match version is missing or not valid for the resource.
我去 AWS 文档了解这个参数,它说:
-IfMatch: The value of the ETag header that you received when retrieving the distribution's configuration. For example: E2QWRUHAPOMQZL.
我想知道是否有办法使用 AWSPowerShell 模块 cmdlet 获取 ETag header 的内容。我不想直接调用 AWS API 在我的 PowerShell 脚本中执行 Http 请求只是为了获取 header 的内容...但也许这是唯一的方法。
我尝试使用 Get-CFDistributionConfig cmdlet,但 return 没有此信息。
$cfd = Get-CFDistributionConfig @parameters -Id "E2POBWR9AXFROP"
这是我使用的 PowerShell 版本:
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 15063 608
这是我使用的 AWSPowerShell 模块的版本:
PS C:\> Get-Module "AWSPowerShell" -ListAvailable
ModuleType Version Name
---------- ------- ----
Binary 3.3.169.0 AWSPowerShell
我发现目前可以使用的解决方法是直接调用 API 并读取 header。我必须实施签名版本 4 才能获得安全性 Authorization
header.
$headers = Get-AWSSecurityHeaders -service "cloudfront" -httpVerb "GET" -uri "/2017-03-25/distribution/$distributionId/config"
$response = Invoke-WebRequest -Uri "https://cloudfront.amazonaws.com/2017-03-25/distribution/$distributionId/config" -Headers $headers
$etag = $response.Headers.ETag
然后我能够向 Update-CFDistribution
cmdlet 提供 ETag
并使其工作。
$distribution = Update-CFDistribution @parameters -Id $distributionId -IfMatch $etag -Verbose
希望 ETag
将在下一个版本中由 AWSPowerShell 模块返回,以避免必须执行所有这些操作。
调用 Get-CFDistributionConfig 后,可以在 $AWSHistory.LastServiceResponse.ETag
找到 ETag 值