使用serverless框架来尝试【无服务器架构】第1章 〜使用nodejs的模板编辑〜

在第1章中,我们将通过使用serverless框架来尝试【无服务器架构】,并使用nodejs的模板来进行编写。

故事概要

每年到了情人节的时候,我总是因为杉树花粉而身体状况糟透了。
我一边揉着发痒的眼睛,一边擤着鼻涕,拼命地写下这篇帖子。

加入公司已经有大约两年了。从这次开始,我想要连续发布一系列关于最近热门的“无服务器架构”的话题。

建议将其保存起来,因为以后很可能会根据请求更新。

我是某公司的首席技术官,但我认为与其一味地理论学习,不如通过掌握一些基本概念后加以实践来深化知识,这样学习效率更高。

不会刻意地强调正确的教育方式,而是试图帮助初学者能够稍微地理解所学内容,通过构建资料的方式。

以下是以如下的系列主题进行进展。

那么,这一次让我们再次开始吧!

首先

这种无服务器架构,顾名思义,是指没有服务器的架构。

比如在AWS中,甚至都不需要EC2实例,而是指的是利用事先准备好的功能服务(Function-as-a-Service)组合而成的架构。

有时也会被称为FaaS等,而且在AWS中也不断增加着无服务器系列的服务。

让我们尝试体验使用Serverless作为服务器框架的服务,结合AWS Lambda、AWS API Gateway和AWS DynamoDB等组件,来构建Serverless架构。

环境

苹果电脑环境

10.11.6

节点环境

$ nodebrew ls

v0.12.14
$ nodebrew install-binary v7.4.0
$ nodebrew ls
v0.12.14
v7.4.0

Python环境的中文释义及释义可能有以下选项:

1. Python环境 –
2. Python环境 –
3. Python环境 –

$ pyenv versions
  system
  2.7.12
$ pyenv install -v 3.5.2
$ eval "$(pyenv init -)"
$ pyenv shell 3.5.2
$ python --version
Python 3.5.2

AWSCLI环境

$ pip install awscli
$ aws --version
aws-cli/1.11.9 Python/2.7.10 Darwin/15.6.0 botocore/1.4.66

无服务器环境

$ npm install serverless -g
$ serverless --version
1.5.1

创建用于服务器测试的IAM

建立IAM

用户名: serverlesstest
访问类型: 通过程序访问

IAM_Management_Console.png

直接将现有政策附加

IAM_Management_Console.png
    • AWSLambdaFullAccess

 

    • IAMFullAccess

 

    • AmazonS3FullAccess

 

    • AmazonAPIGatewayAdministrator

 

    AWSCloudFormationReadOnlyAccess

制定自己的政策

策略名称:AWSCloudFormationCreateUpdateServiceOnlyAccess
策略概述:设置用于尝试无服务器功能所必需的策略。※请勿在生产环境中使用。

IAM_Management_Console.png

请点击画面上红框处的“创建独有政策”,
并将下列文字复制到政策文件中。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1449904348000",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateStack",
                "cloudformation:UpdateStack"
            ],
            "Resource": [
                "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxxxxxx:stack/*"
            ]
        }
    ]
}

输入「策略名称」、「说明」和「策略文档」后,将如下所示的画面显示出来。

IAM_Management_Console.png

当您点击创建策略后,请返回到IAM创建页面,点击“更新”,并选择复选框。
※如果进行搜索,应该会显示通过用户自定义管理创建的策略类型。

IAM_Management_Console.png
IAM_Management_Console.png
IAM_Management_Console.png

设置AWS CLI的新用户

因为逐个对credentials中的内容进行注释或取消注释太麻烦了,所以我选择根据每个AWS CLI配置文件来管理。

让我们使用档案名称“serverlesstest”来创建此次的配置文件。

ファイル備考~/.aws/config認証情報以外の情報(リージョンやフォーマットなど)~/.aws/credentials認証情報

创建AWS CLI配置

$ aws configure --profile serverlesstest
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

例)~ / .aws / config
例:~ / .aws / 配置文件

$ cat ~/.aws/config
[profile serverlesstest]
output = json
region = ap-northeast-1

例) ~/.aws/凭证

$ cat ~/.aws/credentials
[serverlesstest]
aws_access_key_id = XXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXX

使用服务器模板创建项目。

這次我們將從Node.js的模板開始創建。

$ serverless create --template aws-nodejs --provider aws --profile serverlesstest --path serverlesstest --verbose
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/Users/xxxxxxxxxxx/Documents/serverlesstest"
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.5.1
 -------'

Serverless: Successfully generated boilerplate for template: "aws-nodejs"

生成的文件

% ls ./serverlesstest
handler.js
serverless.yml

更改设置

设定部分包括“个人资料”、“阶段”、“地区”。

$ cd serverlesstest
$ vi serverless.yml

修改部分。

provider:
  name: aws
  runtime: nodejs4.3

请用中文将以下内容翻译成一种方式:

请你完成下列题目。

provider:
  name: aws
  runtime: nodejs4.3
  profile: serverlesstest
  stage: dev
  region: ap-northeast-1

部署

$ serverless deploy --provider aws --profile serverlesstest -v

若成功无事,画面将呈现如下所示。

1__noriyukinakano_0031nakano-mac____Documents_02_work_serverlesstest__zsh_.png

确认AWS的每个服务

Lambda (拉姆达)

Lambda_Management_Console.png
Lambda_Management_Console.png

S3

S3_Management_Console.png

Lambda函数的执行

让我们使用「invoke」命令来执行Lambda。
我们将尝试执行名为hello的函数,如下所示。

$ serverless invoke --function hello --provider aws --profile serverlesstest
{
    "statusCode": 200,
    "body": "{\"message\":\"Go Serverless v1.0! Your function executed successfully!\",\"input\":{}}"
}

处理内容 (Process content)

让我们看一下作为模板生成的”handler.js”的内容。
作为响应,它返回了状态码200以及消息的内容。

$ cat handler.js
'use strict';

module.exports.hello = (event, context, callback) => {
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless v1.0! Your function executed successfully!',
      input: event,
    }),
  };

  callback(null, response);

  // Use this code if you don't use the http event with the LAMBDA-PROXY integration
  // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};

编辑后记

我认为在这种情况下,我能够抓住氛围。但是现在我们的终点也没有公开,无法从外部使用。
下次让我们尝试使用AWS的API Gateway来修改一下示例应用程序并运行。

广告
将在 10 秒后关闭
bannerAds