【Golang+Lambda+Serverless】サクッとサーバーレス環境を作成してみた

Lambda
  • URLをコピーしました!

こんにちは!RYOTAです!

当記事をご覧いただきありがとうございます!

Go言語でサーバーレス環境を構築してみたので構築方法をまとめてみようと思います!

サーバーを設置しなくても超簡単に関数が実行できるので是非最後までご覧の上ご自身でも触ってみてください!

目次

はじめに

業務で定期Batchを作成することになったので、今回はGolang×Lambdaでのサーバーレスアーキテクチャを採用してみました。

実際の構築フローや使ってみての感想等を簡単にまとめるので、Lamdba環境構築のお役に立てれば幸いです。

今回使うのは下記の技術になります。

公式サイト

Golang(Go言語)とは?

Golangは静的型付けなコンパイル言語です。

RubyやPHPといったインタプリタ型のスクリプト言語とは違い、コンパイル(バイナリファイルを生成)を行い実行する言語となります。

2009年にGoogleが開発した言語で、高速ながらもシンプルな構文で書くことが可能な言語です。

初めてGolangを触ってみましたが、処理が爆速で並列処理も簡単に実装できたのでかなりGolangが好きになりました。

Lambdaとは?

AWSが提供している関数の実行環境です。

本来はサーバーを立ててOSやWebサーバーのインストールや設定を行い、その上で関数やアプリケーションを実行していく必要がありますが、それらの設定を一切必要としなく実行したい関数だけを作成しデプロイしておくと実行してくれるサービスとなります。

サーバーレスアーキテクチャの中核を担うサービスとなっており、実行したい機能に注力して開発を進めることができるのが強みです。

Serverless Frameworkとは?

Node.jsで作られているオープンソースのフレームワークで、サーバーレス環境の構築が簡単に行えるツールです。

ちょっとした設定ファイルとコマンド一発で、Zip生成/設定ファイル生成/S3アップロード/Cloudformation作成/スタックの紐付けといった色々なタスクを裏側で実行しLambda関数を作成してくれるツールになります。

別の記事でも紹介しますが、VPC設定や定期実行設定も簡単に行えるのでとても便利です。

目的とゴール

今回はGo+Lambda環境を作成しお試して動かしてみる所までをゴールとします。

具体的な流れは以下となります。

作業手順

  1. Golangのインストール
  2. Serverless Frameworkのインストール
  3. 環境構築
  4. Serverlessでデプロイ

Golangのインストール

今回は特にバージョン管理等は行わないのでサクッとBrewでインストールを行います。

# インストール
$ brew install go

# バージョン確認
$ go version

Serverless Frameworkのインストール

とりあえず脳死でグローバルインストールします。

# インストール
$ npm install -g serverless

# バージョン確認
$ sls --version

バージョンが返って来ればOK。

環境構築

下準備は完了したので実際にServerlessの環境を構築していきます。

最終的には下記の構成になるよう作成します。

├─ go.mod
├─ go.sum
├─ main.go
├─ makefile
└─ serverless.yml

Goの実装

テスト用にメッセージを返すだけの関数を作成します。

serverless用のテンプレートがあるのでそちらを利用します。

テンプレートインストール

$ sls create -u https://github.com/serverless/serverless-golang/ -p lambda-test

上記コマンドで必要なディレクトリが作成されるのでそちらに移動します。

$ cd lambda-test

確認してみるとテンプレートの関数が作成されてますね。

package main

import (
	"github.com/aws/aws-lambda-go/lambda"
)

type Response struct {
	Message string `json:"message"`
}

func Handler() (Response, error) {
	return Response{
		Message: "Go Serverless v1.0! Your function executed successfully!",
	}, nil
}

func main() {
	lambda.Start(Handler)
}

モジュール対応モードに移行

$ go mod init lambda-test

パッケージをインストール

テンプレート内でインポートされているパッケージをインストールします。

$ go get github.com/aws/aws-lambda-go/lambda

※上記を実行しないとmain.goでエラーが出るはずです。

ビルド

上記で作成したmain.goをビルドします。

$ GOOS=linux go build -o bin/main

成功するとbin直下にバイナリファイルが作成されます。

Serverlessの設定

Goの実装が完了したらServerless側の設定です。

YAMLの編集

テンプレートのserverless.ymlを編集します。

service: lambda-test

provider:
  region: ap-northeast-1
  stage: master
  name: aws
  runtime: go1.x
  environment:
    TZ: Asia/Tokyo

package:
  exclude:
    - ./**
  include:
    - ./bin/**

functions:
  test_function:
    handler: bin/main
    name: lambda-test-test_function

IAMユーザーの設定

公式のQuickSetupに書いてあるようにアクセスキーを環境変数としてセットします。

※Lambda用にIAMユーザーを作成し、アクセスキーとシークレットキーを設定します。

https://www.serverless.com/framework/docs/providers/aws/guide/credentials#quick-setup

$ export AWS_ACCESS_KEY_ID={access_key}
$ export AWS_SECRET_ACCESS_KEY={secret_key}

Serverlessデプロイ

ここまでで環境構築が完了したので実際にデプロイしてみます。

$ sls deploy

挙動としては関数がzipファイル化→クラウドフォーメーションの定義ファイル生成→クラウドフォーメーションのスタックが作成→S3にzipファイルをアップロート→Lambda関数の作成と紐付けのようですね。

無事にLambda関数が作成されコンソール画面でテストが出来ればOK!

下記コマンドでも実行ができるので試しても良いかも

$ sls invoke -f {function_name}

さいごに

今回は流行りのサーバーレス環境を構築してみましたが、サーバーを構築しなくていいのは楽ですし爆速で開発できてとても良いですね。

個人開発アプリのAPIとしてもLambda環境で構築してみても良いと思うので、次回はDBへのアクセスにもトライしてみようと思います。

Lambda

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次