我在Docker中搭建了一个Go的开发环境,并尝试将其部署到AWS Lambda上,使用Serverless

想要尝试一下Go语言,所以决定先搭建开发环境。

假设

    • Dockerがインストール済み

 

    • AWSのアカウントがある

AWS_ACCESS_KEY_ID とAWS_SECRET_ACCESS_KEY がある

> docker --version
Docker version 18.09.0, build 4d60db4

> docker-compose --version
docker-compose version 1.23.1, build b02f1306

步骤

请参考我在GitHub上上传的代码:
https://github.com/kai-kou/deploy-in-go-lambda-with-sls-on-docker

创建一个Docker容器

> mkdir 任意のディレクトリ
> cd 任意のディレクトリ
> touch Dockerfile
> touch docker-compose.yml

Dockerfile 是根据下面的内容安装 serverless。

yunspace/serverless-golang:使用Serverless Framework和Python转接层的AWS Lambda Go函数
https://github.com/yunspace/serverless-golang

FROM golang:latest

ENV SERVERLESS serverless@1.30.1
ENV GOPATH /go
ENV PATH $GOPATH/bin:/root/.yarn/bin:$PATH

RUN apt-get update && \
    apt-get install git
RUN go get -u github.com/rancher/trash
RUN curl --silent --location https://deb.nodesource.com/setup_6.x | bash - && \
    apt-get install -y nodejs
RUN curl -o- -L https://yarnpkg.com/install.sh | bash
RUN npm install -g $SERVERLESS

我根据以下内容在docker-compose.yml中指定了volumes。

用Docker Compose快速建立Go开发环境 – Qiita

由于我想在容器内使用无服务器架构执行部署,所以将 AWS 账户信息添加到环境中。

version: '2'
services:
  app:
    build: .
    volumes:
      - 'data:/go'
      - '.:/go/src/app'
    environment:
      - AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
volumes:
  data:
    driver: 'local'

如果已经安装了 AWS CLI,则我认为账户信息将保存在 $HOME/.aws/credentials 文件中,将其设置为环境变量。

卡梅伦·埃克尔贝瑞 – 全栈开发者
https://cameroneckelberry.co/words/将AWS凭据传入Docker容器中,而无需硬编码

> export AWS_ACCESS_KEY_ID=$(aws --profile default configure get aws_access_key_id)
> export AWS_SECRET_ACCESS_KEY=$(aws --profile default configure get aws_secret_access_key)
> set -x AWS_ACCESS_KEY_ID (aws --profile default configure get aws_access_key_id)
> set -x AWS_SECRET_ACCESS_KEY (aws --profile default configure get aws_secret_access_key)

当准备好之后,我们将启动容器。

> docker-compose build
()
Successfully built 25cabb8b3be0
Successfully tagged 任意のディレクトリ_app:latest

> docker-compose run app

root@148f0f743c3f:/go#

创建和构建项目

在将其安全地放入集装箱后,参考下面的步骤,在无服务器环境中创建一个Go项目,并安装必需的包进行构建。

在Serverless Framework中创建Golang的Lambda函数试试|DevelopersIO

> cd src/app
> serverless create \
  -u https://github.com/serverless/serverless-golang/ \
  -p hello-go-lambda

> cd hello-go-lambda
> go get github.com/aws/aws-lambda-go/lambda
> GOOS=linux go build -o bin/main

将应用程序部署到AWS Lambda

将其部署到AWS Lambda。虽然可以直接部署serverless.yml,但如果希望更改区域等信息,请先编辑然后再进行部署。

> serverless deploy
()
Serverless: Stack update finished...
Service Information
service: hello-go-lambda
stage: dev
region: us-east-1
stack: hello-go-lambda-dev
api keys:
  None
endpoints:
  None
functions:
  hello: hello-go-lambda-dev-hello

如果能够部署成功,我会尝试执行一下。

> serverless invoke -f hello

{
    "message": "Go Serverless v1.0! Your function executed successfully!"
}

干得好。

整理收拾

如果要删除部署的Lambda函数,请执行以下命令。

> serverless remove

Serverless: Getting all objects in S3 bucket...
Serverless: Removing objects in S3 bucket...
Serverless: Removing Stack...
Serverless: Checking Stack removal progress...
..........
Serverless: Stack removal finished...

总结

虽然在使用Serverless时需要安装Node.js有点麻烦,但设置环境比我想象的要简单得多。

请参考

yunspace/serverless-golang是使用Serverless Framework和Python shim的AWS Lambda Go函数。
https://github.com/yunspace/serverless-golang

用Docker Compose快速搭建Go开发环境 – Qiita

使用Docker搭建Golang开发环境 – Qiita
https://qiita.com/yasuno0327/items/be7fb992054f40b491cc

使用Serverless Framework创建Golang的Lambda函数|DevelopersIO
https://dev.classmethod.jp/etc/serverless-framework-golang-lambda-create/

从无服务器安装到Lambda部署 – Qiita
https://qiita.com/jumjamjohn/items/abbc060fd2c1c6791ef3

使用Serverless框架(Go)尝试编写Hello world – Qiita

Docker Compose – Docker-compose.yml 参考 – Qiita
https://qiita.com/zembutsu/items/9e9d80e05e36e882caaa

Docker Compose – Docker-compose.yml 参考指南 – Qiita
https://qiita.com/zembutsu/items/9e9d80e05e36e882caaa

卡梅伦·埃克尔贝里 – 全栈开发者
https://cameroneckelberry.co/words/将AWS凭证传入Docker容器中,而无需硬编码

如何在Fish Shell中将命令的执行结果赋值给变量 | 网络刮痧
https://efcl.info/2013/0520/res3282/

广告
将在 10 秒后关闭
bannerAds