AWS Lambda를 Postgres DB에 연결: 섹션 1

섹션 0: 사전 조정 장소


서버 기능이 없는 핵심은 매우 간단하다.구성이 결국 가장 큰 문제가 되었습니다.그럼에도 불구하고 이 강좌에서 나는 몇 가지 일을 가정했다.
  • 은 Javascript, Node, npm에 익숙합니다.전체 설치
  • AWS 계정Sign up for one, 만약 당신이 없다면.
  • 에 서버 프레임워크가 없습니다.서버 프레임워크가 없는 장점은 대량의 AWS 자원을 만들고 배치했다는 것입니다.그러나 이를 위해서는 자원에 접근할 수 있어야 하기 때문에 초기 설정이 필요하다.이를 위해 그들의 문서 I'll point you to the Serverless blog을 다시 작성하는 것보다
  • 섹션 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에 대해 구성된 것을 볼 수 있습니다.변화해야 할 일은 매우 적다.
  • 을 계속하여 config/config.json으로 변경하고 저장합니다.
  • 이외에 postgresusername 값을 장치의 루트 사용자 이름으로 변경합니다.
  • 이외에 데이터베이스 이름을 development 또는 프로젝트 이름과 관련된 이름으로 변경하십시오.
  • 이 구성은 CLI에만 데이터베이스에 액세스하는 방법을 알려주므로 애플리케이션에 데이터베이스에 액세스하는 방법도 알려야 합니다.다음 단계에서 우리는 단독 파일에서 이 동작을 실행할 것이다.
    우리는 아직 어떤 모델도 없지만, 우리는 곧 그것들을 만들기 시작할 것이다.그러나 그 전의 마지막 단계에서 우리는 로컬 데이터베이스를 만들어야 한다. 명령 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을 하드코딩했습니다.이것은 좋은 실천이 아니다. 우리는 다음 글에서 이 점을 어떻게 개선하고 환경 변수를 사용하여 환경을 바탕으로 동태적으로 하는지를 연구할 것이다.
  • pgpostgresnode_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 파일로 들어가세요.
    너는 주석된 모든 다른 옵션을 볼 수 있다.나는 지금 우리에게 중요한 일만 이야기하고 있다.serverprovider 구성을 유지할 수 있습니다. 현재 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을 실행하고 생산에서 시험적으로 사용하면 실패합니다. 왜냐하면
  • 저희는 생산 데이터베이스가 없습니다.
  • AWS Lambda는 추가 구성이 없으면 Postgres를 말할 수 없습니다.
  • 이것이 바로 우리가 중간에서 해야 할 일과 우리의 환경을 분리하는 것이다.

    좋은 웹페이지 즐겨찾기