技術書典 7 で Goで学ぶAWS Lambda を見て BOOTH で購入しました。
さくっとみてみると macOS 上に Python, aws cli, go, docker などを入れてます…
う~ん、どれも普段使わない関係のものなので PC に直接入れたくない…!?ということで最近試してみてる Visual Studio Code のリモート開発で環境を作ってみようと思います。
docker on docker しないといけなくなったら、その時にまた頑張ろう。ということでとりあえず AWS の CLI と go が入ってる状態を目指します。
ベースとなるテンプレート
単一コンテナーだけで済まなくなるケースも考えて docker-compose を使っていて AWS CLI に必要な Python が入ってるものということで、Python 3 & PostgreSQL
を選びました。
.devcontainer
フォルダーに Dockerfile
があるので Python 以外にも Go 言語も入れます。元ネタは Go 言語の公式イメージの Dockerfile
これとマージしつつ AWS CLI も pip でインストールするようにして以下のような Dockerfile になりました。 無駄はありそうなものの、まぁ動くのでとりあえずよしとしよう。
.devcontainer/docker-compose.yml
は DB 環境がいらないのですっきりさせましょう。
version: '3' services: app: build: context: .. dockerfile: .devcontainer/Dockerfile volumes: - ..:/go/src command: sleep infinity
.devcontainer/docker-compose.secret.yml
ファイルを作って AIM の ID と KEY を環境変数に入れておきます。
version: '3' services: app: environment: - AWS_ACCESS_KEY_ID=xxxxxx - AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxx - AWS_DEFAULT_REGION=ap-northeast-1 - AWS_DEFAULT_OUTPUT=json
この .devcontainer/docker-compose.secret.yml
は .gitignore
でリポジトリーには上がらないようにしておきました。
.devcontainer/devcontainer.json
は、とりあえず /go/src
を作業用のフォルダーにして Go と AWS の拡張機能を入れておく感じにしておきました
{"name": "Learning for AWS Lambda using Golang", "dockerComposeFile": ["docker-compose.yml", "docker-compose.secret.yml" ], "service": "app", "workspaceFolder": "/go/src", "extensions": ["ms-vscode.go", "amazonwebservices.aws-toolkit-vscode" ]}
この状態でリモート開発機能でオープンすると…
go
コマンドも叩けて aws
コマンドも叩けて aws s3 ls
もエラーが出なかったので、ちゃんと S3 作れば結果が返ってくると信じたい。
適当に Go の Hello world を書いて F5 を押してみたらちゃんとデバッグもできた。
そろそろ、本を読み始めてもいいかな??ということでゲームしよう。
時刻がずれてた
コンテナー上のイメージの時刻がずれてて aws s3 ls
が失敗してたので、以下のページを参考にしました。
私の場合は最初からチェックが入ってたので、一度オフにして適用したあとに、またオンにしたら時刻がちゃんとなりました。