вам нужно запустить команду с параметром docker-network, например sam local start-api --docker-сеть лямбда-локальная

троил пару 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

но все равно получаю ту же ошибку

Сэм местный распечатывает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 и в веб-оболочке

Ответы на вопрос(3)

Ваш ответ на вопрос