有人能告訴我如何訪問AWS Lambda函數中的AWS憑證嗎?AWS Lambda自定義觸發器
我已經在互聯網上徹底搜索過,但還沒有找到任何幫助過我的東西。
我用Java編寫函數。我想我應該可以使用HandleRequest
方法中的上下文對象訪問憑據。
如果有幫助,我想調用DynamoDB客戶端並將記錄上載到數據庫。
有人能告訴我如何訪問AWS Lambda函數中的AWS憑證嗎?AWS Lambda自定義觸發器
我已經在互聯網上徹底搜索過,但還沒有找到任何幫助過我的東西。
我用Java編寫函數。我想我應該可以使用HandleRequest
方法中的上下文對象訪問憑據。
如果有幫助,我想調用DynamoDB客戶端並將記錄上載到數據庫。
我最近自己也遇到了同樣的問題。 在我看來,這當然是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()));
是。就是這樣。謝啦! –
您的Lambda函數的權限由其執行的IAM角色控制。將Dynamo PutItem權限添加到當前角色,或爲此創建新角色。
給予權限角色後,你不需要編寫特殊的代碼來處理憑證,只需使用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表中。
我建議使用https://github.com/awslabs/dynamodb-document-js-sdk而不是'DynamoDB'連接的'aws-sdk'。 – kixorz
添加到@Gordon泰的回答,用當前API使用AmazonDynamoDBClientBuilder這看起來像:
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withCredentials(new EnvironmentVariableCredentialsProvider())
.withRegion(Regions.US_EAST_1)
.build();
DynamoDB dynamoDB = new DynamoDB(client);
爲什麼不直接嘗試不查找任何憑據?你已經在AWS上運行了,因此它應該推斷你用來連接lambda的那個,所以它應該可以工作 – gerosalesc
你的意思就是調用。 DynamoDbClient client = new dynamoDbClient();然後是正常的東西。真的,這很容易嗎?你能證實這一點嗎? –
據我現在應該工作,但還沒有嘗試過,在過去 – gerosalesc