Overview
1. AWS SDK for JAVA 설치하기
// AWS Dynamic DB
compile group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb', version: '1.11.34'
2. Amazon Service를 호출하기 위한 준비
Client Builder
AWS Credential 설정하기
AWS SDK에 아무 설정도 해주지 않으면 아래와 같은 순서로 AWS Credentail을 탐색한다. 우리는 EC2 instance에 부여된 IAM Role을 사용하기 위해 5번 설정을 하면 된다.
1. 환경 변수 – AWS_ACCESS_KEY_ID
및 AWS_SECRET_ACCESS_KEY
. AWS SDK for Java에서는 EnvironmentVariableCredentialsProvider 클래스를 사용하여 이러한 자격 증명을 로드한다.
2. Java 시스템 속성–aws.accessKeyId
및 aws.secretKey
. AWS SDK for Java에서는 SystemPropertiesCredentialsProvider 클래스를 사용하여 이러한 자격 증명을 로드한다.
3. 기본 자격 증명 프로필 파일– 일반적으로 ~/.aws/credentials
(플랫폼마다 다를 수 있음)에 위치하며 여러 AWS SDK 및 AWS CLI에서 공유합니다. AWS SDK for Java에서는 ProfileCredentialsProvider 클래스를 사용하여 이러한 자격 증명을 로드한다.
AWS CLI에서 제공하는 aws configure
명령을 사용하여 자격 증명 파일을 생성하거나 텍스트 편집기에서 이 파일을 편집하여 새로 생성할 수 있습니다. 자격 증명 파일 형식에 대한 자세한 내용은 AWS 자격 증명 파일 형식을 참조
4. Amazon ECS 컨테이너 자격 증명– 환경 변수 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
가 설정된 경우 Amazon ECS에서 로드됩니다. AWS SDK for Java에서는 ContainerCredentialsProvider 클래스를 사용하여 이러한 자격 증명을 로드한다.
5. 인스턴스 프로파일 자격 증명– EC2 인스턴스에서 사용되며, Amazon EC2 메타데이터 서비스를 통해 전달됩니다. AWS SDK for Java에서는 InstanceProfileCredentialsProvider 클래스를 사용하여 이러한 자격 증명을 로드한다.
@Configuration
@Profile("staging")
@EnableDynamoDBRepositories(basePackageClasses = {Your DB Repository}.class)
public class DynamodbEC2Config {
@Value("${amazon.dynamodb.endpoint}")
private String amazonDynamoDBEndpoint;
@Bean
public AmazonDynamoDB amazonDynamoDB() {
// Use IAM Role credentials of EC2 instance
AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient(
new InstanceProfileCredentialsProvider());
amazonDynamoDB.setRegion(Region.getRegion(Regions.AP_NORTHEAST_2));
if (!StringUtils.isEmpty(amazonDynamoDBEndpoint)) {
amazonDynamoDB.setEndpoint(amazonDynamoDBEndpoint);
}
return amazonDynamoDB;
}
}
@Configuration
@Profile("staging")
@EnableDynamoDBRepositories(basePackageClasses = {Your DB Repository}.class)
public class DynamodbEC2Config {
@Value("${amazon.dynamodb.endpoint}")
private String amazonDynamoDBEndpoint;
@Bean
public AmazonDynamoDB amazonDynamoDB() {
// Use IAM Role credentials of EC2 instance
AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient(
new InstanceProfileCredentialsProvider());
amazonDynamoDB.setRegion(Region.getRegion(Regions.AP_NORTHEAST_2));
if (!StringUtils.isEmpty(amazonDynamoDBEndpoint)) {
amazonDynamoDB.setEndpoint(amazonDynamoDBEndpoint);
}
return amazonDynamoDB;
}
}
Credentials 생성 및 적용
- Java 시스템 속성으로 설정하는 경우 , https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html
- EC2 instance에 credential을 설정하는 경우, IAM role을 이용하여 Amazon EC2의 AWS reosurce에 대한 접근 권한 부여(https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html)를 참고하자.
- 기본 credential profile 파일을 사용하는 경우, https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html
3. Amazon Service 호출하기
Request Format
POST / HTTP/1.1 Host: dynamodb.<region>.<domain>; Accept-Encoding: identity Content-Length: <PayloadSizeBytes> User-Agent: <UserAgentString> Content-Type: application/x-amz-json-1.0 Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature> X-Amz-Date: <Date> X-AMZ-Target: DynamoDB_20120810.GetItem { "TableName": "Pets", "Key": { "AnimalType": {"S": "Dog"}, "Name": {"S": "Fido"} }
마무리하며
'DevOps > AWS' 카테고리의 다른 글
AWS SNS란? (0) | 2018.12.26 |
---|---|
CloudFront란? (0) | 2018.12.26 |
AWS DynamoDB - (2) 인증 및 접근 제어 ( Authentication and Access Control ) (0) | 2018.07.18 |
AWS DynamoDB - (1) Local with Docker + Spring Boot 연동 (0) | 2018.07.18 |
퍼블릭 서브넷과 프라이빗 서브넷이 있는 VPC 구축 (1) - VPC 설정 (0) | 2018.07.11 |