SERVERLESS FRAMEWORK를 사용해 보았습니다.

6748 단어 AWSLambdaserverless
자주 AWS Lambda, API Gateway 등의 소위 서버리스 아키텍처를 만날 기회가 있고, SERVERLESS FRAMEWORK를 만져 보았으므로 그 소감을.

Node.js 버전은 v4.2.4 이상이 필요합니까?



아무래도 Node.js v4.2.3에서 명령을 실행하면 설치에 필요한 파일이 들어 있지 않은 것 같습니다. 그래서 도입용의 동영상에서는 v4.2.4에서 커맨드를 실시하고 있었으므로, Node.js의 버젼이 낡은 경우는 버젼 업이 필요할 것 같다.

움직여 보자



aws configure에서 먼저 자격 증명을 설정합니다.
$ aws configure
AWS Access Key ID [****************xxxx]: 
AWS Secret Access Key [****************xxxx]: 
Default region name [ap-northeast-1]: 
Default output format [json]: 

설정이 완료되면 명령으로 프로젝트를 생성해 봅니다.
$ serverless create --template aws-nodejs
Serverless: Creating new Serverless service...
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.0.0-beta.1.1
 -------'

Serverless: Successfully created service in the current directory
Serverless: with template: "aws-nodejs"
Serverless: NOTE: Please update the "service" property in serverless.yml with your service name

그러면 다음 파일이 완성됩니다.
event.json
handler.js
serverless.env.yml
serverless.yml

내용은 샘플의 Node.js에 의한 AWS Lambda의 설정군이 됩니다. 이것을 배포해 보겠습니다. hello라는 함수가 완성되고 있으므로, 그것도 클라이언트로부터 실행해 보겠습니다.

handler.js
'use strict';

// Your first function handler
module.exports.hello = (event, context, cb) => cb(null,
  { message: 'Go Serverless v1.0! Your function executed successfully!', event }
);

// You can add more handlers here, and reference them in serverless.yml
$ serverless deploy
Serverless: Creating Stack...
Serverless: Checking stack creation progress...
..............
Serverless: Stack successfully created.
Serverless: Zipping service...
Serverless: Uploading .zip file to S3...
Serverless: Updating Stack...
Serverless: Checking stack update progress...
..
Serverless: Deployment successful!

S3에 zip 파일이 업로드된 것 같습니다. 에서 설정이 누락되었지만 serverless.env.yml 파일에는 기본적으로 리전이 us-east-1로 설정되어 있으므로 여기를 변경하지 않으면 리전이 평상시 사용하고 있는 ap-northeast- 1과는 달라 버리는군요. 이것은 주의 포인트.
그래서 무사히 Lambda에도 등록되었습니다. 실행해 봅시다.


$ serverless invoke --function hello
{
    "message": "Go Serverless v1.0! Your function executed successfully!",
    "event": {}
}

무사히 실행할 수 있었던 것 같습니다. CloudWatch에도 기록이 남아있었습니다.
START RequestId: 20211702-621a-11e6-be4a-************ Version: $LATEST 
END RequestId: 20211702-621a-11e6-be4a-************ 
REPORT RequestId: 20211702-621a-11e6-be4a-************  Duration: 2.84 ms   Billed Duration: 100 ms Memory Size: 1024 MB    Max Memory Used: 35 MB  

덧붙여서 커맨드의 일람을 보았습니다만, 한 대로 관리하기 위한 커멘드는 갖추고 있는 것 같네요.
$ serverless

Commands
* Serverless documentation: http://docs.serverless.com
* You can run commands with "serverless" or the shortcut "sls"
* Pass "--help" after any <command> for contextual help

create ................... Create new Serverless Service.
deploy ................... Deploy Service.
deploy function .......... Deploys a single function from the service
info ..................... Displays information about the service.
invoke ................... Invokes a deployed function.
logs ..................... Outputs the logs of a deployed function.
remove ................... Remove resources.
tracking ................. Enable or disable usage tracking.

Plugins
AwsCompileApigEvents, AwsCompileFunctions, AwsCompileS3Events, AwsCompileSNSEvents, AwsCompileScheduledEvents, AwsDeploy, AwsDeployFunction, AwsInfo, AwsInvoke, AwsLogs, AwsRemove, Create, Deploy, Info, Invoke, Logs, Package, Remove, Tracking

요약



AWS Lambda의 함수를 관리하는 프레임워크로서는, 도입의 간편함이나 명령의 간이함이 사용하기 쉽다고 생각했습니다. 그리고는 DryRUN 근처가 옵션으로 붙어 오면 로컬 개발을 하고 있어서 기쁠까, 라는 느낌입니다. (아무래도 Github상에서는 추가의 방향으로 이야기가 진행되고 있는 것 같습니다만) 그 밖에도 서버리스 아키텍쳐를 지지하는 프레임워크는 있으므로, 그쪽에 패배와 개발을 노력해 주었으면 합니다.



그건 그렇고, 기본 us-east-1 이외에 배포하려고하면 어떻게 될지 시도해 보았습니다. ap-northeast-1에 배포를 시도합니다.

먼저 serverless.env.yml 파일의 내용을 다시 씁니다.

serverless.env.yml
vars:
stages:
  dev:
    vars:
    regions:
      ap-northeast-1:
        vars:

regions를 다시 작성했습니다. 배포를 시도하지만 아무래도 인수없이 오류가 발생하는 것 같습니다.
$ serverless deploy

  Serverless Error ---------------------------------------

     Region "us-east-1" doesn't exist in stage "dev"

  Get Support --------------------------------------------
     Docs:          v1.docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues

기본이 아닌 리전에 업로드하고 싶다면 --region 이라는 인수가 필요합니다. 이렇게 하면 앱로드되었습니다.
$ serverless deploy --region ap-northeast-1
Serverless: Creating Stack...
Serverless: Checking stack creation progress...
...............
Serverless: Stack successfully created.
Serverless: Zipping service...
Serverless: Uploading .zip file to S3...
Serverless: Updating Stack...
Serverless: Checking stack update progress...
..
Serverless: Deployment successful!

이것은 GitHub의 QuickStart에도 올려두고 싶을지도.

좋은 웹페이지 즐겨찾기