C#でLambdaからAthena叩いてる人が少なくてネット上に全然コードが落ちてなかったので、
未来のためにコードの断片を残しておきます。
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Amazon.Athena; using Amazon.Athena.Model; using Amazon.Lambda.Core; using Newtonsoft.Json; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.LambdaJsonSerializer))] namespace HelloWorld { public class Function { /// <summary> /// A simple function that takes a string and does a ToUpper /// </summary> /// <param name="input"></param> /// <param name="context"></param> /// <returns></returns> public async Task<string> FunctionHandler(string input, ILambdaContext context) { var athenaClient = new AmazonAthenaClient(Amazon.RegionEndpoint.APNortheast1); var startQueryExecutionResponse = await athenaClient.StartQueryExecutionAsync(new StartQueryExecutionRequest { QueryString = @"select count(*) from sample_database;", WorkGroup = "primary", ResultConfiguration = new ResultConfiguration { OutputLocation = "s3://bucket-name/" }, QueryExecutionContext = new QueryExecutionContext { Database = "default" } }); while (true) { await Task.Delay(1000); var getQueryExecutionResponse = await athenaClient.GetQueryExecutionAsync(new GetQueryExecutionRequest { QueryExecutionId = startQueryExecutionResponse.QueryExecutionId }); var queryExecutionState = getQueryExecutionResponse.QueryExecution.Status.State; if (queryExecutionState == QueryExecutionState.RUNNING || queryExecutionState == QueryExecutionState.QUEUED) continue; if (queryExecutionState == QueryExecutionState.FAILED) { return JsonConvert.SerializeObject(getQueryExecutionResponse); } break; } var getQueryResultsResponse = athenaClient.GetQueryResultsAsync(new GetQueryResultsRequest { QueryExecutionId = startQueryExecutionResponse.QueryExecutionId }); return JsonConvert.SerializeObject(getQueryResultsResponse.Result.ResultSet.Rows); } } }