AWS Lambda の関数をAWS APIGatewayで発行したエンドポイントで実行させる
AWS Lambdaにgolang製の関数を設定し、トリガーにAWS APIGateway設定しエンドポイントを発行、そのエンドポイントのコールで関数を実行するまでの手順です。
1 AWS Lambdaの設定
まず関数を作成します。

AWS Lambdaのトップページで「関数の作成」を選択します。

次ページで「関数名」と「ランタイム」、「ロール」を設定します。

関数を作成すると、「関数コード」で関数をアップロードする箇所がありますので、そこで関数を登録します。
関数の登録の主な手順は「ローカルで実行したい関数のファイルを用意する」「ビルドをかける」「zip化する」です。
S3にあるファイルを登録する方法もありますが、今回はローカルから直接登録します。
関数の用意
今回はサンプルでTwitter APIと連携したコードを使用します。 対象のキーワードのツイートを検索して、そのツイートをいいねしていくコードです。(コードの中身はサンプルですので、詳細は割愛します)
KeywordFavorite.go
import (
"../keys"
"fmt"
"github.com/aws/aws-lambda-go/lambda"
"net/url"
)
type MyEvent struct {
Keyword string `json:"keyword"`
}
type MyResponse struct {
Message string `json:"result:"`
}
func keywordFavorite(event MyEvent) (MyResponse, error) {
res := searchKeyword(event.Keyword)
fmt.Println(event.Keyword)
return MyResponse{Message: fmt.Sprintf(res, event.Keyword)}, nil
}
func main() {
lambda.Start(keywordFavorite)
}
func searchKeyword(keyword string) string {
api := keys.GetTwitterApi()
result := ""
v := url.Values{}
v.Set("count", "20")
res, err := api.GetSearch(keyword, v)
if err != nil {
fmt.Println("error")
} else {
for _, tweet := range res.Statuses {
fmt.Println(tweet.Id)
result = doFavorite(tweet.Id)
}
}
return result
}
func doFavorite(tweetId int64) string {
api := keys.GetTwitterApi()
result := ""
_, err := api.Favorite(tweetId)
if err != nil {
fmt.Println("error")
result = string(tweetId) + "is Failed"
} else {
fmt.Println("Done")
result = string(tweetId) + "is Success"
}
return result
}
build/zip化
このコードをローカルに配置したら、そのファイルをビルドします。 ビルドするためにlambdaのSDKを下記コードでインストールします。
$ go get github.com/aws/aws-lambda-go/lambda
インストールが成功したら以下のコードでビルドをかけます。
$ GOOS=linux GOARCH=amd64 go build -o KeywordFavorite
ビルドをかけ終わるとバイナリファイルが生成されますので、それをzip化します。
$ zip handler.zip ./KeywordFavorite
正常にhandler.zipが生成されていれば成功です。
関数の登録/テスト実行
先ほどのAWS Lambdaのページにてhandler.zipをアップロードします。 なおここで設定するハンドラ名はバイナリ名と合わせておきます。

次にテスト実行ですが、テストケースを作成します。
テストケースを下記のように設定します。
{
"keyword": "テスト"
}

テストケースを保存し実行すると下記画像のようなログが場面に表示されます。

実行結果が成功と出ていれば無事関数が正常に動作しています。
トリガーにAPI Gatewayを設定
APIの作成
LambdaのコンソールのDesigner部分でトリガーにAPIGatewayを設定しておきます。

次にAPIGatewayのコンソールで「APIの作成」を選択します。


リソースの作成

アクションからリソース名の作成を行います。

リソース名/リソースパスを設定したら「リソースの作成」をクリックします。
メソッドの作成

アクションよりメソッドの作成を行います。今回はPOSTを選択します。

ここで先ほど登録したLambdaの関数名を設定します。
ステージの作成
ここでは「ステージ」を選択しステージの作成を行います。 devステージには開発板をデプロイしていき、releaseステージには安定板をデプロイしていくような運用の仕方が可能です。

ステージ名を入力したら「作成」を選択します。

APIKeyを設定
次にAPIKeyを設定するために使用料プランを選択します。

スロットリング・クォータのチェックを外して次へを選択します。

APIステージを設定します。

次に「APIキーを作成し使用料プランに追加」を選択するとAPIキーを作成できます。 また既存にAPIキーを発行している場合は「APIキーを使用料プランに追加」から既存のAPIキーを選択できます。

その後「完了」を選択して終了です。
※APIKeyを使用した認証の有効化はこちらのサイトが詳細を説明してくれています。
テスト実行
「メソッド実行」の左上にある「テスト」を選択

リクエストヘッダーに先ほど作成したAPIKeyを設定しリクエスト本文にlambdaのテストケースと同様に設定します。

テスト実行しレスポンスに成功のログが吐かれていれば正常実行されています。
デプロイ

最後にアクションより「APIのデプロイ」を選択して、デプロイ先のステージ環境を選択して「デプロイ」をクリックすると選択肢たステージにデプロイされます。

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)
- 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2018/03/23
- メディア: 単行本
- この商品を含むブログ (1件) を見る

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版
- 作者: 玉川憲,片山暁雄,今井雄太,大澤文孝
- 出版社/メーカー: 日経BP社
- 発売日: 2017/04/13
- メディア: 単行本
- この商品を含むブログを見る