首页 > 解决方案 > 如何在 AWS Lambda 中使用 Route53 域命令行开关?

问题描述

在 lambda 中运行 route 53 域命令行开关时出现错误,它们在本地运行良好,我可以在 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)

标签: powershellaws-lambda

解决方案


我终于找到了答案。

我的 Lambda 在 eu-west-1(爱尔兰)区域运行,但 53 号路线应该是无区域的,也可以在此处找到:https ://aws.amazon.com/blogs/developer/aws-regions-and-windows-电源外壳/

但是,当我使用 -Verbose 开关在本地运行命令时,它显示该命令在区域 us-east-1 中运行。将 -Region us-east-1 添加到 Lambda 中的 powershell 命令后,它运行良好。


推荐阅读