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));
            }
        }
        private async Task <string> GetStackResource(SnapStackRequest input, string stackName)
        {
            var cfClient = new AmazonCloudFormationClient(RegionEndpoint.EUWest1);


            //TODO: Paginate
            var request = new ListStackResourcesRequest
            {
                StackName = stackName
            };
            var json         = new JObject();
            var resourceList = await cfClient.ListStackResourcesAsync(request);

            foreach (var resource in resourceList.StackResourceSummaries)
            {
                json.Add($"{resource.ResourceType}_{resource.LogicalResourceId}", resource.PhysicalResourceId);
            }

            return(json.ToString(Formatting.Indented));
        }