AWS Lambda Custom Runtime シェルを動かしてみた

Pocket

これは TECHSCORE Advent Calendar 2018 の25日目(最終日)の記事です。

こんにちは、宮垣です。
テックスコアブログに投稿するのは約4年ぶりになりますが、よろしくお願いします。

さて、先日、AWS re:Invent 2018のKeynote Day2 で AWS Lambda に新機能、Custom Runtime がサポートされることが発表されました。
AWS Lambda がカスタムランタイムをサポート

今回は、この新機能を利用してLambdaでシェルを動かすテストをしてみたいと思います。

Custom Runtime を動かすためのチュートリアルが公式ドキュメントに用意されていますので
これを参考にしながら、主にマネジメントコンソールを利用して実施していきます。

Tutorial – Publishing a Custom Runtime - AWS Lambda

1.関数の作成を開始

まずは関数の作成を行います。
AWS Lambda のコンソールから「関数の作成」ボタンをクリックします。


次に、関数の詳細項目の設定を行います。

  • ポイント1
    Custom Runtimeを利用するため、「ランタイム」項目は
    「関数コードまたはレイヤーでカスタムランタイムを使用」を選択すること
  • ポイント2
    「ロール」項目は「1つ以上のテンプレートから新しいロールを作成します。」を選択し
    任意の名称を入力すること
    #チュートリアルの「To create an execution role」の箇所と同じことになる

2.関数ファイルの準備

チュートリアル#Using a Custom Runtime

に沿って、2つの関数ファイルを準備し、パッケージングを行います。

  • bootstrap(Runtime Bootstrap file)
    ファイル名をbootstrapとした実行可能なファイルです。
    デプロイメントパッケージ内の bootstrap という名前のファイルがまず実行されます。
  • function.sh(Function file)
    bootstrapから呼び出される関数で、実際の処理の中身はここに記載します。任意のファイル名で良いです。

bootstrap

function.sh

実行権限を付与しzipパッケージにする

あともう少し。

3.テストイベントの設定

パッケージアップロード後の動作確認ためのテストイベントの作成です。
テストイベント名を決めて作成完了します。

・イベント名を決めるときに何度か怒られたので、以下のルールは満たすように!

・半角英数字のみ

・最大長は25文字

4.パッケージのアップロードと実行

上記で作成した「lambda-custom-runtime-for-shell.zip」を、「アップロード」ボタンよりアップし、
「ハンドラ」項目にシェル内の関数名「function handler」を指定して、設定を保存します。

これで全ての準備が完了しました。

「テスト」ボタンを押下した結果が以下。

無事に成功しました!

テストイベントによって渡されたJSONデータをシェルが受け取って出力(echo)する ということが実現できていますね。

また、CloudWatch Logs にも成功ログが出力されています。

5.まとめ

今回はチュートリアルスクリプトのテストを実行しただけですが、入力された値をechoするだけでなく整形して返したり、サービス死活監視の仕組みを作ってみたりしてみるとと面白いかもしれません。

既にCustom Runtime関連の記事は世に多く出ていますが、多くの言語でLambda関数を動作させることができるようになったことで、今後、活用方法がどんどん共有されていくのではないかと思います。
#キーワード:AWS Lambda Custom Runtimes芸人

おまけ.Custom Runtime実行エラー

Windows環境にて、bootstrapファイルを編集した後、再度zip化したものをアップロードしてしまうとパーミッションエラーでうまく実行できませんでした。
/var/task/bootstrap : permission denied

ちゃんとチュートリアルに Linux 互換環境を用意するように!と書いていましたので
関数ファイルに「実行権限」を付与する設定は重要ですね。
#問題解決に協力してくれた 鎌田悠平 編集長 ありがとうございました。m(_ _)m

Pocket

Comments are closed, but you can leave a trackback: Trackback URL.