AWS SDK for Java 2.x에 대한 코드로 서비스 클라이언트 구성 - AWS SDK for Java 2.x

AWS SDK for Java 2.x에 대한 코드로 서비스 클라이언트 구성

서비스 클라이언트를 외부에서 구성하는 대신 코드에 프로그래밍 방식으로 구성할 수 있습니다.

코드에 서비스 클라이언트를 구성하여 사용 가능한 많은 옵션을 세밀하게 제어할 수 있습니다. 외부에서 설정할 수 있는 대부분의 구성도 코드에서 설정할 수 있습니다.

코드의 기본 구성

예를 들어 다음 코드 조각은 코드의 Amazon S3 서비스 클라이언트에 대해 AWS 리전을 EU_SOUTH_2로 설정합니다.

S3Client s3Client = S3Client.builder() .region(Region.EU_SOUTH_2) .build();

이전 코드 조각은 정적 팩토리 메서드(builder())를 보여줍니다. 이 builder() 메서드는 서비스 클라이언트를 사용자 지정할 수 있는 builder 객체를 반환합니다. 유용한 setter 메서드는 builder 객체(이 경우 S3ClientBuilder 인스턴스)를 반환하므로 편의성과 더 읽기 쉬운 코드를 위해 메서드 호출을 연결할 수 있습니다. 원하는 속성을 구성한 후에는 build() 메서드를 호출하여 클라이언트를 생성할 수 있습니다.

코드의 고급 구성

다음 코드 조각은 추가 구성 옵션을 보여줍니다.

ClientOverrideConfiguration clientOverrideConfiguration = ClientOverrideConfiguration.builder() .apiCallAttemptTimeout(Duration.ofSeconds(1)) .addMetricPublisher(CloudWatchMetricPublisher.create()) .build(); S3Client s3Client = S3Client.builder() .region(Region.EU_SOUTH_2) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .overrideConfiguration(clientOverrideConfiguration) .httpClientBuilder( ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://proxy:8080")) .build()) ).build();

이전 코드 조각에서는 서비스 클라이언트를 구성하는 몇 가지 진입점을 볼 수 있습니다.

  • 모든 서비스 클라이언트에서 공통적인 구성 옵션을 제공하는 ClientOverrideConfiguration.Builder 객체입니다. 이러한 설정은 HTTP 구현과 무관한 AWS별 동작입니다.

  • 별도의 HTTP 클라이언트 빌더 구현을 통한 HTTP 클라이언트 구성 ApacheHttpClient.Builder는 예제입니다. 서비스 클라이언트는 구성된 HTTP 클라이언트를 서비스 클라이언트에 연결하는 httpClientBuilder() 메서드를 제공합니다.

  • 클라이언트 빌더 자체의 메서드(예: region(), credentialsProvider())

별도의 객체를 만든 다음 서비스 클라이언트 메서드에 전달하는 대신 AWS SDK for Java 2.x는 Lambda 표현식을 수락하여 이러한 객체를 인라인으로 빌드하는 메서드를 제공합니다. 빌더의 구성 메서드 이름은 동일하지만 서명은 다릅니다. 예:

이 접근 방식을 사용하여 앞서 보여준 S3 클라이언트의 구성은 하나의 코드 블록에서 수행할 수 있습니다.

S3Client s3Client = S3Client.builder() .region(Region.EU_SOUTH_2) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .overrideConfiguration(b -> b .apiCallAttemptTimeout(Duration.ofSeconds(1)) .addMetricPublisher(CloudWatchMetricPublisher.create())) .httpClientBuilder(ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://proxy:8080")) .build())) .build();

코드에서 사용할 수 없는 구성 옵션

다음 설정은 SDK의 기본 초기화 프로세스에 영향을 미치므로 다음 구성 설정은 코드 내가 아닌 외부에서만 설정할 수 있습니다.

파일 위치 설정

이러한 설정은 공유 구성 및 자격 증명 파일의 위치를 제어하며 SDK가 파일을 로드한 후에는 프로그래밍 방식으로 재정의할 수 없습니다.

  • AWS_CONFIG_FILE(환경 변수)/aws.configFile(JVM 시스템 속성)

  • AWS_SHARED_CREDENTIALS_FILE(환경 변수)/aws.sharedCredentialsFile(JVM 시스템 속성)

이러한 설정은 SDK가 구성을 찾는 위치를 결정하므로 SDK가 구성 파일을 로드하기 전에 설정해야 합니다. SDK가 초기화되면 이러한 값을 변경해도 아무런 효과가 없습니다.

인스턴스 메타데이터 서비스 비활성화

  • AWS_EC2_METADATA_DISABLED(환경 변수)/aws.disableEc2Metadata(JVM 시스템 속성)

이 설정은 SDK가 EC2 인스턴스 메타데이터 서비스를 사용하려고 시도하는지 여부를 완전히 제어합니다. SDK가 초기화되면 이 설정을 프로그래밍 방식으로 변경할 수 없습니다.

프로파일 선택

  • AWS_PROFILE(환경 변수)/aws.profile(JVM 시스템 속성)

이 설정을 통해 공유 구성 및 자격 증명 파일에서 로드할 프로파일을 SDK에 알립니다. 로드된 후에는 이 값을 변경해도 아무런 효과가 없습니다.

컨테이너 자격 증명 경로

  • AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

  • AWS_CONTAINER_CREDENTIALS_FULL_URI

  • AWS_CONTAINER_AUTHORIZATION_TOKEN

  • AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE

이러한 환경 변수를 사용하여 SDK에 컨테이너 서비스에서 자격 증명을 가져오는 방법을 알립니다. 서비스 클라이언트 초기화 중에 자격 증명 공급자 체인이 설정되면 이러한 설정을 변경할 수 없습니다.

기본 HTTP 구현 선택

  • SYNC_HTTP_SERVICE_IMPL(환경 변수)/software.amazon.awssdk.http.service.impl(JVM 시스템 속성)

  • ASYNC_HTTP_SERVICE_IMPL(환경 변수)/software.amazon.awssdk.http.async.service.impl(JVM 시스템 속성)

이러한 전역 설정은 개별 서비스 클라이언트의 코드에서 재정의되지 않는 한 SDK가 모든 서비스 클라이언트에 대해 사용하는 HTTP 클라이언트 구현을 결정합니다. SDK가 HTTP 클라이언트를 초기화하기 전에 이를 설정해야 하며 나중에 변경할 수 없습니다.