Я хочу подключиться к образу MongoDb (v 4.2) в контейнере docker из базы c AWS лямбда (записано в Nodejs 12 с Typescript) как часть основы c AWS SAM (v 0.39.0) app.
До сих пор я читал эти темы
Как подключиться к MongoDB с помощью Node.js, написанным на TypeScript?
Подключение от AWS Lambda к MongoDB
, но не удалось установить sh соединение с базой данных: (
В этом витрина репо Я создал свою базовую c настройку, включающую в себя:
docker -compose.yml для экземпляра контейнерной базы данных
version: "3.1"
services:
database:
image: mongo:4.2
restart: always
ports:
# Host : Container
- '27017:27017'
environment:
MONGO_INITDB_DATABASE: urls
MONGO_INITDB_ROOT_USERNAME: potrebitel
MONGO_INITDB_ROOT_PASSWORD: parola
app.ts с исходным кодом моей лямбда-функции
import { MongoClient } from "mongodb";
let response;
exports.lambdaHandler = async () => {
try {
const url = "mongodb://potrebitel:parola@localhost:27017";
console.log("about to establish a connection...");
const client: MongoClient = await MongoClient.connect(url, { useUnifiedTopology: true });
console.log(client);
response = {
statusCode: 200,
body: JSON.stringify({
message: "Successful connection",
client,
}),
};
} catch (err) {
console.log(err);
return err;
}
return response;
};
и пакета. json с лямбда-зависимостями и сценариями выполнения
{
"name": "hello_world",
"version": "1.0.0",
"description": "hello world sample for NodeJS",
"main": "app.js",
"repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs",
"author": "SAM CLI",
"license": "MIT",
"dependencies": {
"@types/mongodb": "^3.3.14",
"axios": "^0.18.0",
"mongodb": "^3.5.0"
},
"scripts": {
"start": "npm run db:destroy && npm run build && npm run db:init && npm run local:invoke",
"build": "npm run lint && tsc && cd ..; sam build",
"lint": "tslint -c ../tslint.json --project ../ --fix",
"local:invoke": "cd ..; sam local invoke HelloWorldFunction",
"db:init": "docker-compose up -d && sleep 2s",
"db:destroy": "docker-compose down",
"test": "mocha tests/unit/"
},
"devDependencies": {
"chai": "^4.2.0",
"mocha": "^6.1.4",
"tslint": "^5.20.1",
"typescript": "^3.7.4"
}
}
Когда я выполняю лямбду локально с npm start
, тайм-аут без ошибок
Invoking app.lambdaHandler (nodejs12.x)
Fetching lambci/lambda:nodejs12.x Docker container image......
Mounting /home/ubuntu/Projects/codebase-2020-01/sam-lambda-local-mongodb/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container
START RequestId: 328e3fb0-fe72-1bb1-2e6c-7b3e311110c6 Version: $LATEST
2020-01-17T08:05:38.298Z 328e3fb0-fe72-1bb1-2e6c-7b3e311110c6 INFO about to establish a connection to MongoDb...
Function 'HelloWorldFunction' timed out after 3 seconds
При проверке журналов контейнера MongoDb (docker container logs sam-lambda-local-mongodb_database_1
) я не вижу попытки подключения.
2020-01-17T08:05:35.643+0000 I NETWORK [initandlisten] Listening on /tmp/mongodb-27017.sock
2020-01-17T08:05:35.643+0000 I NETWORK [initandlisten] Listening on 0.0.0.0
2020-01-17T08:05:35.643+0000 I NETWORK [initandlisten] waiting for connections on port 27017
2020-01-17T08:05:35.643+0000 I SHARDING [LogicalSessionCacheReap] Marking collection config.transactions as collection version: <unsharded>
2020-01-17T08:05:36.000+0000 I SHARDING [ftdc] Marking collection local.oplog.rs as collection version: <unsharded>
У меня нет проблем с доступом к базе данных при выполнении mongo cli
mongo mongodb://potrebitel:parola@localhost:27017
Буду признателен за идеи по устранению этой проблемы. Спасибо!
ОБНОВЛЕНИЕ
В Подключение к mongodb в docker из приложения узла в AWS SAM предполагает, что «Возможно, решение будет указать сеть при запуске контейнера mon go, а также среду SAM. "