2017-08-06 11 views
6

私はC#でラムダを使用していますが、ECQパラメータストアに格納されているパラメータにアクセスしようとしています。パラメータは文字列値として格納されます。AmazonSimpleSystemsManagementClient GetParametersを使用すると失敗します

私のラムダは、既存の役割を使用するように設定されています。 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の呼び出しの前と後にログインしていると、それが呼び出し後にログを取得しません。

ラムダからパラメータ値を取得するには、何が必要ですか?

+0

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

答えて

3

問題がラムダは、私たちのVPCの内部で実行することによって引き起こされました。 SSMへのアクセスはインターネット経由で行われるので、ラムダにインターネットへのアクセスを許可するようにNATゲートウェイを設定する必要がありました。

これが完了すると、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経由で実行されます。それはラムダ内で動作しません - 私はそれがIAMの問題だと思うが、それを把握することはできません。 – Anthony

+0

あなたは良い答えを見つけました。より多くの事を考えると、GetParametersAsyncの内部では、呼び出すときではなく、使用されています。 – mico

関連する問題