Help us understand the problem. What is going on with this article?

Go言語で実装したNetlify Functionsをローカル環境で動かす

More than 1 year has passed since last update.

本記事では、Go言語で実装したNetlify Functionsを
ローカル環境での動作確認する方法を記載します。

おそらくawslambdaをローカル環境で動作確認する方法と
同等かと思いますが、自分用のメモとしても残しておきたいと思います。

はじめに

既に運営の方でGo言語で実装したfunctionをデプロイする記事が
公開されていますが、ローカル環境で動作させる方法については、
詳細の記事がない状態だったため、本記事を作成しました。

また、Netlifyという非常にデプロイまでが簡単なサービスを
使えたおかげで、

  • lambdaの実装方法
  • Go言語の勉強

を行うことができました。本記事を通して、
上記の勉強に踏み出せなかった方への手助けとなればと思います。

もし、間違いやお気付きの点等ありましたら、
ご指摘いただけると幸いです。m(_ _)m

Netlifyについて

Netlifyとは

ざっくり触れていきます。

  • 静的サイトホスティングサービス
  • GitHubやGitLabといったサービスのリポジトリを参照してのデプロイが可能
  • 無料でできることが多い

詳しくは記事を参照いただくと幸せになれると思います。

Functionsとは

Netlify Functionsは、
Netlifyのサービスの中の1つと思っていただいた方が
イメージつきやすいかと思います。

ざっくりと説明すると以下になります。

  • 関数(lambda)だけ実装すればWebAPI化可能
  • 使用可能な言語は以下
    • Node.js(JavaScript)
    • Go言語
  • Netlifyにデプロイされると、裏でAWSにデプロイされる
    • 10秒以上の処理はタイムアウトとなる
      • ソースはこちら
      • 重い処理をさせることはできないが、Slackと連携させるWebAPIとしては十分

詳しくはこちらのスライドを参照していただけると幸いです。

インストール

ローカル環境で動かすにあたって、
必ず以下をインストールする必要があります。

ローカル開発環境での動作確認

Netlify運営の方でサンプルを用意してくれています。

そのサンプルを元にローカル環境で開発するための
設定を追加した以下リポジトリを用意しました。

上記リポジトリを元に
ローカル環境で動作させるための手順を記載します。

手順

1.go buildの実施

本リポジトリでは、source配下のhellojsonという
2つのfunctionを実装しようとしています。
これらをそれぞれビルドし、functions配下に配置します。

イメージとしては以下のような感じです。

イメージ
.
├── functions
│   ├── hello
│   └── json
├── source
│   ├── hello
│   │   └── main.go
│   └── json
│       └── main.go

コマンドは以下を使用します。

ビルドコマンド
GOOS=linux GOARCH=amd64 go build -o ./functions/hello ./source/hello
GOOS=linux GOARCH=amd64 go build -o ./functions/json ./source/json

2.template.ymlの作成

ローカル環境ではSAM CLIというツールで動作させますが、
template.ymlにパス等の設定情報を記載する必要があります。

template.yml(一部変更)
# 省略
Resources:
  〜Function:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: #要変更: バイナリを配置するパス(今回だと"functions/")
      Handler: #要変更: バイナリ名(今回だと"hello" or "json")
      Runtime: go1.x
      Tracing: Active
      Events:
        CatchAll:
          Type: Api
          Properties:
            Path: #要変更: functionのパス
            Method: GET #要変更: POSTなど
      Environment:
        Variables:
          PARAM1: VALUE
# 省略

functionを追加したい場合は〜Function:のブロックを追加し、
以下#要変更部分を変更しましょう。

GET以外にPOSTなどにも対応させたい場合は、
Propertiesのブロックを追加し、Methodの値を変更すればOKです。

3.動作確認

Docker for Macを起動します。
(以下のようにrunning状態になっていればOKです。)

image.png

カレントディレクトリをgo-netlify-functions-sampleにして、
sam local start-apiを実行します。

実行例
$ pwd
/省略/go-netlify-functions-sample
$ sam local start-api
2018-12-01 17:10:10 Mounting JsonFunction at http://127.0.0.1:3000/json [GET]
2018-12-01 17:10:10 Mounting HelloFunction at http://127.0.0.1:3000/hello [GET]
2018-12-01 17:10:10 You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions changes will be reflected instantly/automatically. You only need to restart SAM CLIif you update your AWS SAM template
2018-12-01 17:10:10  * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)

上記の状態になったら、動作確認可能な状態となります。

  • http://127.0.0.1:3000/hello
  • http://127.0.0.1:3000/json

上記URLをブラウザから実行し、
hellojsonが動作するか試してみます。

ソースコードで記述した内容が返却されていることを確認できます。

おわり

今回紹介した以下リポジトリは、
自分でNetlify FunctionsをGo言語で書くための
テンプレートとして使用しています。

もしよろしければ、
fork / Downloadして使用してみてください。

※何も変更せずとも、Netlify Functionsとしてデプロイも可能です。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away