2015-08-28 172 views
4

有人能告訴我如何訪問AWS Lambda函數中的AWS憑證嗎?AWS Lambda自定義觸發器

我已經在互聯網上徹底搜索過,但還沒有找到任何幫助過我的東西。

我用Java編寫函數。我想我應該可以使用HandleRequest方法中的上下文對象訪問憑據。

如果有幫助,我想調用DynamoDB客戶端並將記錄上載到數據庫。

+0

爲什麼不直接嘗試不查找任何憑據?你已經在AWS上運行了,因此它應該推斷你用來連接lambda的那個,所以它應該可以工作 – gerosalesc

+0

你的意思就是調用。 DynamoDbClient client = new dynamoDbClient();然後是正常的東西。真的,這很容易嗎?你能證實這一點嗎? –

+0

據我現在應該工作,但還沒有嘗試過,在過去 – gerosalesc

回答

3

我最近自己也遇到了同樣的問題。 在我看來,這當然是AWS的Lambda文檔中的一個盲點。

這段代碼在Java中應該爲你工作,假設你正在使用AWS SDK的Java文檔API:

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

主要外賣是使用EnvironmentVariableCredentialsProvider訪問所需的憑據來訪問你的其他AWS Lambda容器內的AWS資源。 Lambda容器隨環境變量一起提供證書,這足以檢索它們。

注意:這將創建一個只能看到默認區域中的資源的DynamoDB實例。要創建一個特定的區域,用這個(假設你要訪問DynamoDB的在AP-東北1區):

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

是。就是這樣。謝啦! –

2

您的Lambda函數的權限由其執行的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而不是'DynamoDB'連接的'aws-sdk'。 – kixorz

0

添加到@Gordon泰的回答,用當前API使用AmazonDynamoDBClientBuilder這看起來像:

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