2017-11-07 9 views
0

AWS 속성을 내 application.properties (또는 application.yml) 파일에 추가하는 방법을 파악하는 데 어려움을 겪고 있으며 STS에서 잘못 설정 한 내용을 알지 못합니다.AWS 응용 프로그램을 만들 때 AWS 속성이 누락되었습니다.

Spring Initializr을 사용하여 간단한 AWS 앱을 만들면이를 재현 할 수 있습니다. 실제 앱이 사용하고있는 AWS, Consul 및 REST를 추가하고 있습니다. 생성되는 POM은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>edu.dkist</groupId> 
<artifactId>staging-service-demo</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>staging-service-demo</name> 
<description>Demo project for Spring Boot</description> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.5.8.RELEASE</version> 
    <relativePath/> <!-- lookup parent from repository --> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    <java.version>1.8</java.version> 
    <spring-cloud.version>Dalston.SR4</spring-cloud.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-aws</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-consul-config</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jersey</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-dependencies</artifactId> 
      <version>${spring-cloud.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 


</project> 

이 샘플에서는 응용 프로그램에 코드를 추가하지 않고 코드 만 생성합니다. 이것은 내가 작업하고있는 앱에 문제가 있는지 확인하는 테스트였습니다. 응용 프로그램 속성을 추가하려고하면 AWS에 아무 것도 표시되지 않습니다. YAML 파일을 만드는 경우에도 마찬가지입니다.

Missing AWS properties

내가 문제를 강제하고, 어쨌든 그것을 추가하는 경우 STS의 경우, 해당 건물이 알 수 말한다. 앱이 EC2 인스턴스에서 실행되고 있지

Caused by: java.lang.IllegalStateException: There is not EC2 meta data available, because the application is not running in the EC2 environment. Region detection is only possible if the application is running on a EC2 instance 

, 그것은 로컬로 실행의 : 응용 프로그램을 컴파일

Unknown property aws

예외가 발생합니다. 내가 읽은 것부터 EC2에서 실행 중이 지 않으면 aws.region.auto를 추가해야하지만, 앱에 속성이 있음을 알릴 수는 없습니다. 액세스 키와 비밀 키도 마찬가지입니다.

답변

1

그래서 ... STS가 그들을 인식하지 못하더라도 추가 할 경우 속성이 작동하는 것처럼 보이지만 다른 게시물을 꼼꼼하게 읽고 읽은 후에 보입니다.

나는
cloud: 
    aws: 
    credentials: 
    instanceProfile: false 
    region: 
    static: eu-west-1 
    stack: 
    auto: false 

을 추가하고 프로그램이 실행됩니다.

나를 상쾌하게하는 또 다른 일은 속성에 대한 경로의 불일치입니다. 예를 들어 영사 속성은 AWS가

cloud.aws.* 

에 그대로 AWS 속성을 시작 할 "봄"없습니다

spring.cloud.consul.* 

에 있습니다. 나는 그 모순에 대한 이유가있을 것이라고 확신합니다, 나는 단지 그것을 모릅니다.

+1

STS '인식'속성은 클래스 경로에있는 속성의 메타 데이터 가용성에 따라 다릅니다. 메타 데이터를 제공하는 것은 라이브러리 제작자의 몫입니다. AWS 속성에는 적절한 메타 데이터가없는 것 같습니다. 라이브러리 작성자가 만들지 않았기 때문일 수 있습니다. – Kris

+1

STS가 자체적 인 구성을 위해 Spring Boot에 의해 생성되는 구성 메타 데이터에 대해 더 알고 싶다면 여기를 참조하십시오 : https://docs.spring.io/spring-boot/docs /current/reference/html/configuration-metadata.html –