====== AWS Java SDK ====== * https://aws.amazon.com/ko/sdk-for-java/ * https://github.com/aws/aws-sdk-java-v2/ ===== withCredentials ===== * 모든 서비스 객체 생성시 ''withCredentials''로 인증 방식을 지정해주는 것이 성능에좋아 보인다. * 안 그러면 여러가지 ''CredentialsProvider''를 순차적으로 시도해보면서 초기 성능 저하가 있는 것으로 보임. * 기본 provider 는 [[https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html|DefaultAWSCredentialsProviderChain]] 인 것으로 보임. * 특히 [[https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/InstanceProfileCredentialsProvider.html|InstanceProfileCredentialsProvider]] 는 한번 생성해서 계속 재사용하게 해야한다. * 내부적으로 Thread Pool 생성하므로, 재사용하지 않으면 여러 쓰레드풀이 계속 만들어질 수 있음. * 비동기 refresh 사용시 필수적으로 애플리케이션 종료시 ''close()'' 호출. * SDK 설정시 해당 인스턴스를 인자로 넘겨야한다. 거기서 ''getCredentials()'' 호출 결과를 다른 객체에 주입하면 주기적인 credential refresh 가 일어나지 않게 되어 오류 로그가 찍힌다(실제 작동은 문제 없음) * ''The provided token has expired'' * ''The security token included in the request is expired'' * [[https://kim-jong-hyun.tistory.com/136|EC2에 배포된 Spring 웹 애플리케이션에서 AWS 리소스에 액세스할 때 주의해야할 점]] return AmazonS3ClientBuilder.standard() .withRegion(Regions.AP_NORTHEAST_2) .withCredentials(InstanceProfileCredentialsProvider.getInstance()) .build(); ===== localstack ===== * [[aws:localstack|LocalStack]] 과 연동시 몇가지 특별한 처리가 필요함. * [[aws:localstack|LocalStack]] 에서 ''Java SDK 설정'' 항목 살펴보기 ===== Kotlin SDK ===== * [[https://blog.jetbrains.com/ko/kotlin/2022/02/the-new-aws-sdk-for-kotlin-with-coroutines-support/|코루틴을 지원하는 새로운 Kotlin용 AWS SDK | The Kotlin Blog]]