@SdkInternalApi
    final RevokeSecurityGroupIngressResult executeRevokeSecurityGroupIngress(RevokeSecurityGroupIngressRequest revokeSecurityGroupIngressRequest) {

        ExecutionContext executionContext = createExecutionContext(revokeSecurityGroupIngressRequest);
        AWSRequestMetrics awsRequestMetrics = executionContext.getAwsRequestMetrics();
        awsRequestMetrics.startEvent(Field.ClientExecuteTime);
        Request<RevokeSecurityGroupIngressRequest> request = null;
        Response<RevokeSecurityGroupIngressResult> response = null;

        try {
            awsRequestMetrics.startEvent(Field.RequestMarshallTime);
            try {
                request = new RevokeSecurityGroupIngressRequestMarshaller().marshall(super.beforeMarshalling(revokeSecurityGroupIngressRequest));
                // 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, "RevokeSecurityGroupIngress");
                request.addHandlerContext(HandlerContextKey.ADVANCED_CONFIG, advancedConfig);

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

            StaxResponseHandler<RevokeSecurityGroupIngressResult> responseHandler = new StaxResponseHandler<RevokeSecurityGroupIngressResult>(
                    new RevokeSecurityGroupIngressResultStaxUnmarshaller());

            response = invoke(request, responseHandler, executionContext);

            return response.getAwsResponse();

        } finally {

            endClientExecution(awsRequestMetrics, request, response);
        }
    }
<p>
Removes the specified inbound (ingress) rules from a security group.
</p>
<p>
You can specify rules using either rule IDs or security group rule properties. If you use rule properties, the
values that you specify (for example, ports) must match the existing rule's values exactly. Each rule has a
protocol, from and to ports, and source (CIDR range, security group, or prefix list). For the TCP and UDP
protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also
specify the ICMP type and code. If the security group rule has a description, you do not need to specify the
description to revoke the rule.
</p>
<p>
For a default VPC, if the values you specify do not match the existing rule's values, no error is returned, and
the output describes the security group rules that were not revoked.
</p>
<p>
For a non-default VPC, if the values you specify do not match the existing rule's values, an
<code>InvalidPermission.NotFound</code> client error is returned, and no rules are revoked.
</p>
<p>
Amazon Web Services recommends that you describe the security group to verify that the rules were removed.
</p>
<p>
Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay
might occur.
</p>

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