Go言語のプログラムをサーバーレスアプリケーションを作る

Blog Single

「サーバーレス」、「サーバーレスアーキテクチャ」という言葉をよく目にすることが多くなりましたが、サーバーレスという言葉だけ聞いてもいまいちどういうものなのかピンと来ないという方も多いのではないでしょうか。

今回はAWSのLambdaを用いて、go言語でLambda関数をデプロイしていきます。

サーバーレスとは

一般的にアプリケーションを動かすためのサーバーのセットアップと管理を行う必要があり、常に稼働させておく必要があります。
対して、サーバーレスは、開発者がインフラの管理をする必要がなく、アプリケーションの実行に必要なセットアップと管理を気にせずに開発できるということを指した言葉です。

FaaS(Function as a Service)とも呼ばれ、イベントドリブンで、呼び出されるごとに、アプリケーションが実行され、アプリケーションの実行に必要なサーバーを自動で振り分け、その都度スケールしてくれるため、サーバーのスケールの運用を考えずに開発を行うことができます。

それでは、実際にサーバーレスアプリケーションを作成していきます。

Go言語でLambda関数の作成

セットアップ

go言語の開発環境が整っていない方は適宜環境に応じてインストールします。

macであれば、
インストール

$ brew install go

パスを通す

$ echo 'export GOPATH=$HOME/go' >> ~/.bash_profile
$ echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bash_profile

これで使えるようになります。

Lambda関数で使うライブラリのインストール

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

Lambda関数の作成

今回は、go言語のLambda関数のライブラリのリポジトリのサンプルプログラムを使います。

hello.go

package main

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

func hello() (string, error) {
    return "Hello ƛ!", nil
}

func main() {
    // Make the handler available for Remote Procedure Call by AWS Lambda
    lambda.Start(hello)
}

ビルド

$ GOOS=linux GOARCH=amd64 go build -o hello hello.go

アップロードするときのためにzipに圧縮

zip hello.zip hello

以上でデプロイするLambda関数の作成は終わりです。

AWS Lambdaにデプロイ

AWSにデプロイするにはAWSのアカウントが必要になります。

AWS マネジメントコンソール | AWSのサービスでAWS Lambdaを選択すると以下のような画面に遷移します。

右上の関数の作成のボタンを押します。
そうすると入力画面が出てくるので、今回は以下のように入力します。
名前などは好きに決めたもので問題ないです。

次はプログラムのアップロードを行います。
この画面で、今回デプロイする関数を実行するタイミングを指定するトリガーの設定も行えますが、今回は設定しません。
もちろんデプロイした後から、トリガーを設定したりもできます。

左下の関数パッケージのアップロードの部分から先ほど作成したhello.zipファイルをアップロードします。

アップロードの処理が終わったら、右上の「テスト」ボタンから実際にプログラムの実行を行います。

今回は、パラメーターを与えなくていいので以下のように変更して、作成ボタンを押します。

テストの作成ができたので、テストボタンを押して実行すると以下のように表示されます。

これで、サーバーレスアプリケーションのデプロイが完了しました。

これを実際に使っていくには、API GateWayなどでAPIで実行できるようにしたり、データベースが更新されたタイミングなど、トリガーを設定して使います。
サーバーレスは、小さなサービスを組み合わせていくマイクロサービスに用いられたり、スマートスピーカーのアプリケーションなどでよく使われています。

サーバーレスは処理に時間がかかるような処理には向いていなかったり制限も多いですが、プログラムの組み合わせが非常に行いやすく、ちょっとしたイベントドリブンな処理はかなり便利に使えます。

興味を持った方は、サーバーレスを利用してどんなことに使っていくのか考えて、何か作ってみてはいかがでしょうか。

Posted by MatsumotoKazuki
PHPやJavaで開発を行っているエンジニア。 LOLというゲームの試合を観戦するのが好きです。

Other Posts: