概要
serverless frameworkをgolangで使って見ようと思いました。一旦、サンプルのdeployまで。
環境構築&deploy
docker-compose.yml
version: '3'
services:
sls:
build: .
volumes:
- ./:/app
working_dir: /app
builder: # 面倒だったので、ビルドは別サービス
build:
context: .
dockerfile: Dockerfile.builder
volumes:
- ./:/go/src/app
working_dir: /go/src/app
Dockerfile
FROM node
# この間にDockerのインストール(https://docs.docker.com/install/linux/docker-ce/debian/)
RUN npm install serverless -g
Dockerfile.builder
FROM golang
RUN apt-get update && apt-get install go-dep
$ docker-compose build
# プロジェクト作成。2つ関数が元から入ってます(hello,world)
$ docker-compose run --rm sls sls create -t aws-go-dep
# ビルド。プロジェクト作成時にMakefileが作られているのでそれを使います。
$ docker-compose run --rm builder make build
# デプロイ
$ docker-compose run --rm sls sls deploy
ローカル実行
これが実は厄介で、golangを使った場合docker経由での実行しかサポートしていないっぽいのです(参考)。。。
docker-compose.ymlに変更を加えると実行はできました。
version: '3'
services:
sls:
build: .
volumes:
- /var/run/docker.sock:/var/run/docker.sock # hostのdockerを使う。
- ./:/path/to/host/directory # hostのdockerを使うので、pathを合わせておかないとvolumeのマウントでおかしなことになる。
working_dir: /app
builder:
build:
context: .
dockerfile: Dockerfile.builder
volumes:
- ./:/go/src/app
working_dir: /go/src/app
/path/to/host/directory
の部分が環境ごとに変わってしまうのが辛い。。。
何かいい方法ないんでしょうかね。。