기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
EC2 메타데이터 유틸리티가 버전 1에서 버전 2로 변경
이 항목에서는 버전 1(v1)에서 버전 2(v2)로 변경된 SDK for Java Amazon Elastic Compute Cloud(EC2) 메타데이터 유틸리티의 변경 사항에 대해 자세히 설명합니다.
높은 수준의 변경 사항
변경 사항 | v1 | v2 |
---|---|---|
Maven 종속성 |
|
|
패키지 이름 |
com.amazonaws.util |
software.amazon.awssdk.imds |
인스턴스화 접근 방식 |
인스턴스화 없이 정적 유틸리티 메서드 사용:
|
정적 팩토리 메서드 사용:
또는 빌더 접근 방식 사용:
|
클라이언트 유형 | 동기 전용 유틸리티 메서드: EC2MetadataUtils |
동기식: 비동기식: |
3v2에 대한 apache-client
모듈 선언에 주목합니다. EC2 메타데이터 유틸리티 V2를 사용하려면 동기식 메타데이터 클라이언트의 경우 SdkHttpClient
인터페이스를 구현해야 하고, 비동기식 메타데이터 클라이언트의 경우 SdkAsyncHttpClient
인터페이스를 구현해야 합니다. HTTP 클라이언트 섹션에는 사용할 수 있는 HTTP 클라이언트 목록이 표시됩니다.
메타데이터 요청
v1에서는 파라미터를 허용하지 않는 정적 메서드를 사용하여 EC2 리소스에 대한 메타데이터를 요청합니다. 이와는 대조적으로 v2에서는 EC2 리소스의 경로를 파라미터로 지정해야 합니다. 다음 표는 서로 다른 접근 방식을 보여줍니다.
v1 | v2 |
---|---|
|
|
인스턴스 메타데이터 범주를 참조하여 메타데이터를 요청하기 위해 제공해야 하는 경로를 찾으세요.
참고
v2에서 인스턴스 메타데이터 클라이언트를 사용하는 경우, 메타데이터를 검색하는 모든 요청에 동일한 클라이언트를 사용해야 합니다.
동작 변경 사항
JSON 데이터
EC2에서 로컬로 실행되는 인스턴스 메타데이터 서비스(IMDS)는 일부 메타데이터를 JSON 형식의 문자열로 반환합니다. 그러한 예로 인스턴스 ID 문서의 동적 메타데이터를 들 수 있습니다.
v1 API에는 인스턴스 ID 메타데이터의 각 부분에 대한 별도의 메서드가 포함되어 있는 반면, v2 API는 JSON 문자열을 직접 반환합니다. JSON 문자열로 작업하려면 문서 API
다음 표는 v1과 v2에서 인스턴스 ID 문서의 메타데이터를 검색하는 방법을 비교한 것입니다.
사용 사례 | v1 | v2 |
---|---|---|
리전 검색 |
|
|
인스턴스 ID 검색 |
|
|
인스턴스 유형 검색 |
|
|
엔드포인트 해상도 차이
다음 표는 SDK가 엔드포인트를 IMDS로 확인하기 위해 확인하는 위치를 보여줍니다. 위치는 내림차순으로 나열됩니다.
v1 | v2 |
---|---|
시스템 속성: com.amazonaws.sdk.ec2MetadataServiceEndpointOverride |
클라이언트 빌더 구성 메서드: endpoint(...) |
환경 변수: AWS_EC2_METADATA_SERVICE_ENDPOINT |
시스템 속성: aws.ec2MetadataServiceEndpoint |
Default Value: http://169.254.169.254 |
구성 파일: ec2_metadata_service_endpoint 설정이 포함된 ~.aws/config |
확인된 endpoint-mode 관련된 값 |
|
기본 값: http://169.254.169.254 |
v2의 엔드포인트 해상도
빌더를 사용하여 엔드포인트를 명시적으로 설정하면 해당 엔드포인트 값이 다른 모든 설정보다 우선합니다. 다음 코드가 실행될 때 aws.ec2MetadataServiceEndpoint
시스템 속성 및 구성 파일 ec2_metadata_service_endpoint
설정이 있는 경우 무시됩니다.
Ec2MetadataClient client = Ec2MetadataClient
.builder()
.endpoint(URI.create("endpoint.to.use
"))
.build();
엔드포인트 모드
v2에서는 엔드포인트 모드를 지정하여 IPv4 또는 IPv6의 기본 엔드포인트 값을 사용하도록 메타데이터 클라이언트를 구성할 수 있습니다. v1에는 엔드포인트 모드를 사용할 수 없습니다. IPv4에 사용되는 기본값은 http://169.254.169.254
, IPv6의 경우 http://[fd00:ec2::254]
입니다.
다음 표는 우선 순위가 내려가는 순서대로 엔드포인트 모드를 설정할 수 있는 다양한 방법을 보여줍니다.
가능한 값 | ||
---|---|---|
클라이언트 빌더 구성 메서드: endpointMode(...) |
|
EndpointMode.IPV4 ,
EndpointMode.IPV6 |
시스템 속성 | aws.ec2MetadataServiceEndpointMode |
IPv4 , IPv6 (대/소문자를 구분하지 않음) |
Config 파일: ~.aws/config |
ec2_metadata_service_endpoint 설정 |
IPv4 , IPv6 (대/소문자를 구분하지 않음) |
이전 방법으로는 지정되지 않음 | IPv4가 사용됨 |
SDK가 v2에서 endpoint
또는 endpoint-mode
를 확인하는 방법
-
SDK는 클라이언트 빌더의 코드에서 설정한 값을 사용하며 외부 설정은 무시합니다. 클라이언트 빌더에서
endpoint
와endpointMode
가 모두 호출되면 SDK는 예외를 던지므로, 어떤 메서드를 사용하든 엔드포인트 값을 사용합니다. -
코드에서 값을 설정하지 않으면 SDK는 외부 구성에서 먼저 시스템 속성을 찾은 다음 구성 파일의 설정을 찾습니다.
-
SDK는 먼저 엔드포인트 값을 확인합니다. 값이 발견되면 해당 값이 사용됩니다.
-
여전히 값을 찾지 못한 경우 SDK는 엔드포인트 모드 설정을 찾습니다.
-
-
마지막으로, SDK가 외부 설정을 찾지 못하고 코드에서 메타데이터 클라이언트를 구성하지 않은 경우 SDK는
http://169.254.169.254
의 IPv4 값을 사용합니다.
IMDSv2
Amazon EC2는 인스턴스 메타데이터에 액세스하는 두 가지 접근 방식을 정의합니다.
-
인스턴스 메타데이터 서비스 버전 1(IMDSv1) - 요청/응답 방식
-
인스턴스 메타데이터 서비스 버전 2(IMDSv2) - 세션 지향 방식
다음 표는 Java SDK와 IMDS의 작동 방식을 비교한 것입니다.
v1 | v2 |
---|---|
IMDSv2가 기본적으로 사용됨 | 항상 IMDSv2를 사용함 |
각 요청에 대해 세션 토큰을 가져오려고 시도하고 세션 토큰을 가져오지 못하면 IMDSv1으로 돌아갑니다. | 여러 요청에 재사용되는 세션 토큰을 내부 캐시에 보관합니다. |
SDK for Java 2.x는 IMDSv2만 지원하며 IMDSv1로 돌아가지 않습니다.
구성 차이점
다음 표에는 다양한 구성 옵션이 나와 있습니다.
구성 | v1 | v2 |
---|---|---|
재시도 | 구성을 사용할 수 없음 | 빌더 메서드 retryPolicy(...) 를 통해 구성할 수 있습니다. |
HTTP | 연결 시간 제한은 AWS_METADATA_SERVICE_TIMEOUT 환경 변수를 통해 구성할 수 있습니다. 기본값은 1초입니다. |
빌더 메서드인 httpClient(...) 에 HTTP 클라이언트를 전달하여 구성할 수 있습니다. HTTP 클라이언트의 기본 연결 시간 제한은 2초입니다. |
예제 v2 HTTP 구성
다음 예제는 메타데이터 클라이언트를 구성하는 방법을 보여줍니다. 이 예제에서는 연결 시간 제한을 구성하고 Apache HTTP 클라이언트를 사용합니다.
SdkHttpClient httpClient = ApacheHttpClient.builder() .connectionTimeout(Duration.ofSeconds(1)) .build(); Ec2MetadataClient imdsClient = Ec2MetadataClient.builder() .httpClient(httpClient) .build();