【问题标题】:Using AmazonSimpleSystemsManagementClient GetParameters fails使用 AmazonSimpleSystemsManagementClient GetParameters 失败
【发布时间】:2018-01-14 04:51:35
【问题描述】:

我有一个 C# 中的 Lambda,我正在尝试访问存储在 ECQ 参数存储中的参数。参数存储为字符串值。

我的 Lambda 配置为使用现有角色。在 IAM 中,我为角色分配了以下策略:

  • AmazonRedshiftReadOnlyAccess
  • AmazonKinesisReadOnlyAccess
  • AmazonVPCFullAccess
  • AWSLambdaExecute
  • AmazonSSMReadOnlyAccess
  • AWSLambdaVPCAccessExecutionRole

Lambda 在我们的 VPC 内部运行,如果参数值是硬编码的,它会成功执行。

我获取参数的代码是:

var client = new AmazonSimpleSystemsManagementClient(RegionEndpoint.APSoutheast2);
var request = new GetParametersRequest
{
   Names = new List<string>{ "ParameterName" }
};
var response = client.GetParametersAsync(request).Result;
var value = response.Parameters.Single().Value;

我在调用 GetParametersAsync 之前和之后都有日志记录,但在调用之后它没有进入日志记录。

我需要做什么才能从 Lambda 中获取参数值?

【问题讨论】:

标签: aws-lambda amazon-iam


【解决方案1】:

你应该有类似的东西:

public async Task<Response> ProcessS3ImageResizeAsync(SimpleS3Event input)
{
   var response = await client.DoAsyncWork(input);
   return response;
}

在异步调用中,响应不是立即的,因此您需要先等待。

更多信息:

[1]http://docs.aws.amazon.com/lambda/latest/dg/dotnet-programming-model-handler-types.html#dot-net-async

【讨论】:

  • 示例直接来自我的来源,需要修改以适合您的情况。一旦想法如此简单,这应该没什么大不了的。
  • 感谢您的回答。使用我的个人访问密钥通过 Visual Studio 运行时,我拥有的代码有效。它无法在 lambda 中运行 - 我认为这是一个 IAM 问题,但无法解决。
  • 很高兴您找到了答案。更多地考虑这种情况,在GetParametersAsync内部使用await,而不是在调用它时使用。
【解决方案2】:

问题是由在我们的 VPC 内运行的 Lambda 引起的。访问 SSM 是通过 Internet 完成的,因此我必须配置一个 NAT 网关才能让 Lambda 访问 Internet。

完成此操作后,Lambda 可以成功访问 SSM 参数。

【讨论】:

  • 如果您不想/不需要为在您的 VPC 中运行的 Lambda 函数开放所有出站流量,您可以为 SSM 设置一个Interface VPC Endpoint 而不是 NAT 网关、Internet 网关等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
相关资源
最近更新 更多