public async Task <CloudFormationResponse> FunctionHandler(SnapStackRequest input, ILambdaContext context) { if (string.Equals("Delete", input.RequestType, StringComparison.OrdinalIgnoreCase)) { return(await CloudFormationResponse.CompleteCloudFormationResponse(null, input, context)); } return(await SnapshotStackResources(input, context)); }
private async Task <CloudFormationResponse> SnapshotStackResources(SnapStackRequest input, ILambdaContext context) { try { var stackName = input.StackId.Split('/')[1]; var results = await GetStackResource(input, stackName); await StoreResultsInDynamo(results, input.ResourceProperties, stackName); return(await CloudFormationResponse.CompleteCloudFormationResponse(null, input, context)); } catch (Exception ex) { return(await CloudFormationResponse.CompleteCloudFormationResponse(ex, input, context)); } }
public static async Task <CloudFormationResponse> CompleteCloudFormationResponse(object data, CloudFormationRequest request, ILambdaContext context) { data = data ?? new JObject(); var responseBody = new CloudFormationResponse { Status = data is Exception ? "FAILED" : "SUCCESS", Reason = "See the details in CloudWatch Log Stream: " + context.LogStreamName, PhysicalResourceId = context.LogStreamName, StackId = request.StackId, RequestId = request.RequestId, LogicalResourceId = request.LogicalResourceId, Data = data is Exception ? new JObject(new JProperty("exception:", data.ToString())) : data }; try { using (var client = new HttpClient()) { var jsonContent = new StringContent(JsonConvert.SerializeObject(responseBody)); jsonContent.Headers.Remove("Content-Type"); var postResponse = await client.PutAsync(request.ResponseURL, jsonContent); postResponse.EnsureSuccessStatusCode(); } } catch (Exception ex) { LambdaLogger.Log("Exception: " + ex); responseBody.Status = "FAILED"; responseBody.Data = new JObject(new JProperty("exception:", ex.ToString())); } return(responseBody); }