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));
            }
        }
Exemple #3
0
        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);
        }