Create EC2MetadataClientException for IMDS 4XX errors (#5947) #5984
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation and Context
The IMDS client currently throws SdkClientException for all 4XX errors, contradicting AWS SDK guidelines which state that client exceptions should only be used when the client fails to make a service call. When IMDS returns a response (even 4XX), it means the call was successful but rejected by the service. This improper error classification prevents specific error handling. Users can't implement specific handling for such cases because the client discards the HTTP status code information, forcing all errors to be treated the same way.
Fixing #5786
Modifications
Created a new Ec2MetadataClientException extending SdkClientException that preserves HTTP status codes from IMDS responses.
The exception includes better error messaging including response content and provides access to status codes via the statusCode() method.
Modified error handling in both sync and async implementations to throw this new exception for 4XX responses instead of the SdkClientException.
Testing
Added unit tests to verify the new Ec2MetadataClientException. Tests include mocked IMDS responses with different status codes (4XX), verifying status code preservation, error message formatting, and proper exception handling in both sync and async clients.
Screenshots (if appropriate)
Types of changes
Checklist
mvn install
succeedsscripts/new-change
script and following the instructions. Commit the new file created by the script in.changes/next-release
with your changes.License