Как подключиться к dockerised MongoDb из AWS SAM Lambda, написанного в Node.js 12 с Typescript? - PullRequest
0 голосов
/ 17 января 2020

Я хочу подключиться к образу 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. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...