我在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/