質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

2294閲覧

AWS:LambdaにデプロイしたExpressにてDocumentDB接続

webo

総合スコア0

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2021/02/10 01:21

前提・実現したいこと

API GatewayにアクセスをLambdaにデプロイしたExpressにてDocumentDB接続してCRUD操作を行いたいのですができなくて困っております。

AWS環境

  • API Gateway
  • Lambda
  • DocumentDB

API Gateway → Lambda → DocumentDBで

Deploy

Serverless Framework
(Lambda + API Gatewayのデプロイ)

参考サイト
下記、Node.jsを参考にしています。
https://docs.aws.amazon.com/documentdb/latest/developerguide/connect_programmatically.html

該当のソースコード

handler.js

const serverless = require('serverless-http'); const express = require('express'); const app = express(); const MongoClient = require('mongodb').MongoClient, f = require('util').format, fs = require('fs'); app.get('/users/', function (req, res) { var ca = [fs.readFileSync("./rds-combined-ca-bundle.pem")]; var client = MongoClient.connect( 'mongodb://XXXXXX:YYYYY@xxxxxx.zzzzzz.ap-northeast-1.docdb.amazonaws.com:27017', { useNewUrlParser: true, sslValidate: true, sslCA: ca }, function(err, client) { if(err) throw err; // Specify the database to be used db = client.db('dbname'); // Specify the collection to be used col = db.collection('users'); //Insert a single document col.insertOne({'hello':'Amazon DocumentDB'}, function(err, result){ //Find the document that was previously written col.findOne({'hello':'Amazon DocumentDB'}, function(err, result){ //Print the result to the screen console.log(result); //Close the connection client.close(); }); }); }); res.send(client); }); module.exports.main = serverless(app);
  • mongodb://XXXXXX:YYYYY@〜はDocumentDBに記載のものを入れております。

package.json

{ "name": "app-api", "version": "1.0.0", "description": "", "main": "handler.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "assert": "^2.0.0", "express": "^4.17.1", "mongodb": "^3.6.4", "mongoose": "^5.11.15", "serverless-http": "^2.7.0", "utils": "^0.3.1" }, "devDependencies": { "eslint": "^7.19.0" } }

表示結果

res.send(client);では何も入って来なく、実際のdocumentDBのMongoDBに接続してもデータは入っていない状況です。

大変申し訳ございませんが、ご教示いただけますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suama

2021/02/12 12:15

「実際のdocumentDBのMongoDBに接続してもデータは入っていない」とのことですが、 Lambdaのログや、CloudWatchのログには、なにか接続エラーの情報などは出ていませんか? また、documentDB (MongoDB) 側に、dbnameというデータベースとusersというコレクションは作成されていますでしょうか?
guest

回答1

0

自己解決

Lambdaのセキュリティーグループの指定がデプロイを一度removeした際に外れたことが原因でした、凡ミスで申し訳ありません。

投稿2021/03/11 11:53

webo

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問