我用Go语言尝试了Serverless Framework的模板

总结

我已经尝试使用aws-go在Serverless Framework的模板创建功能中进行部署。

环境

    • Node v8.11.1

 

    • npm 5.6.0

 

    • Go 1.10.3

 

    IAMユーザが作成されていること(AWS APIを使って操作するため)

Serverless Framework是什么

以下的步骤都会自动完成,可以节省开发时的工作量,非常方便。
– 生成Lambda函数
– 上传函数
– 设置触发事件的触发器

安装Serverless Framework。

请使用以下命令进行安装。

全局安装Serverless:npm install -g serverless

设置凭据

请输入已创建的IAM用户的访问密钥和秘密访问密钥。

❯ vim ~/.aws/credentials

[hoge]
aws_access_key_id =  piyo
aws_secret_access_key = huga

如果需要访问多个环境并且需要使用不同的IAM用户,建议根据每个环境设置适当的命名。

配置設定 de

❯ vim ~/.aws/config

[hoge]
output = json
region = ap-northeast-1    //好きなリージョンで設定してください。

尝试使用模板创建新项目

当设置完成后,我们终于可以使用sls的模板来创建新项目了。
请务必在$GOPATH以下执行以下命令。

~/go/src/github.com/xxxxx/sls-sample目录下执行以下命令:
sls create –template aws-go

执行后,将会创建以下文件。

package main

import (
    "github.com/aws/aws-lambda-go/lambda"
)

type Response struct {
    Message string `json:"message"`
}

func Handler() (Response, error) {
    return Response{
        Message: "Go Serverless v1.0! Your function executed successfully!",
    }, nil
}

func main() {
    lambda.Start(Handler)
}
package main

import (
    "github.com/aws/aws-lambda-go/lambda"
)

type Response struct {
    Message string `json:"message"`
}

func Handler() (Response, error) {
    return Response{
        Message: "Okay so your other function also executed successfully!",
    }, nil
}

func main() {
    lambda.Start(Handler)
}

我觉得您可以确认已经创建了这种类型的模板文件。
请对已创建的文件中的serverless.yml进行部分编辑。

# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
#    docs.serverless.com
#
# Happy Coding!

service: hoge # 好きなプロジェクト名
# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"

provider:
  name: aws
  runtime: go1.x

# you can overwrite defaults here
#  stage: dev
#  region: us-east-1
region: ap-northeast-1  #リージョンを設定してください(今回は東京)

# you can add statements to the Lambda function's IAM Role here
#  iamRoleStatements:
#    - Effect: "Allow"
#      Action:
#        - "s3:ListBucket"
#      Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ]  }
#    - Effect: "Allow"
#      Action:
#        - "s3:PutObject"
#      Resource:
#        Fn::Join:
#          - ""
#          - - "arn:aws:s3:::"
#            - "Ref" : "ServerlessDeploymentBucket"
#            - "/*"

# you can define service wide environment variables here
#  environment:
#    variable1: value1

package:
 exclude:
   - ./**
 include:
   - ./bin/**

functions:
  hello:
    handler: bin/hello
  world:
    handler: bin/world

#    The following are a few example events you can configure
#    NOTE: Please make sure to change your handler code to work with those events
#    Check the event documentation for details
# events:
#    events:
#      - http:
#          path: users/create
#          method: get
#      - s3: ${env:BUCKET}
#      - schedule: rate(10 minutes)
#      - sns: greeter-topic
#      - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
#      - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx
#      - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx
#      - iot:
#          sql: "SELECT * FROM 'some_topic'"
#      - cloudwatchEvent:
#          event:
#            source:
#              - "aws.ec2"
#            detail-type:
#              - "EC2 Instance State-change Notification"
#            detail:
#              state:
#                - pending
#      - cloudwatchLog: '/aws/lambda/hello'
#      - cognitoUserPool:
#          pool: MyUserPool
#          trigger: PreSignUp

#    Define function environment variables here
#    environment:
#      variable2: value2

# you can add CloudFormation resource templates here
#resources:
#  Resources:
#    NewResource:
#      Type: AWS::S3::Bucket
#      Properties:
#        BucketName: my-new-bucket
#  Outputs:
#     NewOutput:
#       Description: "Description for the output"
#       Value: "Some output value"

部署和执行

当文件的设置完成后,让我们尝试实际部署的步骤。

/〜/go/src/github.com/xxxxx/sls-sample 可以被改写成:

$ make build

go get github.com/aws/aws-lambda-go/lambda
env GOOS=linux go build -ldflags="-s -w" -o bin/hello hello/main.go
env GOOS=linux go build -ldflags="-s -w" -o bin/world world/main.go

请使用您在最初设置的 credentials 和 config 的名称(在此处为 hoge)来指定并执行以下命令:$ sls deploy –aws-profile hoge。

$ sls deploy --aws-profile hoge

Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
.....
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (4.5 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
........................
Serverless: Stack update finished...
Service Information
service: hoge
stage: dev
region: ap-northeast-1
stack: hello-dev
api keys:
  None
endpoints:
  None
functions:
  hello: hello-dev-hello
  world: hello-dev-world

如果出现了这样的显示,表示部署成功!

总结

我意外地很顺利地到达了这一点。
除了aws-go之外,还有很多其他模板可以使用,所以也可以尝试其他的。

附赠

总的来说,这是关于提到了有许多模板的描述的内容。

 Template "true" is not supported. Supported templates are: "aws-nodejs", "aws-
nodejs-typescript", "aws-nodejs-ecma-script", "aws-python", "aws-python3", "aws-
groovy-gradle", "aws-java-maven", "aws-java-gradle", "aws-kotlin-jvm-maven", "aws-
kotlin-jvm-gradle", "aws-kotlin-nodejs-gradle", "aws-scala-sbt", "aws-csharp", 
"aws-fsharp", "aws-go", "aws-go-dep", "azure-nodejs", "fn-nodejs", "fn-go", 
"google-nodejs", "kubeless-python", "kubeless-nodejs", "openwhisk-java-maven", 
"openwhisk-nodejs", "openwhisk-php", "openwhisk-python", "openwhisk-swift", 
"spotinst-nodejs", "spotinst-python", "spotinst-ruby", "spotinst-java8", 
"webtasks-nodejs", "plugin" and "hello-world".
广告
将在 10 秒后关闭
bannerAds