in src/AWS.Deploy.Orchestration/CdkProjectHandler.cs [233:261]
private async Task CheckCdkDeploymentFailure(string stackId, DateTime deploymentStartDate, DateTime deploymentEndDate, TryRunResult cdkDeployResult)
{
try
{
var stackEvents = await _awsResourceQueryer.GetCloudFormationStackEvents(stackId);
var failedEvents = stackEvents
.Where(x => x.Timestamp.ToUniversalTime() >= deploymentStartDate)
.Where(x =>
x.ResourceStatus.Equals(ResourceStatus.CREATE_FAILED) ||
x.ResourceStatus.Equals(ResourceStatus.DELETE_FAILED) ||
x.ResourceStatus.Equals(ResourceStatus.UPDATE_FAILED) ||
x.ResourceStatus.Equals(ResourceStatus.IMPORT_FAILED) ||
x.ResourceStatus.Equals(ResourceStatus.IMPORT_ROLLBACK_FAILED) ||
x.ResourceStatus.Equals(ResourceStatus.UPDATE_ROLLBACK_FAILED) ||
x.ResourceStatus.Equals(ResourceStatus.ROLLBACK_FAILED)
);
if (failedEvents.Any())
{
var errors = string.Join(". ", failedEvents.Reverse().Select(x => x.ResourceStatusReason));
throw new FailedToDeployCDKAppException(DeployToolErrorCode.FailedToDeployCdkApplication, errors, cdkDeployResult.ExitCode);
}
}
catch (ResourceQueryException exception) when (exception.InnerException != null && exception.InnerException.Message.Equals($"Stack [{stackId}] does not exist"))
{
var deploymentTotalTime = Math.Round((deploymentEndDate - deploymentStartDate).TotalSeconds, 2);
throw new FailedToDeployCDKAppException(DeployToolErrorCode.FailedToCreateCdkStack, $"A CloudFormation stack was not created. Check the deployment output for more details. Deployment took {deploymentTotalTime}s.", cdkDeployResult.ExitCode);
}
}