技術書典 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 が失敗してたので、以下のページを参考にしました。
私の場合は最初からチェックが入ってたので、一度オフにして適用したあとに、またオンにしたら時刻がちゃんとなりました。