目次

はじめに

サンプルコード
免責事項
表記関係について
底本について

第1章 環境構築

1.1 anyenv
1.2 anyenvupdate
1.3 goenvとGo
1.4 pyenvとPython
1.5 aws-cli
1.6 aws-sam-cli
1.7 saw
1.8 direnv
1.9 dep
1.10 gig

第2章 S3イベントの活用

2.1 S3
2.2 シーケンス
2.3 フォルダー構成
2.4 ソースコード
2.5 テスト
2.6 デプロイ
2.7 削除

第3章 SNSとSQSによるファンアウト

3.1 概要
3.2 SQS
3.3 SNS
3.4 シーケンス
3.5 フォルダー構成
3.6 ソースコード
3.7 テスト
3.8 デプロイ
3.9 削除

第4章 API GatewayとDynamoDBを使ったURL短縮サービス

4.1 概要
4.2 API Gateway
4.3 DynamoDB
4.4 シーケンス
4.5 フォルダー構成
4.6 ソースコード
4.7 テスト
4.8 デプロイ
4.9 削除

はじめに

 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章

  ─https://github.com/toshi0607/url-shortener-lambda-go

免責事項

 本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。

表記関係について

 本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。

底本について

 本書籍は、技術系同人誌即売会「技術書典5」で頒布されたものを底本としています。

第1章 環境構築

 本章では、次章以降で開発を行うための環境構築を行います。エディターの設定は省略しますので、お好きなものをお使いください。また、macOS(High Sierra)での開発を前提としますので、OSやバージョンに由来する差異は、適宜読み替えてください。

 次のツールのインストールと設定を行います。

 ・anyenv

 ・anyenvupdate

 ・goenv

 ・pyenv

 ・aws-cli

 ・aws-sam-cli

 ・saw

 ・direnv

 ・dep

 ・gig

1.1 anyenv

 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に記述してください。

1.2 anyenvupdate

 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

1.3 goenvとGo

 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

試し読みはここまでです。
この続きは、製品版でお楽しみください。