Я запускаю экспресс-приложение в Elastic Beanstalk, и в одном из маршрутов я использую aws-sdk для публикации уведомления в sns.
Это работает при локальном запуске, но как в среде Elastic Beanstalk настроить учетные данные «myprofile»?
router.post('/publish', async (req, res) => {
var AWS = require('aws-sdk')
AWS.config.update({region: 'us-east-2'})
// myprofile exists locally, but how do I deal with this in the elastic beanstalk environment?
var credentials = new AWS.SharedIniFileCredentials({profile: 'myprofile'})
AWS.config.credentials = credentials
//...more stuff
})





Вы можете использовать профиль экземпляра IAM для предоставления разрешений вашему экземпляру ec2, поэтому, когда ваше приложение загружает SDK, переданные учетные данные будут загружены автоматически.
Проверьте эту ссылку https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-roles.html — вам понадобится профиль экземпляра. Чтобы создать профиль экземпляра, перейдите в консоль IAM > Роли, затем выберите службу EC2 в качестве службы, которая может взять на себя эту роль. Затем прикрепите политики, которые необходимо вызвать вашему приложению (вещи SNS).
В настройках beanstalk в разделе безопасности вы сможете установить профиль экземпляра IAM, который вы только что создали, поэтому экземпляры в этой среде должны иметь связанную с ним роль.
Тогда ваш код должен выглядеть так:
router.post('/publish', async (req, res) => {
var AWS = require('aws-sdk')
AWS.config.update({region: 'us-east-2'})
//...more stuff
})
Также проверьте, можете ли вы потребовать и установить регион за пределами контроллера;)
Нп. Дело в том, что профиль экземпляра будет альтернативой профилю. Если вам нужны точно такие же разрешения, как и в «мой профиль», просто прикрепите те же политики к профилю экземпляра.
Спасибо за информацию! Однако я запутался, локально мне нужно указать профиль (у меня есть несколько настроенных, поэтому мне нужно указать, какой из них), как мне с этим справиться? в eb будет ошибка, так как он не найдет учетные данные «myprofile»