2015-07-26 16 views
7

Tôi khá mới đối với mùa xuân nói chung, cũng như Amazon AWS, vì vậy tôi xin lỗi trước nếu tôi đang làm điều gì đó khủng khiếp sai.Khởi động mùa xuân và Amazon AWS - cách kết nối với S3 bằng cách sử dụng Spring Cloud AWS?

Tôi dường như không thể tải ứng dụng Khởi động mùa xuân của mình để liên lạc với các dịch vụ AWS bằng bất kỳ cách nào khi được triển khai lên Cây đậu đàn hồi. Tôi đã làm theo hướng dẫn here để cố gắng thiết lập dự án của tôi đúng cách.

tôi chủ yếu lấy mã họ cung cấp và cố gắng chạy khỏi dự án của tôi:

@Component 
public class Storage { 

    @Autowired 
    private ResourceLoader resourceLoader; 

    Logger logger = LoggerFactory.getLogger(this.getClass()); 

    public Storage() { 

    } 

    public void writeResource() throws IOException { 
     Resource resource = this.resourceLoader.getResource("s3://server-images/rootFile.log"); 
     WritableResource writableResource = (WritableResource) resource; 
     try (OutputStream outputStream = writableResource.getOutputStream()) { 
      outputStream.write("test".getBytes()); 
     } 
    } 
} 

Siêu, có vẻ đơn giản. Tôi cũng đặt application.properties tập tin của tôi:

cloud.aws.credentials.accessKey = A******A 
cloud.aws.credentials.secretKey = i******K 

cloud.aws.credentials.instanceProfile = true 
cloud.aws.region.auto = true 

vì vậy tôi thiết lập các khóa và bí mật trong hồ sơ cá nhân, và sau đó cuối cùng, tôi thêm các công cụ để các tập tin build.gradle để có được những thứ mùa xuân Cloud:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.4.RELEASE") 
     classpath("io.spring.gradle:dependency-management-plugin:0.5.2.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 
apply plugin: 'war' 
apply plugin: "io.spring.dependency-management" 

war { 
    baseName = 'server' 
    // version = '0.0.1' 
} 

dependencyManagement { 
    imports { 
     mavenBom 'org.springframework.cloud:spring-cloud-aws:1.0.2.RELEASE' 
    } 
} 

//jar { 
// baseName = 'gs-spring-boot' 
// version = '0.1.0' 
//} 

repositories { 
    mavenCentral() 
    jcenter() 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

configurations { 
    providedRuntime 
} 

dependencies { 
    // tag::jetty[] 
    // compile("org.springframework.boot:spring-boot-starter-web") { 
    // exclude module: "spring-boot-starter-tomcat" 
    //} 
    compile("org.springframework.boot:spring-boot-starter-web") 
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") 

    // Spring Cloud AWS 
    compile 'org.springframework.cloud:spring-cloud-starter-aws' 

    //compile("org.springframework.boot:spring-boot-starter-jetty") 
    // end::jetty[] 
    // tag::actuator[] 
    compile("org.springframework.boot:spring-boot-starter-actuator") 
    compile("org.springframework.boot:spring-boot-starter-thymeleaf") 
    // end::actuator[] 
    testCompile("junit:junit") 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.4' 
} 

Cuối cùng, tôi không biết vấn đề này quan trọng như thế nào, nhưng tôi đã đưa "AmazonS3FullAccess" và "AmazonEC2FullAccess" vào vai trò elasticbeanstalk trong AWS. Tôi cũng đặt quyền cho "Mọi người" để liệt kê/tải lên/xóa.

Cho đến nay, tất cả tôi nhận được là:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:644) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:295) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:102) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:68) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:113) 
    at org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:59) 
    at org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:88) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:106) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:673) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException: null 
    at app.data.Storage.readTerminator(Storage.java:44) 
    at app.controllers.CodeController.getCode(CodeController.java:54) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    ... 54 common frames omitted 

Như tôi đã có thể thấy, resourceLoader là không nhận được bất cứ điều gì

Có thể có một số vấn đề cho phép? Có lẽ tôi đã định cấu hình sai? Tôi cho rằng đây không phải là khó khăn, vì vậy tôi chắc chắn đang làm điều gì đó sai! Nếu bất cứ ai có bất kỳ ý tưởng, họ được chào đón nhiều hơn.

+0

Saw bài này, và tôi là một người học như bạn :) http://stackoverflow.com/questions/23407515/amazons3-connection-management –

Trả lời

3

Brian.

Nếu nguyên nhân là quyền sai, bạn nên kiểm tra xem người dùng của bạn (mà bạn đã tạo trong IAM) có quyền truy cập tương ứng (Chính sách):

AmazonS3FullAccess, AWSConnector

Hy vọng điều này sẽ giúp.

+0

tôi đã kết thúc ditching Xuân Cloud và chỉ chạy với thư viện máy khách AWS. Cảm ơn bạn đã phản hồi! – Brian

+0

Có cùng một vấn đề, +1 Vladimir :) – fgonzalez

0

Kiểm tra xem chính sách nhóm của bạn có cho phép bạn đặt đối tượng không được mã hóa hay không. Nếu đây không phải là lý do, có thể có các lý do khác tại sao AWS S3 sẽ không cho phép các đối tượng của bạn được tải lên. Khi bạn sử dụng thư viện AWS gốc, chúng đặt nhiều mặc định, nhưng các thư viện mùa xuân có thể không đặt các giá trị mặc định này.

Tôi đã nhận được lỗi tương tự, cho đến khi tôi phát hiện ra rằng chính sách nhóm của tôi đã chặn bất kỳ đối tượng không được mã hóa nào được tải lên.

{ 
     "Sid": "RequiredEncryptedPutObject", 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": "s3:PutObject", 
     "Resource": "arn:aws:s3:::my-bucket/*", 
     "Condition": { 
      "StringNotEquals": { 
       "s3:x-amz-server-side-encryption": [ 
        "AES256", 
        "aws:kms" 
       ] 
      } 
     } 
    }, 
Các vấn đề liên quan