0

在 12 月,我的第一个全栈项目开始运行,这意味着它可以在我学校的 mac 和已部署的应用程序上运行。现在我将我的 repo 克隆到我自己的 windows 机器上,在开发环境中恢复和运行所有东西时我遇到了一些问题。基本上,我正在向 S3 存储桶上传和检索图像,并且部署的应用程序位于另一个存储桶的 docker 容器中。

我正在将 IntelliJ Idea Ultimate 2020.3 和 Java 与 Spring Boot 和 lombok 一起使用。

我有一门课程应该处理 AWS 凭证和客户端,这让我很头疼。

@Configuration
public class AmazonS3ClientUtils {

    @Value("${aws.access.key}")
    private String accessKey;

    @Value("${aws.secret.key}")
    private String secretKey;

    private final Regions clientRegion = Regions.EU_CENTRAL_1;

    @Bean
    public BasicAWSCredentials getAwsCredentials() {
        return new BasicAWSCredentials(accessKey, secretKey);
    }

    @Bean
    public AmazonS3 getS3Client() {

        return AmazonS3ClientBuilder.standard()
                .withRegion(clientRegion)
                .withCredentials(new InstanceProfileCredentialsProvider(true))
                .build();
    }

}

我的资源中还有一个 application.yml 文件,如下所示:

spring:
  data:
    mongodb:
      database: gramf
aws:
  access.key: testkey
  secret.key: testkey
  bucket.name: testbucket

management:
  endpoints:
    enabled-by-default: false
  endpoint:
    health:
      enabled: true

我还有带有凭据和配置文件的 .aws 文件夹。配置文件:

[default]
aws_access_key_id = [accessKey]
aws_secret_access_key = [secretKey]
region = eu-central-1
output = json
aws_bucket_name = bucket-for-images

是的,第 2 行和第 3 行的括号在那里。这是我的凭据文件:

[default]
aws_access_key_id = *<here is my access key>*
aws_secret_access_key = *<here is my secret access key>*

这就像我从我的回购中克隆它一样,最近的工作版本是在 12 月推出的。12 月在我的学校 mac 上,它的工作原理完全一样。我只是克隆了它,设置了凭证和配置文件,然后启动了开发服务器和我的前端。一旦我的前端加载,我的浏览器控制台就会显示错误 500,而 IntelliJ 中的运行控制台会显示此https://gist.github.com/077dede08ad2befeb2b3d1c93657d134

当我进入AmazonS3ClientBuilder并删除线时.withCredentials(new InstanceProfileCredentialsProvider(true)),我不再得到 500,并且 IntelliJ 运行控制台保持清洁。现在我在浏览器控制台中只剩下另一个错误,即跨源读取阻塞,因为我的图像 url 包含testbucket在其中而不是正确的存储桶名称。

Cross-Origin Read Blocking (CORB) blocked cross-origin response 
https://testbucket.s3.eu-central-1.amazonaws.com/... with MIME type application/xml. 

所以现在我可以继续输入正确的存储桶名称application.yml,我的应用程序将在本地运行而不会出错。

但是为什么这段代码在mac上运行而不是在我的windows机器上运行呢?做了.withCredentials(new InstanceProfileCredentialsProvider(true))什么?当我要在没有这个的情况下将新版本部署到 AWS 时,我会破坏我的应用程序吗?

我也可以将我的 aws 键添加到application.yml,但这根​​本没有任何区别。代码中的 .withCredentials(new InstanceProfileCredentialsProvider(true)) 仍然会导致错误。当我理解这一点时,@Value("${aws.access.key}")注释正在研究application.yml变量。为什么当 yml 只包含testkey其中而不是真正的键时它会起作用?如果它以某种方式重定向到 '.aws/config' / .aws/credentials,为什么它不接受aws_bucket_name来自那里的,只接受密钥?

我的文件结构如下所示: C:\Users\username\IdeaProjects\project-git-clone 我可以eb status在这里使用 Ready 和 Green 作为结果,但不能在此下方的任何文件夹中

文件夹里面是project-git-clone子文件夹.ideathe-project里面the-project是我的.elasticbeanstalk/config.yml和我的backendfrontend文件夹,Dockerfile 可能是,AWS EB CLI 提供了其中一些凭证信息,而我确实使用eb init了一个文件夹太高了?

感谢您的阅读,如果有人知道一些答案,我会很高兴!

4

0 回答 0