Я ищу, чтобы добавить состояние в приложение узла безсерверной инфраструктуры, работающее локально.Я наткнулся на официальный образ докера DynamoDb, я хотел бы использовать безсерверный фреймворк с этим экземпляром DynamodB, работающим на докере, выставленном на localhost: 8000 без использования версии SLS для установки DynamodB.
Я пытался использовать его с обычнымnodejs aws-sdk с конечной точкой и регионом, настроенными на локальный.Новая таблица пользователей уже создана, и база данных доступна через aws-cli --endpoint localhost: 8000, но не может получить доступ к экземпляру Dynamodb через nodejs aws-sdk
// server.js
const AWS = require('aws-sdk');
AWS.config.update({
region: 'localhost',
endpoint: "http://127.0.0.1:8000"
});
const ddb = new AWS.DynamoDB.DocumentClient();
const params = {
"TableName":tableName,
"IndexName":"email-index",
"KeyConditions":{
"email":{
"ComparisonOperator": "EQ",
"AttributeValueList": [{"S":email}]
}
}
};
ddb.query(params, (err,data) => {
console.log('query', data); // returns query null
}
// handler.js
const server = require('./server');
const http = require('serverless-http');
module.exports.client = http(server);
// serverless.yml
provider:
name: aws
runtime: nodejs10.16.0
region: ca-central-1
profile: default
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:DescribeTable
- dynamodb:Query
- dynamodb:Scan
- dynamodb:CreateTable
- dynamodb:ListTables
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: "arn:aws:dynamodb:ddblocal:000000000000:table/user"
plugins:
- serverless-offline
functions:
client:
handler: handler.client
events:
- http: GET /
- http: 'GET /{param+}'
- http:
path: /signin
method: post
cors: true
- http:
path: /signup
method: post
cors: true
Я ожидал получить ответ от dynamicodb в Docker Local, но aws-sdk не можетподключиться к нему.Вышеуказанные http события идут в express.js, который хорошо работает.