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
'programing' 카테고리의 다른 글
'string'은 유형 '{}'을(를) 인덱싱하는 데 사용할 수 없습니다. (0) | 2023.03.28 |
---|---|
ORA-12516, TNS: 리스너가 사용 가능한 핸들러를 찾을 수 없음 (0) | 2023.03.28 |
Axios - JSON 응답을 읽는 방법 (0) | 2023.03.23 |
메뉴 제목에도 _title() 필터가 적용되는 이유는 무엇입니까? (0) | 2023.03.23 |
$.post와 $.ajax의 차이점 (0) | 2023.03.23 |