AWS .withCredentials InstanceProfileCredentialsProvider вызывает ошибки
В декабре у меня был первый работающий проект fullstack, то есть он работал на моем Mac в школе и в развернутом приложении. Теперь, когда я клонировал свое репо на свой собственный компьютер с Windows, у меня возникли проблемы с тем, чтобы все было восстановлено и запущено в среде разработки. В основном я загружаю и извлекаю изображения в / из ведра S3, а развернутое приложение находится в контейнере докеров в другом ведре.
Я использую 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>*
Это похоже на то, что я клонировал его из своего репо, где последняя рабочая версия была отправлена в декабре. В декабре на Mac моей школы это работало именно так. Я просто клонировал его, настроил учетные данные и файл конфигурации и запустил сервер разработки и свой интерфейс. Как только мой интерфейс загружается, моя консоль браузера показывает мне ошибку 500, а консоль запуска в IntelliJ показывает это https://gist.github.com/077dede08ad2befeb2b3d1c93657d134
Когда я вхожу в свой
AmazonS3ClientBuilder
и удалите строку, которую я больше не получаю, и консоль запуска 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.
Итак, теперь я могу продолжить и указать правильное имя корзины, и мое приложение будет работать локально без ошибок.
Но почему, черт возьми, этот код работал на Mac, а не на моей машине с Windows? И что сделал
.withCredentials(new InstanceProfileCredentialsProvider(true))
делать? Не сломаю ли я свое приложение, когда собираюсь развернуть новую версию в AWS без этого?
Я также могу добавить свои ключи aws в файл, но это не имеет никакого значения. .withCredentials (новый 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
здесь с готовым и зеленым в результате, но не в какой-либо папке ниже этого
внутри папки
project-git-clone
подпапки
.idea
и внутри
the-project
мой
.elasticbeanstalk/config.yml
и мой
backend
и
frontend
папка и
Dockerfile
Возможно, интерфейс командной строки AWS EB предоставляет некоторые из этих учетных данных, и я использовал
eb init
одна папка слишком высока?
Спасибо, что прочитали, если кто-то знает ответы, я был бы очень рад!