在 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
子文件夹.idea
,the-project
里面the-project
是我的.elasticbeanstalk/config.yml
和我的backend
和frontend
文件夹,Dockerfile
可能是,AWS EB CLI 提供了其中一些凭证信息,而我确实使用eb init
了一个文件夹太高了?
感谢您的阅读,如果有人知道一些答案,我会很高兴!