package software.amazon.imagebuilder.distributionconfiguration; import software.amazon.awssdk.services.imagebuilder.model.CreateDistributionConfigurationResponse; import software.amazon.awssdk.services.imagebuilder.model.InvalidParameterException; import software.amazon.awssdk.services.imagebuilder.model.ResourceAlreadyExistsException; import software.amazon.cloudformation.exceptions.CfnAlreadyExistsException; import software.amazon.cloudformation.exceptions.CfnInvalidRequestException; import software.amazon.cloudformation.proxy.AmazonWebServicesClientProxy; import software.amazon.cloudformation.proxy.Logger; import software.amazon.cloudformation.proxy.ProgressEvent; import software.amazon.cloudformation.proxy.OperationStatus; import software.amazon.cloudformation.proxy.ResourceHandlerRequest; import java.util.Objects; public class CreateHandler extends BaseHandler { private AmazonWebServicesClientProxy clientProxy; private Logger logger; @Override public ProgressEvent handleRequest( final AmazonWebServicesClientProxy proxy, final ResourceHandlerRequest request, final CallbackContext callbackContext, final Logger logger) { this.clientProxy = proxy; this.logger = logger; final ResourceModel model = request.getDesiredResourceState(); CreateDistributionConfigurationResponse response; try { response = proxy.injectCredentialsAndInvokeV2(RequestUtil.generateCreateDistributionConfigurationRequest(model), ClientBuilder.getImageBuilderClient()::createDistributionConfiguration); } catch (final ResourceAlreadyExistsException e) { logger.log(e.getMessage()); throw new CfnAlreadyExistsException(ResourceModel.TYPE_NAME, "DistributionConfigurationArn"); } catch (final InvalidParameterException e) { logger.log(e.getMessage()); throw new CfnInvalidRequestException(ResourceModel.TYPE_NAME); } model.setArn(response.distributionConfigurationArn()); return ProgressEvent.builder() .resourceModel(model) .status(OperationStatus.SUCCESS) .build(); } }