【やってみた】goで動くlambdaをgithubからデプロイできる環境を作ってみる! その1

どーも!

たかぽんです!

前回、sam-cliを使ってデプロイする仕組みを試してみました...!

それに対して、今度はsam-cliを使用せずにgithub-actionsで自動的にlambdaをデプロイできる仕組みを作ってみようと思います...!

長編になりそうな予感がするので、3つ程度に記事を分けていこうと思います...!

やったことありませんが、こういうのを連載...とでもいうんですかね...w

本シリーズで行うこと

今回のやってみたでは、go言語のlambdaデプロイ環境を作っていきます。

local環境でgoで書かれたlambdaのプログラムを修正、そしてpushをします。

すると、github actionsにてgo言語のbuildしたファイルをzip化、そしてlambdaへデプロイ...といった手順で行います。

組んでしまえばあとはコードの書き換え、pushで完了するのですが、最初の準備は何かと大変です。

デプロイができるような環境を一から作っていきましょう...!

記事は分割して少しづつ解説していきます。

本記事でできること

まず最初に本記事を読み終えた時点でできることを簡単にご説明しておきます。

本記事を終わった段階で、local環境でgo言語のプログラムを動かし、その内容をgithubへpush、git管理することができるようになります。

具体的には以下の内容を説明していきます。

  • local環境でgo言語の開発環境を作成する
  • githubでリポジトリを作成し、go言語の環境をgit管理できるようにする

lambda登場しないじゃないかっ!w

って言わないでください...w

イメージとしては、前準備段階です。

ここで作成するgoのプログラムが最終的にlambdaで動いてくれるようにしていきます。

プログラムの内容は後ほど微修正していきますが、まずはgoが動く環境をgithubで管理するところまで頑張っていきましょう!

すでにそこまでは大丈夫だよっ!という方は、次の記事から読み進めても大丈夫です...!

ではまずはgo言語の環境作成をしていきましょう!

go言語の準備を行う

さて、それではやっていきます...!

まずはgoを動かせるように環境を作りましょう...!

goのインストールに関しては以下の記事をご参考ください。

HelloWorldができるようになったらOKです...!

リポジトリを準備する

今度はGithubのリポジトリを作成します。

今回はせっかくなのでprivateで作ってみます。(無制限に作れるようになりましたしね...!)

githubへアクセスし、自分のアイコンから、"Your repositories"を選択します。

開いたら、以下のようにRepositoryのタブを開き、右側の緑のnewを選択します。

Newを押すと、以下のようにリポジトリの作成画面が出てきます。

今回はprivateにして、作成します。

名前はとりあえず"go-lambda"とでもつけておきましょう。

下部のチェックボックスは全部つけなくてOKです。

ここまでできたら、以下のような画面が出てくるはずです。

ここの"...or create a new..."にあるコマンド群は一旦控えておきます。

リポジトリの準備はこれでOKです!

では、次にgo.modの用意をします!

go modの準備をする

go modとは、go言語の依存モジュールの管理に使われるものです。

あるモジュールAを使いたい!という場合に、そのモジュールAが別のモジュールBやモジュールCが必要!となることが多々あります...

そんな時、そういったものも合わせて管理してくれるのがこのGoのModulesになります。

そして、それを用意するためのコマンドが以下になります。

go mod init github.com/Takapon0407/go-lambda

go mod initで引数に対して、"github.com/Takapon0407/go-lambda"という形で、先程作成したリポジトリの情報を記載しておきます。

筆者も完璧に理解できていませんがおそらくModuleの名称で、どういった環境で使うためのModuleなのかがわかりやすい名前をつけておくと良いのかなと思います。

こうしないといけない...!

といったことはなさそうなので、githubのリポジトリ名を使用していきます。

コマンドが正しく実行されたら、以下のように"go.mod"ファイルが作成されます。

(base) taka@Taka goTest % ls
main	main.go
(base) taka@Taka goTest % go mod init github.com/Takapon0407/go-lambda
go: creating new go.mod: module github.com/Takapon0407/go-lambda
go: to add module requirements and sums:
	go mod tidy
(base) taka@Taka goTest % ls
go.mod	main	main.go

"go mod tidy"についても書かれていますが、今回は必要ありません。(今後、モジュールを追加していくと、不要なものなどを削除したり、不足分を追加してくれたりするコマンドになっています。)

ファイルの中身を見てみると...

module github.com/Takapon0407/go-lambda

go 1.16

このように、モジュールの名前とgoのバージョンが書かれているだけです。

今後モジュールを追加するとその情報が追記されています。

さて、ここまできたら、次は先程作成したリポジトリへファイルをpushしていきます!

リポジトリへ反映する

さて、それでは先程作成したリポジトリへ内容を反映していきます。

先程リポジトリ作成時にメモした内容を使用していきます。

echo "# go-lambda" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/Takapon0407/go-lambda.git
git push -u origin main

一部変える部分がありますが、一つづつやっていきましょう。

まずはREADMEファイルを作成します。

"# go-lambda"とすることで、第一レベルで項目を作成することができます。

後でもっと簡単に編集も可能になるため、いったんそのまま作ってしまっていいかと思います。

echo "# go-lambda" >> README.md

次に、git管理をおこなうための設定を行います。

git init

管理できるように設定したら、今度は必要なファイルをaddしていきます。(commitの対象に追加)

addにREADMEファイルに加え、"go.mod"と"main.go"も追加してcommitしておきましょう。

git add README.md go.mod main.go
git commit -m "first commit"

次はブランチの作成を行い、remoteのリポジトリと紐付けを行います。

git branch -M main
git remote add origin https://github.com/Takapon0407/go-lambda.git

これで全ての準備は整いました..!

では、最後にpushしましょう!

git push -u origin main

うまくいけば、以下のような感じになり....?

(base) taka@Taka goTest % git push -u origin main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 429 bytes | 429.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/Takapon0407/go-lambda.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

先程のリポジトリを再度見に行くと...?

いい感じになっている...!

これで、git管理はOKです。

あとは、localでbranchを切って開発を進めていくだけで最低限はOKですね!

今回の連載に関しては、デプロイフローの完成まで直接branchへpushしていこうと思いますが、実際はブランチを切り、そのブランチで改修、OKが出たらmainへマージといった流れが自然かなと思います。

まだサービス化していない時点で確認をもらう必要はないかなぁ...といった気もしますが、そこに関しては状況に合わせて適宜タイミングをみるといいのかなと思います。

次の記事

次は、lambdaでテストを動かしやすいようにmain.goの修正、lambdaへデプロイできるようにgithub actionsの設定を行なっていきます。

次の記事の内容を一通り完了すれば、ローカルで編集、githubでdeployの自動化まではできるので、是非合わせて読んでみてください。

おすすめの記事