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 одна папка слишком высока?

Спасибо, что прочитали, если кто-то знает ответы, я был бы очень рад!

0 ответов

Другие вопросы по тегам