1
/
5

GolangによるAWS Lambda開発環境

はじめに

当社ではクラウドネイティブなシステムを開発しています。


クラウドネイティブとは何か | 株式会社ROBON
はじめに2019年に株式会社ROBONを設立するにあたって、これから時代のソフトウェアのアーキテクチャはどうあるべきかを考えました。既にクラウドネイティブという言葉はあったと思いますが、私にはそ...
https://www.wantedly.com/companies/company_5181558/post_articles/897217


上記のように「使いたい時」「使いたい場所で」「使いたいだけ」上手にコンピューティングリソースを使うため、「ゼロからコールドスタートが当たり前」の要素のみで構成されたシステムを開発しよう。「ゼロからコールドスタート」ならネイティブコードにコンパイルされる言語(Go言語)によるFaaS(AWS Lambda)が良さそうだ。

となりましたが、当然、次は「どうやって開発するの?」ということになります。

どうやって開発するの?

開発環境にとって大切なこと

開発環境だけでなく、テスト環境もステージング環境も本番環境に近いことが大切です。
なぜなら、開発環境で動いたものは本番環境でも同じように動いて欲しいし、本番環境で発生した問題は開発環境でも再現して欲しいからです。

ですから、その他の条件が許すならば、開発もテストも本番環境と同じ種類のCPUを搭載し、同じ種類のOSの上で、同じ種類のミドルウェアを使った環境で行うのがベストだと思います。これまではローカルPCと本番サーバーや本番クライアントがスケールは違えど、近い構成だったのでローカルPCに開発ツールをインストールして開発環境にできました。

AWS Lambdaの本番環境って?

さて、AWS Lambdaは、どんな環境で動いているのでしょうか。


Lambda ランタイム
Lambda がランタイムでサポートする言語について説明します。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html


Go言語の場合、Intel CPU上で動くAmazon Linuxが本番環境です。この環境が良いのですが、下記のとおり、Amazon Linuxはサポートが終了していますので、Amazon linux 2が候補になります。

AWS は、標準サポート期間の一部として、2020年12月31日まで Amazon Linux AMI のセキュリティ更新とバグ修正を提供します。新しいアプリケーションの開発は Amazon Linux 2で行うことを強くお勧めします。


よくある質問 - Amazon Linux AMI | AWS
etc/yum.repos.d/epel.repo を変更します。 [epel] セクションで、 enabled=0 を enabled=1 に変更します。 一時的に EPEL 6 リポジトリを有効にするには、yum コマンドラインオプション -- enablerepo=epel を使用します。 Amazon Linux AMI リポジトリは、サードパーティーのリポジトリよりも高い優先度で構成されています。これは、Amazon Linux AMI に含まれるパッケージが、サードパーティーリポジトリにも含ま
https://aws.amazon.com/jp/amazon-linux-ami/faqs/


ミドルウェアは?

これまでは、ファイルシステムやデータベースシステムやHTTPサーバーなどのミドルウェアと組み合わせてシステムを開発してきました。これも本番環境と同様のミドルウェアを用意して開発環境に導入してきました。

AWS Lambdaは、サーバーレスですし、よりクラウドネイティブであるためには、汎用リソースによって提供されるAWSサービスと組み合わせるのベストでしょう。AWSの提供するサービスというのは、基本的にWebAPIを経由して使用します。また、サービスを使用するための認可は、IAMロールを使用します。


AWS サービスへのアクセスの提供
ロールを使用して IAM ユーザーに AWS サービスへのアクセスを許可します。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_common-scenarios_services.html


で、どうするか

以上から、Intel CPU上で動くAmazon Linux 2に適切なIAMロールを付与できる環境が本番環境に近い環境と言えます。

ごくごく普通の結論ですが、それは「Amazon EC2」です。EC2には、IAMロールを設定することができます。たった今コンパイルしてできたネイティブコードを新たにOS上で起動されたプロセスとして動作させようとする際に、そのプロセスにIAMロールを付与する方法を考えるよりも、EC2から他のAWSサービスへ要求を出す際にIAMロールを付与してもらう方が簡単です。

一方、開発効率を考えるとIDEも欲しいところです。何がベストかは宗教論争になるといけないので、本家ガイドの最初の候補だからという理由で(笑)Visual Studio Codeを使用することにしました。


Editor plugins and IDEs - The Go Programming Language
This document lists commonly used editor plugins and IDEs from the Go ecosystem that make Go development more productive and seamless. A comprehensive list of editor support and IDEs for Go development is available at the wiki. The Go ecosystem provides a
https://go.dev/doc/editors


VSCodeは、マルチプラットフォームなんですが、開発対象のシステムがどうしてもEXCELを使えないといけないとか(笑)いろいろな事情があって、Windows上のVSCodeをIDEにします。

おいおいEC2はどこへ行ったんだ?
EC2は、Windowsとは別に用意して、VSCodeのRemote Developmentという機能で、実際のソースコードや実行プロセスはEC2上ということができます。


Visual Studio Code Remote Development
Visual Studio Code Remote Development
https://code.visualstudio.com/docs/remote/remote-overview


まとめ

当社では、様々なライフイベントを乗り越えて、永く働くことができるように、コロナ禍前からオフィスにはリソースを置かず、全てをクラウド上に置くことで、時間と場所に縛られない環境を作ってきました。

各エンジニアには、Amazon WorkSpacesのWindows環境が提供され、そこにインストールしたVSCodeから、開発プロジェクト毎、担当メンバー毎に別途提供されるAmazon Linux 2のEC2にRemote Developmentによって接続するという開発環境にたどり着きました。開発プロジェクトを異動する場合には、別のEC2を用意して、元々の開発プロジェクトのEC2は停止しておきます。緊急で戻る場合はEC2を起動するだけで開発環境を復元することができます。

まさに「使いたい時」「使いたい場所で」「使いたいだけ」のクラウドネイティブな開発環境ではないでしょうか。

Invitation from 株式会社ROBON
If this story triggered your interest, have a chat with the team?
株式会社ROBON's job postings

AWS

Weekly ranking

Show other rankings
Like 荒木 岳夫's Story
Let 荒木 岳夫's company know you're interested in their content