Accessing AWS Secrets Manager from .NET Lambda Functions, Part 2 - Using Async Code

Want to learn more about AWS Lambda and .NET? Check out my A Cloud Guru course on ASP.NET Web API and Lambda.

Download full source code.

This is part two in a short series on retrieving secrets from AWS Secrets Manager inside Lambda functions.

In the first post, I showed how to create a secret, and deploy a Lambda function that retrieved the secret. It used a synchronous request to Secrets Manager.

In this post, you will do the same as in the first post, but using a fully async Lambda function.

Steps 1, 2, 3

Follow the steps in the previous post to get the tools, create the secret, and create the Lambda function code.

The code in the Function class will be a little different (don’t forget the using statements from the previous post).

Here is the async version -

 1public class Function
 2{
 3    public async Task<string> FunctionHandler(ILambdaContext context)
 4    {
 5        string secretName = "my-credentials";
 6        string region = "us-east-1";
 7
 8        var timeout = context.RemainingTime.Subtract(TimeSpan.FromSeconds(3));
 9        var cancellationToken = new CancellationTokenSource(timeout);
10
11        return await GetSecretValue(secretName, region, cancellationToken.Token);
12    }
13
14    private async Task<string> GetSecretValue(string secretName, string region, CancellationToken cancellationToken)
15    {
16        IAmazonSecretsManager client = new AmazonSecretsManagerClient(RegionEndpoint.GetBySystemName(region));
17
18        GetSecretValueRequest request = new GetSecretValueRequest(){
19            SecretId = secretName,
20            VersionStage = "AWSCURRENT"
21        };
22
23        try
24        {
25            GetSecretValueResponse response = await client.GetSecretValueAsync(request, cancellationToken);
26            return response.SecretString;
27        }
28        catch (OperationCanceledException oce)
29        {
30            System.Console.WriteLine($"Request timed out, the cancellation token was triggered. {oce.Message}");
31            throw;
32        }
33        catch (Exception ex)
34        {
35            Console.Error.WriteLine("Error: " + ex.Message);
36            throw;
37        }
38    }
39}

Steps 4, 5, 6, 7

Follow the steps in the previous post to deploy the function, invoke it, fix the permissions, and invoke it again.

Download full source code.

comments powered by Disqus

Related