@SdkInternalApi
    final RegisterImageResult executeRegisterImage(RegisterImageRequest registerImageRequest) {

        ExecutionContext executionContext = createExecutionContext(registerImageRequest);
        AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
        awsRequestMetrics.startEvent(Field.ClientExecuteTime);
        Request<RegisterImageRequest> request = null;
        Response<RegisterImageResult> response = null;

        try {
            awsRequestMetrics.startEvent(Field.RequestMarshallTime);
            try {
                request = new RegisterImageRequestMarshaller().marshall(super.beforeMarshalling(registerImageRequest));
                // Binds the request metrics to the current request.
                request.setAWSRequestMetrics(awsRequestMetrics);
                request.addHandlerContext(HandlerContextKey.CLIENT_ENDPOINT, endpoint);
                request.addHandlerContext(HandlerContextKey.ENDPOINT_OVERRIDDEN, isEndpointOverridden());
                request.addHandlerContext(HandlerContextKey.SIGNING_REGION, getSigningRegion());
                request.addHandlerContext(HandlerContextKey.SERVICE_ID, "EC2");
                request.addHandlerContext(HandlerContextKey.OPERATION_NAME, "RegisterImage");
                request.addHandlerContext(HandlerContextKey.ADVANCED_CONFIG, advancedConfig);

            } finally {
                awsRequestMetrics.endEvent(Field.RequestMarshallTime);
            }

            StaxResponseHandler<RegisterImageResult> responseHandler = new StaxResponseHandler<RegisterImageResult>(new RegisterImageResultStaxUnmarshaller());

            response = invoke(request, responseHandler, executionContext);

            return response.getAwsResponse();

        } finally {

            endClientExecution(awsRequestMetrics, request, response);
        }
    }
<p>
Registers an AMI. When you're creating an instance-store backed AMI, registering the AMI is the final step in the
creation process. For more information about creating AMIs, see <a
href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami.html">Create your own AMI</a> in the
<i>Amazon Elastic Compute Cloud User Guide</i>.
</p>
<note>
<p>
For Amazon EBS-backed instances, <a>CreateImage</a> creates and registers the AMI in a single request, so you
don't have to register the AMI yourself. We recommend that you always use <a>CreateImage</a> unless you have a
specific reason to use RegisterImage.
</p>
</note>
<p>
If needed, you can deregister an AMI at any time. Any modifications you make to an AMI backed by an instance
store volume invalidates its registration. If you make changes to an image, deregister the previous image and
register the new image.
</p>
<p>
<b>Register a snapshot of a root device volume</b>
</p>
<p>
You can use <code>RegisterImage</code> to create an Amazon EBS-backed Linux AMI from a snapshot of a root device
volume. You specify the snapshot using a block device mapping. You can't set the encryption state of the volume
using the block device mapping. If the snapshot is encrypted, or encryption by default is enabled, the root
volume of an instance launched from the AMI is encrypted.
</p>
<p>
For more information, see <a href=
"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#creating-launching-ami-from-snapshot"
>Create a Linux AMI from a snapshot</a> and <a
href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIEncryption.html">Use encryption with Amazon
EBS-backed AMIs</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.
</p>
<p>
<b>Amazon Web Services Marketplace product codes</b>
</p>
<p>
If any snapshots have Amazon Web Services Marketplace product codes, they are copied to the new AMI.
</p>
<p>
Windows and some Linux distributions, such as Red Hat Enterprise Linux (RHEL) and SUSE Linux Enterprise Server
(SLES), use the Amazon EC2 billing product code associated with an AMI to verify the subscription status for
package updates. To create a new AMI for operating systems that require a billing product code, instead of
registering the AMI, do the following to preserve the billing product code association:
</p>
<ol>
<li>
<p>
Launch an instance from an existing AMI with that billing product code.
</p>
</li>
<li>
<p>
Customize the instance.
</p>
</li>
<li>
<p>
Create an AMI from the instance using <a>CreateImage</a>.
</p>
</li>
</ol>
<p>
If you purchase a Reserved Instance to apply to an On-Demand Instance that was launched from an AMI with a
billing product code, make sure that the Reserved Instance has the matching billing product code. If you purchase
a Reserved Instance without the matching billing product code, the Reserved Instance will not be applied to the
On-Demand Instance. For information about how to obtain the platform details and billing information of an AMI,
see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html">Understand AMI billing
information</a> in the <i>Amazon EC2 User Guide</i>.
</p>

@param registerImageRequest
       Contains the parameters for RegisterImage.
@return Result of the RegisterImage operation returned by the service.
@sample AmazonEC2.RegisterImage
@see <a href="http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImage" target="_top">AWS API
     Documentation</a>
aws-java-sdk-ec2/src/main/java/com/amazonaws/services/ec2/AmazonEC2Client.java