Я настроил пару API-шлюз /AWS-лямбда с помощью AWS sam local и подтвердил, что могу успешно вызвать ее после запуска
sam local start-api
Затем я добавил локальный экземпляр DynamodB в Docker-контейнер и создал на нем таблицу с помощью AWS Cli
Но, добавив код в лямбду для записи в экземпляр Dynamodb, я получаю:
2018-02-22T11:13: 16.172Z ошибка ed9ab38e-fb54-18a4-0852-db7e5b56c8cd: не удалось записать в таблицу: {"message": "connect ECONNREFUSED 0.0.0.0:8000","code":"NetworkingError", "ERRNO": "ECONNREFUSED", "системный вызов": "подключиться", "адрес": "0.0.0.0", "порт": 8000, "регион": "ес-запад-2", "имя хоста": "0,0.0.0 "," retryable ": true," time ":" 2018-02-22T11:13: 16.165Z "} событие записи из команды: {" name ":" test "," geolocation ":" xyz "," тип ":" createDestination "} END RequestId: ed9ab38e-fb54-18a4-0852-db7e5b56c8cd
В Интернете я увидел, что вам может понадобиться подключиться к той же сети докеров, поэтому я создал сеть сетевых docker network create lambda-local
и изменил мои команды запуска на:
sam local start-api --docker-network lambda-local
а также
docker run -v "$PWD": /dynamodb_local_db -p 8000:8000 --network=lambda-local cnadiminti/dynamodb-local:latest
но все равно получаю ту же ошибку
sam local печатает 2018/02/22 11:12:51 Connecting container 98b19370ab92f3378ce380e9c840177905a49fc986597fef9ef589e624b4eac3 to network lambda-local
Я создаю DynamodBclient с помощью:
const AWS = require('aws-sdk')
const dynamodbURL = process.env.dynamodbURL || 'http://0.0.0.0:8000'
const awsAccessKeyId = process.env.AWS_ACCESS_KEY_ID || '1234567'
const awsAccessKey = process.env.AWS_SECRET_ACCESS_KEY || '7654321'
const awsRegion = process.env.AWS_REGION || 'eu-west-2'
console.log(awsRegion, 'initialising dynamodb in region: ')
let dynamoDbClient
const makeClient = () => {
dynamoDbClient = new AWS.DynamoDB.DocumentClient({
endpoint: dynamodbURL,
accessKeyId: awsAccessKeyId,
secretAccessKey: awsAccessKey,
region: awsRegion
})
return dynamoDbClient
}
module.exports = {
connect: () => dynamoDbClient || makeClient()
}
и проверка динамбклиента мой код создает шоу
DocumentClient {
options:
{ endpoint: 'http://0.0.0.0:8000',
accessKeyId: 'my-key',
secretAccessKey: 'my-secret',
region: 'eu-west-2',
attrValue: 'S8' },
service:
Service {
config:
Config {
credentials: [Object],
credentialProvider: [Object],
region: 'eu-west-2',
logger: null,
apiVersions: {},
apiVersion: null,
endpoint: 'http://0.0.0.0:8000',
httpOptions: [Object],
maxRetries: undefined,
maxRedirects: 10,
paramValidation: true,
sslEnabled: true,
s3ForcePathStyle: false,
s3BucketEndpoint: false,
s3DisableBodySigning: true,
computeChecksums: true,
convertResponseTypes: true,
correctClockSkew: false,
customUserAgent: null,
dynamoDbCrc32: true,
systemClockOffset: 0,
signatureVersion: null,
signatureCache: true,
retryDelayOptions: {},
useAccelerateEndpoint: false,
accessKeyId: 'my-key',
secretAccessKey: 'my-secret' },
endpoint:
Endpoint {
protocol: 'http:',
host: '0.0.0.0:8000',
port: 8000,
hostname: '0.0.0.0',
pathname: '/',
path: '/',
href: 'http://0.0.0.0:8000/' },
_clientId: 1 },
attrValue: 'S8' }
Должна ли эта настройка работать? Как мне заставить их говорить друг с другом?
---- редактировать ----
Основываясь на разговоре в Твиттере, стоит упомянуть (возможно), что я могу взаимодействовать с DynamodB в CLI и в веб-оболочке.