Как использовать командлеты домена Route53 в AWS Lambda? - PullRequest
0 голосов
/ 23 сентября 2019

Я получаю сообщение об ошибке при запуске доменных командлетов route 53 в lambda, они хорошо работают локально, и я могу успешно запустить другие командлеты в lambda, например, s3.

Я уже дал пользователю IAM полные права администратора, проверил локально и с другими командлетами и даже попытался выполнить команду с псевдонимом, и погуглил полученную ошибку.

Это базовый сценарий:

#Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.563.1'}
# Uncomment to send the input event to CloudWatch Logs
Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 5)
$r53domains = Get-R53DDomainList -AccessKey "xxxx" -SecretKey "xxx"
foreach ($domain in $r53domains){write-host "Domainlist = $($domain.DomainName)"}

Я ожидаю, что вывод будет выглядеть следующим образом: Domainlist = xxxx.com Domainlist = xxxxxx.nl

Однако в Lambda я получаюследующая ошибка:

[Error] - No such device or address
No such device or address: InvalidOperationException
   at Amazon.Lambda.PowerShellHost.PowerShellFunctionHost.ExecuteFunction(Stream inputStream, ILambdaContext context)
   at lambda_method(Closure , Stream , Stream , LambdaContextInternal )

   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   at Amazon.Runtime.HttpWebRequestMessage.GetResponseAsync(CancellationToken cancellationToken)
   at Amazon.Runtime.Internal.HttpHandler`1.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.Unmarshaller.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.ErrorHandler.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.CallbackHandler.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.EndpointDiscoveryHandler.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.EndpointDiscoveryHandler.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.CredentialsRetriever.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.RetryHandler.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.RetryHandler.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.CallbackHandler.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.CallbackHandler.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.ErrorCallbackHandler.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.Runtime.Internal.MetricsHandler.InvokeAsync[T](IExecutionContext executionContext)
   at Amazon.PowerShell.Cmdlets.R53D.GetR53DDomainListCmdlet.CallAWSServiceOperation(IAmazonRoute53Domains client, ListDomainsRequest request)
   at Amazon.PowerShell.Cmdlets.R53D.GetR53DDomainListCmdlet.Execute(ExecutorContext context)
No such device or address: SocketException
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)

1 Ответ

0 голосов
/ 30 сентября 2019

Я наконец нашел ответ.

Моя лямбда работает в регионе eu-west-1 (Ирландия), но маршрут 53 должен быть без региона, как также можно найти здесь: https://aws.amazon.com/blogs/developer/aws-regions-and-windows-powershell/

Однако, когда я запускал командылокально с помощью ключа -Verbose он показал, что команда была запущена в регионе us-east-1.После добавления -Region us-east-1 к команде powershell в Lambda все работало нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...