programing

AWS 응용 프로그램에 대한 스프링 부팅 시작 오류: 사용 가능한 EC2 메타데이터가 없습니다.

lastmoon 2023. 3. 28. 22:28
반응형

AWS 응용 프로그램에 대한 스프링 부팅 시작 오류: 사용 가능한 EC2 메타데이터가 없습니다.

Spring boot-AWS 응용 프로그램을 로컬로 실행하려고 하면 다음 오류가 발생합니다.

응용 프로그램이 EC2 환경에서 실행되고 있지 않기 때문에 EC2 메타 데이터를 사용할 수 없습니다.지역 검출은 애플리케이션이 EC2 인스턴스에서 실행되고 있는 경우에만 가능합니다.

내 aws-config.xml은 다음과 같습니다.

<aws-context:context-credentials>
<aws-context:simple-credentials access-key="*****" secret-key="*****"/>
</aws-context:context-credentials>  
<aws-context:context-region auto-detect="false" region="ap-south-1" />  
<aws-context:context-resource-loader/>  
<aws-messaging:annotation-driven-queue-listener max-number-of-messages="10" wait-time-out="20" visibility-timeout="3600"/> 

아래 수업에서 SQSListner와 함께 듣고자 합니다.

@Configuration
@EnableSqs
@ImportResource("classpath:/aws-config.xml")
@EnableRdsInstance(databaseName = "******", 
               dbInstanceIdentifier = "*****", 
               password = "******")
public class AwsResourceConfig {
    @SqsListener(value = "souviksqs", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
    public void receiveNewFileUpload(S3EventNotification event) {
        try {
            if ( event != null && !CollectionUtils.isNullOrEmpty( event.getRecords() ) && event.getRecords().get( 0 ) != null ) {
                S3Entity entry = event.getRecords().get(0).getS3();
                System.out.println("############ File Uploaded to ###################### " + entry.getBucket().getName() + "/" + entry.getObject().getKey());
            }
        } catch (Exception e) {
            System.out.println("Error reading the SQS message " + e);
            
        }
    }
}

편집 : 다음 aws-messaging maven 의존관계를 포함하면 오류가 발생한다는 것을 알게 되었습니다.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-aws-messaging</artifactId>
     <version>${spring-cloud-aws-version}</version>
</dependency>

spring-cloud-aws-version 1.2.1을 사용하고 있습니다.풀어주다

springframework.cloud.aws를 사용하고 있었어요.autoconfigure, 같은 문제가 발생하였습니다.그 이유는 NON AWS ENVIENTION에서 애플리케이션을 실행할 때 리젼을 수동으로 구성해야 하기 때문입니다.지역 주민입니다. 그러니 이 재산을 당신의 집에 넣어주세요.application-local.properties착하게 굴어야 해

cloud.aws.region.static=us-east-1

문제를 발견했다.SQS 메시징에 spring-cloud-starter-aw-messaging을 사용하고 있었습니다.위의 의존관계에는 Auto Detect 클래스가 다수 포함되어 있으며, 이 클래스는 필수가 아니더라도 최종적으로 기동하고 있습니다.

대신 spring-cloud-aws-messaging을 사용하여 다른 많은 자동검출 문제와 함께 문제를 해결했습니다.

spring boot proj의 application.properties에 이러한 속성을 추가하면 도움이 되었습니다.

cloud.aws.region.static=us-west-2
cloud.aws.region.auto=false
cloud.aws.stack.auto=false

application.yml을 사용하는 경우 다음과 같이 했습니다.

spring:
  application:
    name: App Name
  autoconfigure:
    exclude:
      - org.springframework.cloud.aws.autoconfigure.messaging.MessagingAutoConfiguration
      - org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration
      - org.springframework.cloud.aws.autoconfigure.context.ContextRegionProviderAutoConfiguration

저도 같은 문제가 있어서 스프링 구성에 이 제외를 추가함으로써 스프링 클라우드 AWS가 지역을 자동 구성하는 것을 막을 수 있었습니다.

    @SpringBootApplication(exclude = ContextRegionProviderAutoConfiguration.class)

저도 같은 문제에 직면했지만, aws region 속성을 추가해도 해결되지 않았습니다.봄기운을 벗기면 나도 풀 수 있었다.

souvikc의 정보다른 질문의 답변을 사용하여 (결국 하드코드 영역을 제거하지만, 마침내 작동하게 됩니다!)를 생각해 냈습니다.


@Configuration
@EnableContextInstanceData
@EnableSqs
@Profile("!local")
@Slf4j
public class AwsEc2Config {

    @Bean
    public RegionProvider regionProvider() {
        return new StaticRegionProvider("eu-west-1");
    }

    @Bean
    public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSQS) {
        SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
        factory.setAmazonSqs(amazonSQS);
        factory.setMaxNumberOfMessages(10);
        factory.setAutoStartup(true);
        factory.setWaitTimeOut(20);

        return factory;
    }
}

@Shubham-Pandey 응답을 사용하여 VM 옵션을 추가하여 앱을 로컬로 실행할 수 있습니다.

-Dcloud.aws.region.static=us-east-1

언급URL : https://stackoverflow.com/questions/45818092/spring-boot-startup-error-for-aws-application-there-is-not-ec2-meta-data-avail

반응형