in aws-rds-dbinstance/src/main/java/software/amazon/rds/dbinstance/DeleteHandler.java [30:65]
protected ProgressEvent<ResourceModel, CallbackContext> handleRequest(
final AmazonWebServicesClientProxy proxy,
final ResourceHandlerRequest<ResourceModel> request,
final CallbackContext callbackContext,
final ProxyClient<RdsClient> rdsProxyClient,
final ProxyClient<Ec2Client> ec2ProxyClient,
final Logger logger
) {
String snapshotIdentifier = null;
// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html
// For AWS::RDS::DBInstance resources that don't specify the DBClusterIdentifier property, the default policy is Snapshot.
if (BooleanUtils.isNotFalse(request.getSnapshotRequested())) {
snapshotIdentifier = generateResourceIdentifier(
Optional.ofNullable(request.getStackId()).orElse(STACK_NAME),
SNAPSHOT_PREFIX + Optional.ofNullable(request.getLogicalResourceIdentifier()).orElse(RESOURCE_IDENTIFIER),
request.getClientRequestToken(),
SNAPSHOT_MAX_LENGTH
);
}
final String finalSnapshotIdentifier = snapshotIdentifier;
return proxy.initiate("rds::delete-db-instance", rdsProxyClient, request.getDesiredResourceState(), callbackContext)
.translateToServiceRequest(model -> Translator.deleteDbInstanceRequest(model, finalSnapshotIdentifier))
.backoffDelay(config.getBackoff())
.makeServiceCall((deleteRequest, proxyInvocation) -> proxyInvocation.injectCredentialsAndInvokeV2(
deleteRequest,
proxyInvocation.client()::deleteDBInstance
))
.stabilize((deleteRequest, deleteResponse, proxyInvocation, model, context) -> isDbInstanceDeleted(proxyInvocation, model))
.handleError((deleteRequest, exception, client, model, context) -> Commons.handleException(
ProgressEvent.progress(model, context),
exception,
DELETE_DB_INSTANCE_ERROR_RULE_SET
))
.done((deleteRequest, deleteResponse, proxyInvocation, model, context) -> ProgressEvent.defaultSuccessHandler(null));
}