봄 부팅 애플리케이션에서 AWS SDK를 초기화하는 방법은?
SQS의 메시지를 읽어주는 스프링부팅 어플을 씁니다. Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ ΔΔ Δ Δ Δ Δ Δ Δ Δ Δ,AWS_ACCESS_KEY_ID
그리고.AWS_SECRET_ACCESS_KEY
이 을 . , 는 을 과 로 하는 이 이 하는 는 로 application.properties
어떻게 을 성취할 수 요? . . . . . . . . . . . . . . . . . . . . . ?
에서는 에서 에 된 에 에 언급된 속성에 액세스할 수 .application.yml
철통같이 늘어놓다@value
◦ 과 같은 수 .다음과 같은 서비스를 만들 수 있습니다.
@Service
public class AmazonClient {
private AmazonSQS sqsClient;
@Value("${amazonProperties.accessKey}")
private String accessKey;
@Value("${amazonProperties.secretKey}")
private String secretKey;
@PostConstruct
private void initializeAmazon() {
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(this.accessKey, this.secretKey);
this.sqsClient = AmazonSQSClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.build();
}
}
application.yml
선택사항:
amazonProperties:
accessKey: <your_access_key>
secretKey: <your_secret_key>
스프링 부팅과 함께 스프링 클라우드 AWS를 사용하는 경우 자동 구성을 통해 일부 AWS 클라이언트(SQS, SNS 등) 및 EC2 메타 데이터를 설정할 수 있습니다.로컬 테스트의 경우 응용프로그램 속성을 통해 설정된 정적 공급자를 사용할 수 있습니다.
문서: https://cloud.spring.io/spring-cloud-static/spring-cloud-aws/2.0.1.RELEASE/single/spring-cloud-aws.html#_spring_boot_auto_configuration
으로 과 을 할 등의 할 수 .cloud.aws.credentials.accessKey
그리고.cloud.aws.region.static
.
aws sdk 2.0의 변경 사항은 다음과 같습니다.
AwsBasicCredentials awsCreds = AwsBasicCredentials.create(this.accessKey, this.secretKey);
S3Client client = S3Client.builder().region(Region.AP_SOUTH_1)
.credentialsProvider(StaticCredentialsProvider.create(awsCreds))
.build();
속성 파일을 사용하는 것을 피하고, 여기서는 자격 증명 공급자 체인, AWS 설명서를 더 많이 사용합니다.
속성 파일은 환경 변수에 의해 무시될 수도 있지만, 항상 그래야 한다면 속성 파일에서 이 파일을 언급해야 하는 이유는 무엇입니까?또한 코드(속성 파일)에서 키를 커밋하는 것을 피하고 싶습니다.
또한 CI/CD를 보면 Spring Boot Environment(특히 클라우드 상에서)에 맞게 환경 변수를 설정하는 것도 합리적이며 쉬운 방법입니다.도커 환경을 사용하면 훨씬 더 쉽고 깨끗해집니다.
EC2하는 경우 EC2(EC2)를 가 없습니다.AWS_ACCESS_KEY_ID
그리고.AWS_SECRET_ACCESS_KEY
, 에.EC2ContainerCredentialsProviderWrapper
자격 증명이 AWS 컨테이너에서 자동으로 가져옵니다.
@Profile({"non-prod", "prod"})
@Bean("AWSCredentialsProvider")
public AWSCredentialsProvider amazonAWSCredentialsProvider() {
return new EC2ContainerCredentialsProviderWrapper();
}
: 에 된 를 로 한 한 로 를 된 에 AWSCredentialsProviderChain
그럼 쓰시오AWSCredentialsProvider
아닌AWSStaticCredentialsProvider
그렇지 않으면 당신은 결국 com.amazonaws.AmazonServiceException: The security token included in the request is expired
예외.
- 기본 AWS 자격 증명 공급자 체인
- 환경 변수 자격 증명 공급자
- 시스템 속성 자격 증명 공급자
- 프로필 자격 증명 공급자
- EC2 컨테이너 자격 증명 공급자 래퍼
, 에서 을 할 되는 를 사용할 수 있습니다.AWSStaticCredentialsProvider
으로 값의 하드 awsAccessKeyId
그리고.awsSecretAccessKey
aws.awsAccessKeyId:AWS_ACCESS_KEY_ID
aws.awsSecretAccessKey:AWS_SECRET_ACCESS_KEY
@Value("${aws.awsAccessKeyId:}")
private String awsAccessKeyId;
@Value("${aws.awsSecretAccessKey:}")
private String awsSecretAccessKey;
@Profile({"dev", "test"})
@Bean("AWSCredentialsProvider")
public AWSStaticCredentialsProvider amazonAWSCredentialsProviderDevelopment() {
return new AWSStaticCredentialsProvider(new BasicAWSCredentials(
awsAccessKeyId, awsSecretAccessKey));
}
관리할 수 있는 방법은 몇 가지가 있습니다.
비밀 키와 액세스 키가 필요한 aws configure(로컬 또는 리눅스 머신에서)를 구성할 수 있습니다. 그러면 기본적으로 api에 전달할 필요가 없습니다. 시스템 경로에서 비밀 키 등을 선택하므로 연결을 만들 수 있습니다.
AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
AWS EC2를 사용하는 경우 ec2 인스턴스를 생성할 때 해당 시스템에 SQS 권한이 있는 역할을 할당해야 합니다. 그러면 해당 시스템에서 구성할 필요도 없습니다.
액세스 키 및 비밀 키를 정의할 수 있습니다.
application/properties
sqs 클래스로 로드합니다.@Value
.만들 수 있습니다.
aws.keys
당신의classpath
파일에서 속성을 로드할 수 있습니다.물론 당신은 그것들을 당신의 안에서 상수로 정의할 수 있습니다.
Constant class
.
언급URL : https://stackoverflow.com/questions/52413828/how-to-initialize-aws-sdk-in-spring-boot-application
'source' 카테고리의 다른 글
C에서 strtok과 strsep의 차이점은 무엇입니까? (0) | 2023.09.11 |
---|---|
Python에서 C를 호출하는 기능 (0) | 2023.09.11 |
C/C++에서 Windows 기능을 후크하려면 어떻게 해야 합니까? (0) | 2023.09.11 |
Django 앱을 Mariadb에서 Postgresql로 전환 (0) | 2023.09.11 |
Swift에서 인터넷 연결 가능 여부 확인 (0) | 2023.09.11 |