Как получить доступ к дополнительным ресурсам AWS из созданной Amplify функции Lambda?

Я играл с AWS Amplify. Поскольку я относительно новичок в AWS, я большой поклонник того, как Amplify предоставляет мне необходимые ресурсы и роли IAM в AWS. Мой вопрос касается использования Lambda с GraphQL. Следуя документации, я могу создать собственный запрос GraphQL, который вызывает функцию Lambda и возвращает ответ GraphQL. Однако я не могу найти нигде в документации о том, как взаимодействовать с другими ресурсами AWS с помощью этой функции Lambda. Например, я хочу взаимодействовать с DynamoDB или даже службами RDS. В документации упоминается возможность извлекать данные из других ресурсов (например, из базы данных MySQL), поэтому я предполагаю, что это возможно.

Когда я пытался взаимодействовать с DynamoDB (например), я получал ошибку «доступ запрещен», и я предполагаю, что это связано с тем, что функция Lambda не имеет необходимой политики / разрешений для этого. Одна из моих идей заключалась в том, чтобы вручную войти в консоль IAM и самостоятельно прикрепить эти политики, но, учитывая, что Amplify генерирует все это для вас и по существу управляет вашей «облачной инфраструктурой / состоянием», я не уверен, что это правильный способ сделать это. . Я заметил шаблон Cloud Formation, который Amplify генерирует, когда вы добавляете ресурс Lambda для GraphQL, поэтому моей следующей догадкой было добавить туда политику DynamoDB, а затем запустить ampify push, чтобы Amplify сгенерировал и управлял политиками для меня. Если это правильный способ сделать это, я думаю, мне придется научиться писать шаблоны облачных форм. Наконец, мне интересно, мешает ли мой мозг, и могу ли я просто передать идентификационную информацию Cognito через AWS JavaScript SDK в Lambda, и тогда все будет просто «работать» — но я не совсем уверен. Заранее приношу свои извинения, если я использую неправильную терминологию — как я уже сказал, я относительно новичок в AWS. Любая помощь или направление приветствуются.

См. также:  Как я могу разрешить документам в сегменте доступ к другим документам в этом же сегменте без разрешения общего доступа?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. ScoobaSteve

    С последней версией aws-ampify от 30 мая 2019 г. вы можете

    … легко предоставлять разрешения на создание / чтение / обновление / удаление для взаимодействия с ресурсами AWS (такими как DynamoDB) из функции Lambda.

    Образец кода:

    /* Amplify Params - DO NOT EDIT
    You can access the following resource attributes as environment variables from your Lambda function
    var environment = process.env.ENV
    var region = process.env.REGION
    var storageTeststorageName = process.env.STORAGE_TESTSTORAGE_NAME
    var storageTeststorageArn = process.env.STORAGE_TESTSTORAGE_ARN
    
    Amplify Params - DO NOT EDIT */
    
    var AWS = require('aws-sdk');
    var region = process.env.REGION
    var storageTeststorageName = process.env.STORAGE_TESTSTORAGE_NAME
    AWS.config.update({region: region});
    var ddb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
    var ddb_table_name = storageTeststorageName
    var ddb_primary_key = 'id';
    
    function write(params, context){
        ddb.putItem(params, function(err, data) {
        if (err) {
          console.log("Error", err);
        } else {
          console.log("Success", data);
        }
      });
    }
    
    
    exports.handler = function (event, context) { //eslint-disable-line
    
      var params = {
        TableName: ddb_table_name,
        Item: AWS.DynamoDB.Converter.input(event.arguments)
      };
    
      console.log('len: ' + Object.keys(event).length)
      if (Object.keys(event).length > 0) {
        write(params, context);
      } 
    }; 
    

    Прочтите запись в блоге для получения дополнительной информации.

  2. ScoobaSteve

    Ты прав. Вы можете изменить сценарий формирования облака, чтобы добавить разрешения для лямбда-выражения.

    Но имейте в виду, что лямбда по умолчанию не в VPC, вы можете взаимодействовать с RDS, но не с экземпляром RDS в VPC. Как только вы поместите лямбда в тот же VPC, что и экземпляр RDS, вы сможете взаимодействовать с экземпляром, но не со службой RDS, потому что лямбда не имеет доступа к Интернету. Для этого вам понадобится конечная точка VPC или шлюз Nat.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: