2017-08-06 4 views
6

J'ai un Lambda en C# et j'essaie d'accéder aux paramètres stockés dans le magasin de paramètres ECQ. Les paramètres sont stockés en tant que valeur de chaîne. Mon Lambda est configuré pour utiliser un rôle existant.Utilisation de AmazonSimpleSystemsManagementClient GetParameters échoue

Dans IAM, je l'ai affecté les politiques suivantes au rôle:

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

Le Lambda s'exécute à l'intérieur de notre VPC et si la valeur du paramètre est codée en dur, elle s'exécute avec succès.

Mon code pour obtenir le paramètre est:

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; 

J'ai l'exploitation forestière avant et après l'appel à GetParametersAsync et qu'il ne soit pas à l'exploitation forestière après l'appel.

Que dois-je faire pour obtenir la valeur du paramètre de la Lambda?

+0

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

Répondre

3

Le problème a été provoqué par le Lambda courant à l'intérieur de notre VPC. L'accès à SSM se fait via Internet, j'ai donc dû configurer une passerelle NAT pour permettre à Lambda d'accéder à Internet.

Une fois cela fait, le Lambda pouvait accéder aux paramètres SSM avec succès.

1

Vous devriez avoir quelque chose de similaire à:

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

En appel async la réponse est non immédiate, donc vous devez attendre avant.

Plus d'informations:

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

+0

Exemple est directement à partir de ma source, a besoin de modifications en fonction de votre cas. Cela ne devrait pas être un gros problème, une fois que l'idée est si simple. – mico

+0

Merci pour votre réponse. Le code que j'ai fonctionne lorsqu'il est exécuté via Visual Studio en utilisant ma clé d'accès personnelle. Cela ne marche pas dans lambda - je crois que c'est un problème IAM mais je ne peux pas le comprendre. – Anthony

+0

Bien que vous avez trouvé une réponse. Penser plus le cas, l'attente est utilisée dans le GetParametersAsync, pas en l'appelant. – mico