2015-08-28 2 views
4

Может ли кто-нибудь сказать мне, как получить доступ к учетным данным AWS в функции AWS Lambda?AWS Lambda custom triggers

Я тщательно искал Интернет, но до сих пор не нашел ничего, что помогло мне.

Im, записывающий функцию в Java. Я думаю, что у меня должен быть доступ к учетным данным с объектом контекста в методе HandleRequest.

Если это помогает, я хочу вызвать клиента DynamoDB и загрузить запись в базу данных.

+0

Почему бы вам не попробовать прямо без каких-либо полномочий? вы уже работаете на AWS, поэтому он должен сделать вывод, что вы использовали для подключения лямбда, поэтому он должен работать. – gerosalesc

+0

Вы имеете в виду просто позвонить. Клиент DynamoDbClient = новый dynamoDbClient(); а затем нормальный материал. Неужели это так просто? Можете ли вы это подтвердить? –

+0

Насколько я сейчас должен работать, но не пробовал это в прошлом – gerosalesc

ответ

3

Я сам недавно попал в ту же проблему. Это, безусловно, слепое место в документации Лямбды AWS для Java, на мой взгляд.

Этот фрагмент код в Java должен работать для вас, при условии, что вы используете AWS SDK для Java API документов:

DynamoDB dynamodb = new DynamoDB(
    new AmazonDynamoDBClient(new EnvironmentVariableCredentialsProvider())); 

Основная идея состоит в том, чтобы использовать EnvironmentVariableCredentialsProvider для доступа необходимых учетных данных для доступа к вашему другим Ресурсы AWS в контейнере AWS Lambda. Контейнеры Lambda поставляются с учетными данными как переменные среды, и этого достаточно для их извлечения.

Примечание: Это создает экземпляр DynamoDB, который видит ресурсы только в области по умолчанию. Для того, чтобы создать для конкретного региона, использовать это (если вы хотите получить доступ к DynamoDB находится в ар-северо-восток-1 регион):

DynamoDB dynamodb = new DynamoDB(
    Regions.getRegion(Regions.AP_NORTHEAST_1).createClient(
     AmazonDynamoDBClient.class, 
     new EnvironmentVariableCredentialsProvider(), 
     new ClientConfiguration())); 
+0

yup. вот и все. Спасибо чувак! –

2

Разрешения вашей Лямбда контролируются ролью IAM, которую она выполняет как. Либо добавьте разрешение Dynamo PutItem к текущей роли, либо создайте новую роль для этой цели.

enter image description here

После предоставления разрешения на роли, вам не нужно писать специальный код для обработки учетных данных, просто использовать AWS SDK обычно. Например:

var AWS = require("aws-sdk"); 

exports.handler = function(event, context) { 
    var dynamodb = new AWS.DynamoDB(); 
    var putItemParams = { 
     "TableName": "Scratch", 
     "Item": { 
      "Id": { 
       "S": "foo" 
      }, 
      "Text": { 
       "S": "bar" 
      } 
     } 
    }; 
    dynamodb.putItem(putItemParams, function (err, response) { 
     if (err) { 
      context.fail("dynamodb.putItem failed: " + err); 
     } else { 
      context.succeed("dynamodb.putItem succeeded"); 
     } 
    }); 
}; 

Достаточно положить элемент в таблицу DynamoDB с правильными разрешениями на роль.

+1

Я бы рекомендовал использовать https://github.com/awslabs/dynamodb-document-js-sdk вместо 'aws-sdk' для' DynamoDB' соединений. – kixorz

0

Добавление ответа @Gordon Таи, используя текущий API с помощью AmazonDynamoDBClientBuilder это выглядит :

AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard() 
    .withCredentials(new EnvironmentVariableCredentialsProvider()) 
    .withRegion(Regions.US_EAST_1) 
    .build(); 
DynamoDB dynamoDB = new DynamoDB(client);