Тайм-аут при попытке локального доступа к DynamoDB

Я могу получить доступ к DynamoDB на AWS с помощью своего кода. Я могу получить доступ к локальной DynamoDB с помощью CLI. Но я не могу заставить их поговорить друг с другом.

# deploying dynamodb
docker run \
    --detach \
    --tty \
    --interactive \
    --publish 8000:8000 \
    --name lokal_dynamodb amazon/dynamodb-local

# deploying Go with SAM
sam local start-api \
    --template sam/template.yaml \
    --region eu-central-1 \
    --profile default

Создание сеанса

sess, err := session.NewSessionWithOptions(session.Options{
    // Provide SDK Config options, such as Region.
    Config: aws.Config{
        Endpoint: aws.String("http://localhost:8000/"),
        Region:   aws.String("eu-central-1"),
    },
})
if err != nil {
    logger.Println(err)
    return nil
}

Ошибка возвращена

unction 'ShopFunction' timed out after 20 seconds
Function returned an invalid response (must include one of: body, headers, multiValueHeaders or statusCode in the response object). Response received: 
2019-09-21 21:22:03 127.0.0.1 - - [21/Sep/2019 21:22:03] "GET /shop/f10b7ab5-9508-4cfd-acb2-efb2299dd460 HTTP/1.1" 502 -

person James Burke    schedule 21.09.2019    source источник


Ответы (1)


По какой-то причине лямбды SAM не могут подключиться к локальному хосту DynamoDB, поэтому вам нужно создать петлевой IP-адрес, на который они ссылаются для доступа к нему.

ifconfig lo0 alias 172.16.123.1

Затем обновите конфигурацию сеанса до:

sess, err := session.NewSessionWithOptions(session.Options{
    // Provide SDK Config options, such as Region.
    Config: aws.Config{
        Endpoint: aws.String("http://172.16.123.1:8000/"),
        Region:   aws.String("eu-central-1"),
    },
})
if err != nil {
    logger.Println(err)
    return nil
}

https://github.com/awslabs/aws-sam-cli/issues/102#issuecomment-326177151

person James Burke    schedule 22.09.2019