AWSラムダのPostgres DBへの接続:その1
15211 ワード
パート0 :プリリクサイト
Serverless関数は、そのコアで、非常に簡単です.構成は最大のバグであることを終了します.それでも、このチュートリアルではいくつか考えます.
パート1 : Serverless Frameworkによるプロジェクトの設定
プロジェクトの足場作り
ターミナルで実行しているサーバーレスプロジェクトを足場にするには、次の手順に従います.
$ serverless create —template aws-nodejs —path sls-new-project
これはフォルダと呼ばれるフォルダを作成しますsls-new-project
それはちょうど2つのファイルを含んでいます.handler.js
関数の論理を持ち、serverless.yaml
これには、すべての設定が含まれます.非常に最小限を開始します.
ローカルデータベースの設定と順序付け
Sequgizeと呼ばれるPostgresとオブジェクトリレーショナルマッパー(ORM)を使いたい.それではNPMを介してプロジェクトにこれらの依存関係をインストールしましょう.
ファーストnpm init
作成するpackage.json
我々のプロジェクトで.次に、いくつかの依存関係のインストールを開始します.
npm install --save pg
npm install --save pg-hstore
npm install --save sequelize
npm install -—save-dev sequelize-cli
私たちが使用したいいくつかの移行を実行するのでsequelize-cli
これらの移行を生成する.私たちは走ることができるnpx sequelize-cli init
これは、どのように各環境のデータベースに接続するには、CLIの指示を移動移動フォルダ、設定を作成し、モデルのフォルダをモデル化し、苗木.初期化のための完全な命令を得ることができますsequelize-cli
here .
あなたがちょうど作成した内容を読むならばconfig/config.json
MySQL用に設定されていることがわかります.変更するにはほとんど
$ serverless create —template aws-nodejs —path sls-new-project
npm install --save pg
npm install --save pg-hstore
npm install --save sequelize
npm install -—save-dev sequelize-cli
postgres
そしてそれらを保存します.username
値development
お使いのデバイスのルートユーザーの名前に.sls-starter
またはあなたのプロジェクトの名前に関連する何か.我々はまだモデルを持っていないが、我々はすぐにそれらを作成を開始します.しかし、その前の最後のステップでは、ローカルデータベースを作成しなければなりません
npx sequelize-cli db:create
. 失敗した場合は、おそらく
config/config.json
ファイル.ユーザーがデバイス上のルートユーザーであることを確認するには、上記の手順に従って、データベース名は一意ですし、データベースの正しいタイプを使用しているpostgres
. 今のところ、以下の値を変更する必要がありますdevelopment
.参考のために、ここに私のです
config/config.json
{
"development": {
"username": "dengel",
"password": null,
"database": "sls-starter",
"host": "127.0.0.1",
"dialect": "postgres"
},
"test": {
"username": "dengel",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "postgres"
},
"production": {
"username": "dengel",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "postgres"
}
}
成功するとメッセージが表示されます.Sequelize CLI [Node: 10.16.0, CLI: 6.2.0, ORM: 6.3.5]
Loaded configuration file "config/config.json".
Using environment "development".
Database sls-starter created.
上記のリンクもモデルを作成することができますこのチュートリアルでは、データベース接続を正常にすることができます.この時点でプロジェクトファイル構造は次のようになります.
アプリケーションのローカルデータベースへの接続
さて、我々は多くのことをインストールしました、そして、現在、若干の接続論理を書く時間です.
私たちは別のファイルで
connection.js
, プロジェクトのルートで作成します.const { Sequelize } = require('sequelize');
const pg = require('pg')
const sequelize = new Sequelize('sls-starter', 'dengel', '', {
dialect: 'postgres',
dialectModule: pg,
host: '127.0.0.1'
})
module.exports = sequelize
上のコードについてはいくつか注意してください.dbname
, username
, password
( NULLです)db.endpoint.url
で設定します.これは良い習慣ではなく、次のポストの環境に基づいてこのダイナミックを作るために、これを改良して、環境変数を使う方法を見ます.pg
Postgresnode_module
ここで、そのオブジェクトをdialectModule
オプションSequelize
コンストラクタ.これはラムダ関数、シーケンス化、およびPostgresに調和して動作するために必要です.handler.js
.すべて削除
serverless create
コマンドは、このファイルの初期に作成し、新鮮なスタートしましょう.関数のHTTPトリガを使用する予定ですので、以下のパッケージをインストールします.
npm install —-save serverless-http
npm install --save express
それから、我々の中で彼らを必要としますhandler.js
'use strict';
const db = require('./connection.js');
const serverless = require('serverless-http');
const express = require('express');
const app = express();
そして今、我々はデータベース接続をテストするための関数を追加することができます.app.get('/test', async function (req, res) {
let msg;
try {
await db.authenticate();
msg = 'Connection successful'
} catch (error) {
msg = 'Unable to connect to the database:'
console.error('Unable to connect to the database:', error);
}
return res.send(msg)
})
module.exports.index = serverless(app)
我々はほとんど機能をテストする準備ができている.物事をテストすることになると、最も重要な要因の一つは、フィードバックループをスピードアップする方法を見つけることです.もし私たちの関数をテストする唯一の方法がそれらを展開し、彼らが生産上で動作するかどうかを見ていたならば、それは恥です.だからこそ、いくつかのプラグインをインストールするつもりです.
フィードバックループのスピードアップ
Serverless Frameworkプラグインを使用して開発を支援します.
serverless-offline
フィードバックループ(重要)をスピードアップするためにローカルに機能をテストするにはserverless-sequelize-migrations
これは私たちの移行を取り、私たちのための生産環境でそれらを実行します.我々は、プロジェクトの少し後にそれを使用します.これらはNPMパッケージではありませんが、serverless
CLIは、我々の中で言及しますserverless.yaml
. まず最初に、プロジェクトルートから次のコマンドを実行します.
serverless plugin install —name serverless-offline
serverless plugin install —name serverless-sequelize-migrations
それからあなたのserverless.yaml
まだ触れていないファイルです.コメントアウトされるすべての異なるオプションを見ることができます.私は、現在我々にとって重要であるものにだけ触れます.
あなたは
server
and provider
コンフィギュレーション、そして今私たちはplugins
年代の最高水準のセクションyaml
.plugins:
- serverless-offline
- serverless-sequelize-migrations
我々はまた、の詳細を変更することができますfunctions
セクションでは、より正確に何が現在我々のものであるかについて反映しますhandler.js
:functions:
app:
handler: handler.index
events:
- http: ANY /
- http: 'ANY {proxy+}'
これは、我々が最終的にそれを展開するとき、どのようなオプションがローカルで利用できるかについて、そして、どのように我々の機能にアクセスするかについて、ServersのどのようにAWSラムダを構成するかについて説明しますhandler
ファイル名を参照してください.index
年にエクスポートしたものを参照しますmodule.exports
.今、それが働いているかどうかチェックする時間です.
局所煙試験と次のステップ
煙テストだけで物事が期待通りに動作しているかどうかを確認する簡単なテスト.我々の唯一の機能のロジックは
db.authenticate()
関数とprintが正常に接続するかどうかを出力します.テストするには
sls offline
これで、我々のServerlessな関数のローカルモックを開始します.私たちは訪れることができますhttp://localhost:3000/dev/test 関数が成功したかどうかを確認します.そして、すべてが正常に続くならば、あなたは「接続成功」を見なければなりません、あるいは、機能の中のどんな成功メッセージもブラウザにあったでしょう.しかし、あなたが走るならば
sls deploy
この時点でこれを試してみてくださいReference
この問題について(AWSラムダのPostgres DBへの接続:その1), 我々は、より多くの情報をここで見つけました https://dev.to/dengel29/connecting-aws-lambda-to-a-postgres-db-part-1-3pfcテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol