AWS Lambda를 Postgres DB에 연결: 섹션 1
15367 단어 lambdaserverlesspostgresaws
섹션 0: 사전 조정 장소
서버 기능이 없는 핵심은 매우 간단하다.구성이 결국 가장 큰 문제가 되었습니다.그럼에도 불구하고 이 강좌에서 나는 몇 가지 일을 가정했다.
섹션 1: 서버 없는 프레임워크를 사용하여 항목 설정
프로젝트 비계 를 세우다
터미널에서 실행되는 서버 없는 항목을 구축하려면 다음과 같이 하십시오.
$ serverless create —template aws-nodejs —path sls-new-project
이것은 두 개의 파일만 포함하고 sls-new-project
은 함수 논리를 포함하며 handler.js
은 모든 설정을 포함하는 serverless.yaml
이라는 폴더를 만들 것입니다.시작은 간단했다.
로컬 데이터베이스 설정 및 속편
Postgres와 Sequelize라는 객체 관계 매핑기(ORM)를 사용하고 싶습니다.npm를 통해 이 의존 항목을 프로젝트에 설치합니다.
우선 저희 프로젝트에서 npm init
을 만듭니다.그리고 몇 가지 의존 항목을 설치하기 시작합니다.
npm install --save pg
npm install --save pg-hstore
npm install --save sequelize
npm install -—save-dev sequelize-cli
일부 마이그레이션을 실행할 것이기 때문에, package.json
을 사용하여 이러한 마이그레이션을 생성하기를 희망합니다.우리는 sequelize-cli
을 실행할 수 있습니다. 이것은migrations 폴더를 만들 것입니다. config는cli가 모든 환경의 데이터베이스와 각종 모델의 모델 폴더와 파종기에 연결하는 방법을 알려 줍니다.npx sequelize-cli init
here을 초기화하는 완전한 설명을 얻을 수 있습니다.
방금 만든 sequelize-cli
의 내용을 읽으면 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
config/config.json
으로 변경하고 저장합니다.postgres
의 username
값을 장치의 루트 사용자 이름으로 변경합니다.development
또는 프로젝트 이름과 관련된 이름으로 변경하십시오.우리는 아직 어떤 모델도 없지만, 우리는 곧 그것들을 만들기 시작할 것이다.그러나 그 전의 마지막 단계에서 우리는 로컬 데이터베이스를 만들어야 한다. 명령
sls-starter
을 사용해야 한다.실패하면
npx sequelize-cli db:create
파일의 일부 내용을 변경하지 않았을 수도 있습니다.상기 절차에 따라 사용자가 장치의 루트 사용자이고 데이터베이스 이름이 유일하며 정확한 유형의 데이터베이스 config/config.json
을 사용했는지 확인하십시오.현재 postgres
의 값만 변경하면 됩니다.참고로 이것은 나의
development
{
"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.
위의 링크도 모형을 만드는 데 도움을 줄 수 있다.본 강좌에서 우리는 이 점을 끝까지 남겨 두고 우선 우리가 데이터베이스 연결을 성공적으로 구축할 수 있도록 간단하게 확보할 것이다.프로젝트 파일 구조는 다음과 같습니다.
응용 프로그램에 연결된 로컬 데이터베이스
좋아, 우리는 이미 많은 물건을 설치했으니, 이제는 연결 논리를 작성할 때가 되었다.
config/config.json
이라는 단독 파일에서 이 작업을 완성할 것입니다. 프로젝트의 루트 디렉터리에 이 파일을 만들 것입니다.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
위의 코드에 대한 자세한 내용은 다음과 같습니다.구성에서
connection.js
, dbname
, username
, password
(비어 있음) 및 db.endpoint.url
을 하드코딩했습니다.이것은 좋은 실천이 아니다. 우리는 다음 글에서 이 점을 어떻게 개선하고 환경 변수를 사용하여 환경을 바탕으로 동태적으로 하는지를 연구할 것이다.pg
postgresnode_module
이 필요하며, 이 대상을 dialectModule
옵션으로 Sequelize
구조 함수에 전달합니다.이것은 Lambda 함수, 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-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
및 provider
구성을 유지할 수 있습니다. 현재 plugins
의 최고 수준에 yaml
부분을 추가합니다.plugins:
- serverless-offline
- serverless-sequelize-migrations
또한 functions
의 세부 사항을 변경하여 handler.js
의 내용을 더욱 정확하게 반영할 수 있습니다.functions:
app:
handler: handler.index
events:
- http: ANY /
- http: 'ANY {proxy+}'
이것은 Serverless가 AWS Lambda를 최종적으로 배치할 때 어떻게 설정하는지, 로컬에서 사용할 수 있는 옵션, 그리고 우리의 함수에 접근하는 방법을 알려줍니다. (handler.index를 통해 handler
은 우리가 이름한 파일을 가리키고, index
은 우리가 module.exports
에서 내보낸 파일을 가리킵니다.)이제 그것이 작동하는지 검사할 때가 되었다.
국부 스모그 테스트 및 후속 절차
스모그 테스트는 단지 간단한 테스트일 뿐, 일이 예상대로 진행되는지 확인해 보자.우리의 유일한 함수 논리는 Sequelize의
db.authenticate()
함수를 실행하고 연결에 성공했는지 인쇄합니다.테스트를 위해서, 우리는
sls offline
을 실행할 것입니다. 이것은 현재 서버 함수가 없는 로컬 시뮬레이션을 시작합니다.우리는 http://localhost:3000/dev/test을 방문하여 우리의 기능이 성공했는지 확인할 수 있다.모든 것이 정확하게 실행된다면, 연결 성공이나 브라우저의 함수에 있는 성공 메시지를 볼 수 있을 것입니다.그러나
sls deploy
을 실행하고 생산에서 시험적으로 사용하면 실패합니다. 왜냐하면Reference
이 문제에 관하여(AWS Lambda를 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.)