powershell - 如何在 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)
解决方案
我终于找到了答案。
我的 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 命令后,它运行良好。
推荐阅读
- javascript - Checkbox - ischecked jQuery 验证
- excel - VBA - 按数组自动过滤也没有返回大数字
- javascript - discord.js v12 命令参数
- java - 将 JDK 15 添加到 Netbeans 8.2 RC
- sed - 如何使用 SED 在文件中某个复杂字符串之后插入文本
- python - RuntimeError:操作在 f 字符串语句中没有标识
- r - 错误:使用“ifelse”时出现意外的“=”
- http - guzzle 中的 http_errors 有什么用?
- c# - 如果在阻塞代码下方一直使用 .ConfigureAwait(false) ,阻塞异步调用之后的代码是否会在相同的上下文中继续?
- java - 为什么 testng 将属性 a 分配给相同的地址?