source

봄 부팅 애플리케이션에서 AWS SDK를 초기화하는 방법은?

nicesource 2023. 9. 11. 21:52
반응형

봄 부팅 애플리케이션에서 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));
    }

관리할 수 있는 방법은 몇 가지가 있습니다.

  1. 비밀 키와 액세스 키가 필요한 aws configure(로컬 또는 리눅스 머신에서)를 구성할 수 있습니다. 그러면 기본적으로 api에 전달할 필요가 없습니다. 시스템 경로에서 비밀 키 등을 선택하므로 연결을 만들 수 있습니다.

    AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
    

aWSCL을 구성하는 방법

  1. AWS EC2를 사용하는 경우 ec2 인스턴스를 생성할 때 해당 시스템에 SQS 권한이 있는 역할을 할당해야 합니다. 그러면 해당 시스템에서 구성할 필요도 없습니다.

  2. 액세스 키 및 비밀 키를 정의할 수 있습니다.application/propertiessqs 클래스로 로드합니다.@Value.

  3. 만들 수 있습니다.aws.keys당신의classpath파일에서 속성을 로드할 수 있습니다.

  4. 물론 당신은 그것들을 당신의 안에서 상수로 정의할 수 있습니다.Constant class.

언급URL : https://stackoverflow.com/questions/52413828/how-to-initialize-aws-sdk-in-spring-boot-application

반응형