2017-08-06 17 views
6

我在C#中有一個Lambda,我試圖訪問存儲在ECQ參數存儲中的參數。參數存儲爲字符串值。使用AmazonSimpleSystemsManagementClient GetParameters失敗

我的Lambda配置爲使用現有角色。在IAM,我已經分配了以下政策作用:

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

拉姆達在我們的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獲取參數值?

+0

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

回答

3

問題是由LAMBDA我們VPC的內部運行造成的。訪問SSM是通過互聯網完成的,所以我必須配置一個NAT網關,讓Lambda訪問互聯網。

完成此操作後,Lambda可以成功訪問SSM參數。

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

+0

示例直接來自我的源代碼,需要修改以適合您的情況。一旦這個想法如此簡單,這不應該是一個大問題。 – mico

+0

感謝您的回答。使用我的個人訪問密鑰通過Visual Studio運行時,我的代碼已經可用。它不能在lambda中運行 - 我相信這是一個IAM問題,但無法弄清楚。 – Anthony

+0

很好,你找到了答案。思考更多的情況,await在GetParametersAsync中使用,而不是在調用它時使用。 – mico