はじめに
第1章 環境構築
第2章 S3イベントの活用
第3章 SNSとSQSによるファンアウト
第4章 API GatewayとDynamoDBを使ったURL短縮サービス
AWS Lambda自体がアナウンスされたのは2011年の11月です。AWS Lambdaの歴史の中でもGo言語のサポート開始は2018年1月とまだ日が浅く、他の言語に比べてサンプルコードの数が少ないのが現状です。そこで、Go言語やAWS Lambdaを利用した(チーム)開発をサポートするためのツールやその設定など、入門や運用のハードルを少しでも下げられるような情報を本書では提供します。
本書ではAWS Lambdaの基礎となる概念にはあまり触れず、Goで開発するための周辺ツールのセットアップと3つのプロジェクトを通じて、AWS Lambdaでの開発を学んでいきます。AWSの公式のドキュメントにひととおり目を通し、シンプルなサンプルコードを動かした「次のステップ」を想定しています。
内容の訂正や補足情報は、筆者のTwitter1やブログ2で発信する予定です。感想等もお気軽にいただけると励みになります。
本書がAWS LambdaとGoでサービスを開発する方の助けになれば幸いです。
本書のサンプルコードはそれぞれの章ごとに公開しています。
・第2章
─https://github.com/toshi0607/s3-unzipper-go
・第3章
─https://github.com/toshi0607/s3-sns-sqs-lambda-slack-go-sample
・第4章
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
本書籍は、技術系同人誌即売会「技術書典5」で頒布されたものを底本としています。
本章では、次章以降で開発を行うための環境構築を行います。エディターの設定は省略しますので、お好きなものをお使いください。また、macOS(High Sierra)での開発を前提としますので、OSやバージョンに由来する差異は、適宜読み替えてください。
次のツールのインストールと設定を行います。
・anyenv
・anyenvupdate
・goenv
・pyenv
・aws-cli
・aws-sam-cli
・saw
・direnv
・dep
・gig
anyenv1は、各言語のenvを統合管理するツールです。本書ではAWS Lambdaに処理を記述するGoに加え、AWSのサービスをコマンドライン操作するためのaws-cliが依存するPythonを利用します。そのため、各言語のenvを一括管理できるanyenvを利用することで、バージョン管理のコストが下がります。
設定方法は次のとおりです。
$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.your_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.your_profile
$ exec $SHELL -l
.your_profileは使用するシェルに合わせて変更してください。たとえば、Zshを使う場合は.zshrcに記述してください。
anyenvupdate2は、anyenvで管理している各言語のenvを一括してアップデートするツールです。各言語の新しいバージョンがリリースされたとき、多くはenvのアップデートが必要な実装になっています。今回のように2言語くらいであれば大きな差はないかもしれませんが、Node.jsも管理したい、などバージョン管理したい対象が増えるほど、各言語のenvをアップデートするのは大変なのでanyenvupdateを利用します。
設定方法は次のとおりです。
$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
次のコマンドで、各言語のenvを一括してアップデートできます。
$ anyenv update
goenv3は、Goのバージョン管理のためのツールです。GitHub上には同名のリポジトリーが複数存在しますが、anyenv経由でインストールされる4のはsyndbg/goenvです。
anyenv配下で管理するため、次のコマンドでインストールします。
$ anyenv install goenv
$ exec $SHELL -l
Goをインストールする際には、anyenv経由でインストールしたgoenvを利用してインストールと設定を行います。
$ goenv install --list
2018年11月時点ではGoの最新のバージョンは1.11.2です。もしリリースされているバージョンが追加されていなければ、syndbg/goenvにプルリクエストを送りましょう5。数日以内にマージ、リリースされます。
インストールはバージョンを指定して行います。
$ goenv install 1.11.2
システム全体で利用する場合はglobalを、特定のディレクトリー配下のみに有効にする場合はlocalオプションをつけてバージョンを指定します。
$ goenv global 1.11.2
実際に設定されているバージョンは次のコマンドで確認できます。
$ goenv global
1.11.2
もし$GOPATHを設定していない場合は設定しておいてください。場所は任意ですが、筆者は次のように設定しています。
$ echo $GOPATH
/Users/toshi0607/dev/go