Как получить доступ к дополнительным ресурсам AWS из сгенерированной лямбда-функции Amplify? - PullRequest
0 голосов
/ 28 мая 2019

Я играл с 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 генерировал и управлял политиками для меня,Если это правильный способ, думаю, мне придется научиться писать шаблоны Cloud Formation.Наконец, мне интересно, мешает ли мой мозг, и могу ли я просто передать идентификационную информацию Cognito через AWS JavaScript SDK в Lambda, и тогда все будет просто «работать» - но я не совсем уверен.Заранее извиняюсь, если я не использую правильную терминологию - как я уже сказал, я относительно новичок в AWS.Любая помощь или направление с благодарностью.

1 Ответ

1 голос
/ 05 июня 2019

В последнем выпуске aws-ampify от 30 мая 2019 года вы можете

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

Пример кода:

/* 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);
  } 
}; 

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

...