Server

LocalStackのLambdaをホットリロードさせる

投稿日:

はじめに

前回に引き続きAWS Lambdaについて取り扱っていきます。今回はLocakStackでホットリロードさせるための設定について紹介します。

全体の流れ

まず初めに、どのようにホットリロードを実現するかについて簡単に紹介します。

大まかな流れは以下のとおりです。

  • コードの変更を検知する(Watchman)
  • 実行ファイルををビルドして、Lambdaにdeployする

それぞれについて、もう少し深掘りします。

コードの変更を検知する

コードの変更の検知にはWatchmanを用います。

Watchmanの機能の1つとして、ファイルを監視しファイルが変更されたときにアクションをトリガーすることができます。

インストール方法については割愛しますので、適宜公式ドキュメントを確認の上、予めインストールしてください。

ファイルをビルドしてdeployする

実行ファイルのdeployについては、AWS CLIの update-function-code APIで行います。

ホットリロードを実現する

それでは、前回のコードをホットリロードできるように改修します。

deployスクリプトを作成する

前回のdeployスクリプトでは、Lambda関数を一度削除してから再度作り直していました。今回はSQS周りの設定などは使い回せるように、実行ファイルのみアップデートするdeployスクリプトを新たに作成します(既存のdeployスクリプトは初回だけ実行するため、lambda_create.shにリネームしておきます)。

新しいdeployスクリプトは以下のとおりです。

get_message/main.go をビルドしてZIP化し、 update-function-code でZIPをアップロードしています。

Watchmanのラッパースクリプトを作成する

つぎに、Watchmanのラッパースクリプトを作成します。

このスクリプトでは、 get_message ディレクトリを監視対象として、更新があった場合に lambda_deploy.sh を実行します。

スクリプトは以下のとおりです(こちらをほぼそのまま使用)。

get_message ディレクトリのファイルに変更があった場合、 lambda_deploy.sh が実行され、Lambdaが更新されます。

実際に動かしてみる

前回と同様に、LocakStack上にLambdaをdeployして実行すると、コンテナ内に以下のようなログが出力されます。

そして、先程作成した hot-reload.go を実行した状態で get_message/main.go を変更してみると、Lambdaが更新され、コンテナが削除されます。

この状態で再度Lambdaを動かしてみると、このようにログに hot reloaded のメッセージ(fmt.Printlnで出力させた)が表示されるようになっています。

これで、変更がLambdaに反映されていることが確認できました。

おまけ

おまけとして、Lambdaに実行ファイルではなくコンテナをdeployして実行する方法を紹介します。

やりかたは簡単で、ECRにDockerイメージをアップロードしておき、Lambda関数の作成時に「コンテナイメージ」を選択して、イメージのURIを指定するだけです。

その際、コンテナイメージの下記の項目を上書きすることができます。

  • ENTRYPOINT
  • CMD
  • WORKDIR

ENTRYPOINTとCMDに関してはカンマ区切りで複数の値を指定できます。

おすすめ書籍

エバンジェリストの知識と経験を1冊にまとめた AWS開発を《成功》させる技術 AWS運用入門 押さえておきたいAWSの基本と運用ノウハウ AWSではじめるインフラ構築入門 第2版 安全で堅牢な本番環境のつくり方

blog-page_footer_336




blog-page_footer_336




-Server
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

aws

ECSとCWLでのアラームの設定

1 はじめに1.1 全体の流れ2 CloudWatch Logsでロググループを作成する3 ECSでタスク定義を作成(更新)する4 CloudWatch Logsでメトリクスフィルタを作成する5 SN ...

DockerのQuickstart:Compose and Railsをやってみた

1 はじめに1.1 環境1.2 Docker for Macのインストール2 Railsプロジェクトを作成するまで2.1 Railsのプロジェクトディレクトリの作成2.2 Dockerfileの作成2 ...

aws

Amazon ECSでGoのEchoサーバを立ち上げる

1 はじめに2 全体の流れ3 サービスの概要3.1 IAM(Identity and Access Management)3.2 VPC(Virtual Private Cloud)3.3 ECR(E ...

MySQL 5.7 オプティマイザの改善〜UNION ALL〜

1 はじめに2 「UNION」と「UNION ALL」の違い3 MySQL 5.7での「UNION ALL」の改善とは4 MySQL 5.7での実行計画4.1 UNION ALL実行計画4.2 UNI ...

aws

AWS LambdaとAPI GatewayでサーバレスなAPIを実装

1 はじめに2 AWS Lambdaとは2.1 利用できる言語2.2 Lambdaの制約3 LambdaでAPIをリリースするためにやること4 Lambda関数の作成4.1 関数の作成4.2 ランタイ ...

フォロー

blog-page_side_responsive

2023年10月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。