Невозможно загрузить учетные данные AWS от любого поставщика в цепочке - файл профиля не может быть пустым - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь использовать AmazonSNS в своем приложении Spring Boot и могу использовать его локально, но как только я развертываю его на своем сервере разработки, я получаю эту ошибку:

Caused by: com.amazonaws.SdkClientException: Unable to load AWS credentials from any provider in the chain: [com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper@46a123e4: The requested metadata is not found at http://169.254.169.254/latest/meta-data/iam/security-credentials/ , com.amazonaws.auth.profile.ProfileCredentialsProvider@44bc2449: profile file cannot be null]

Если я не ошибаюсь, мой сервер не сможет получить учетные данные AWS.Я не понимаю почему, потому что AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY установлены как переменные среды.Мой код выглядит так:

private AmazonSNS amazonSNS;

@Autowired
public AmazonSNSPublisherService() {
    this.amazonSNS = AmazonSNSClientBuilder.standard().withCredentials(DefaultAWSCredentialsProviderChain.getInstance()).withRegion("eu-west-1").build();
}

Я пробовал это:

this.amazonSNS = AmazonSNSClientBuilder.standard().withRegion("eu-west-1").build();

И это:

this.amazonSNS = AmazonSNSClientBuilder.standard().withCredentials(new EnvironmentVariableCredentialsProvider()).withRegion("eu-west-1").build();

Но я всегда получаю одну и ту же ошибку.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Трудно диагностировать вашу конкретную проблему, но у меня была такая же проблема, также в приложении Spring Boot.Причина в том, что Spring Boot (возможно, пакет spring-cloud-starter-aws) создает свою собственную цепочку провайдеров учетных данных, и я поместил туда

@Autowired
private AmazonS3 s3Client;

в контейнер bean-компонента Spring ДО ПЕРЕД моим методом @Beanбыло выполнено:

@Bean
@Primary
public AWSCredentialsProvider buildDefaultAWSCredentialsProvider() {
    return new DefaultAWSCredentialsProviderChain();
}

Фактически я поместил оба фрагмента в один и тот же класс @Configuration и не понял, что компонент @Autowired был внедрен из контейнера Spring (который начинается с клиента AmazonS3 и DefaultAWSCredentialsProviderChainучетные данные, созданные Spring Boot) до того, как мой @Bean был создан и вставлен в контейнер Spring.

В любом случае, попробуйте посмотреть, не @Autowired ли вы вводите учетные данные ИЛИ клиент, который использует его в месте, котороевыполняется перед ВАШИМИ учетными данными и ВАШИМ клиентом SNS.

0 голосов
/ 26 ноября 2018

Я не могу объяснить почему, но моей проблемой была эта зависимость в моем файле pom:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-aws</artifactId>
</dependency>

Как только я удалил его, DefaultAWSCredentialsProviderChain работал отлично.

...