#amazon-web-services #amazon-s3 #aws-lambda #terraform
Вопрос:
Я пытаюсь создать простую инфраструктуру с использованием terraform.Terraform должен создать корзину lambda и s3, lambda запускается с помощью API gateway, который снова создается terraform. Я создал роль и назначил ее lambda, чтобы lambda могла помещать объекты в корзину s3. Мой lambda написан на Java, поскольку я назначаю роль lambda для доступа к S3, как мне использовать эту роль в своем коде? Я наткнулся на другую статью, в которой предлагалось получить доступ к S3 с помощью приведенного ниже кода. Я предположил, что об этом позаботится генерация токена.
var s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(InstanceProfileCredentialsProvider(false))
.withRegion("ap-southeast-2")
.build()
Я не понимаю, как получить доступ к s3, нужно ли мне использовать роль, созданную terraform в моем коде, или есть другой способ доступа к S3 из кода Java?
Комментарии:
1. Не указывайте регион или поставщика учетных данных, и все должно быть в порядке.
Ответ №1:
Вам не нужно брать на себя роль внутри функции Lambda. Вместо этого просто настройте функцию Lambda на принятие роли IAM. Или добавьте соответствующую политику S3 к существующей роли IAM в Lambda.
Обычно в этом случае вам не нужно явно указывать учетные данные или регион. Просто используйте:
AmazonS3 s3Client = new AmazonS3Client();
Смотрите Базовый пример Terraform по созданию роли IAM и лямбда-функции и настройке лямбда-функции для принятия настроенной роли.
Комментарии:
1. Большое вам спасибо, это сработало. Я также допустил еще одну ошибку при вызове S3.« S3Client.putObject( PutObjectRequest(«bucket-test», response.fileName, response.content))« Содержимое должно быть преобразовано в поток байтов, но я передавал строку, в которой используется другой конструктор.
Ответ №2:
Ответ Jarmods верен, что вы можете настроить роль лямбды напрямую, но есть конкретные случаи использования, когда вам может потребоваться быть первым в одной учетной записи, чем в другой. Если вам нужно взять на себя роль в середине вашего кода, используйте функциональность STS вашего SDK. STS — это библиотека в aws sdk, которая управляет принятием учетных данных роли с помощью кода.