Обновление AWS PowerShell Распространение CloudFront

Я пытаюсь обновить свой дистрибутив CloudFront с помощью модуля AWSPowerShell для PowerShell. Когда я использую командлет обновления из модуля, я всегда получаю сообщение об ошибке, что не указан параметр «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: значение заголовка ETag, которое вы получили при получении конфигурации дистрибутива. Например: E2QWRUHAPOMQZL.

Мне было интересно, есть ли способ получить содержимое заголовка ETag с помощью командлетов модуля AWSPowerShell. Я не хочу напрямую вызывать API AWS, выполняя Http-запрос в моем сценарии PowerShell, просто чтобы получить содержимое заголовка ... но, возможно, это единственный способ.

Я пробовал использовать командлет Get-CFDistributionConfig, но он не возвращает эту информацию.

$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

person vinhent    schedule 13.10.2017    source источник


Ответы (2)


После вызова Get-CFDistributionConfig значение ETag можно найти в $ AWSHistory.LastServiceResponse.ETag.

person bmalec    schedule 22.03.2019

Обходной путь, который я нашел, чтобы заставить его работать, заключается в прямом вызове API и чтении заголовков. Мне пришлось реализовать подпись версии 4, чтобы получить заголовок безопасности Authorization.

$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

Затем я смог передать ETag командлету Update-CFDistribution и заставить его работать.

$distribution = Update-CFDistribution @parameters -Id $distributionId -IfMatch $etag -Verbose

Надеюсь, что ETag будет возвращен модулем AWSPowerShell в следующей версии, чтобы избежать всего этого.

person vinhent    schedule 08.03.2018