2017-08-06 25 views
6

Tôi có một Lambda trong C# và tôi đang cố gắng truy cập các thông số được lưu trữ trong Cửa hàng thông số ECQ. Các tham số được lưu trữ dưới dạng giá trị chuỗi.Sử dụng AmazonSimpleSystemsManagementClient GetParameters thất bại

Lambda của tôi được định cấu hình để sử dụng vai trò hiện tại. Trong IAM, tôi đã gán các chính sách sau đến vai trò:

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

Các Lambda chạy bên trong VPC của chúng ta và nếu giá trị tham số được mã hóa cứng thì nó thực thi thành công.

Mã của tôi để có được những tham số là:

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; 

Tôi có đăng nhập trước và sau khi cuộc gọi đến GetParametersAsync và nó không đến được khai thác gỗ sau khi cuộc gọi.

Tôi cần làm gì để có thể nhận giá trị tham số từ Lambda?

+0

http://docs.aws.amazon.com/lambda/latest/dg/vpc.html – Ramankingdom

Trả lời

3

Vấn đề này là do Lambda chạy bên trong VPC của chúng tôi. Truy cập SSM được thực hiện thông qua internet vì vậy tôi đã phải cấu hình một NAT Gateway để cấp quyền truy cập Lambda cho internet.

Khi điều này được thực hiện, Lambda có thể truy cập các thông số SSM thành công.

1

Bạn nên có một cái gì đó tương tự như:

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

Trong cuộc gọi async phản ứng không phải là ngay lập tức, do đó bạn cần phải chờ đợi trước đó. thông tin

thêm:

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

+0

Ví dụ trực tiếp từ nguồn của tôi, cần sửa đổi cho phù hợp với trường hợp của bạn. Nó không phải là một vấn đề lớn, một khi ý tưởng rất đơn giản. – mico

+0

Cảm ơn câu trả lời của bạn. Mã tôi đã làm việc khi chạy qua Visual Studio bằng cách sử dụng khóa truy cập cá nhân của tôi. Nó không hoạt động trong lambda - Tôi tin rằng đó là vấn đề IAM nhưng không thể hiểu được. – Anthony

+0

Tốt là bạn đã tìm thấy câu trả lời. Suy nghĩ nhiều hơn về trường hợp, chờ đợi được sử dụng bên trong GetParametersAsync, không phải khi gọi nó. – mico