本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーは一野瀬翔吾さんで、テーマは
サーバレスでコードを実行するサービスであるAWS
本稿のサンプルコードは、本誌サポートサイトから入手できます。
AWS Lambda ── サーバレスでコードを実行するサービス
AWS Lambdaはサーバレスでコードを実行するサービスです。
単にAWSでコードを実行するサービスと言えば、Amazon EC2
AWS LambdaではAWSがサーバの保守運用を代わりに行ってくれるので、ユーザーはサーバについて気にする必要はありません。コードの開発に集中できます。
AWS Lambda上で動かすコードのことをLambda関数と呼びます。Lambda関数は、プログラミング言語の関数と同じように、入力を受け取り、出力を返します。必要に応じて、Lambda関数はAWSのほかのサービスを呼び出すこともできます。
Perl Custom Runtime ── AWS Lambda上でPerlのコードを実行
執筆時点
ただし、AWS Lambda上で実際にPerlを動かすにはいくつもの手順が必要です。AWS Lambda用の特別なLinuxディストリビューションを用意し、そのLinux上でPerlをビルドしなければなりません。さらに、Custom Runtimeの仕様に合わせて起動スクリプトを書く必要があります。
その手間を省くために筆者は、AWS::Lambda
モジュールを開発しました。AWS::Lambda
モジュールがCustomRuntime用の起動スクリプトを提供するので、みなさんは自分のやりたいことに集中して、Perlのコードを書けばよいのです。それに合わせて、AWS Lambda用にビルドしたPerlのバイナリを、Perl Custom Runtimeとして公開しています。Perl Custom RuntimeにはあらかじめAWS::Lambda
モジュールをインストールしてあるので、簡単にPerlのコードを動かすことができます。
AWS Lambdaへのデプロイ
まずは、入力をそのまま返すだけの簡単なLambda関数をAWS Lambdaへデプロイしてみましょう。Lambda関数をデプロイするには大きく分けて、マネジメントコンソールを使ってブラウザからデプロイする方法と、AWS SAMを使ってCLI
マネジメントコンソールからデプロイ
マネジメントコンソールはブラウザから利用できるので、初心者の方にお勧めの方法です。
なお、本稿では執筆時点のスクリーンショットを掲載していますが、マネジメントコンソールは頻繁に改善が加えられています。みなさんが実行するときには、デザインや操作方法が異なる場合があります。
関数の作成
Lambda関数のデプロイを行うには、マネジメントコンソールからLambda関数の作成画面を開きます
「関数の作成」
Perl Custom Runtimeの設定
ここに、Perl Custom Runtimeが動作するのに必要な設定を追加していきます。執筆時点の最新バージョンであるPerl 5.
図2の画面をスクロールしていくと、handler.
を指定します。同様にarn:aws:lambda:ap-northeast-1:445285296882:layer:perl-5-36-runtime-al2-x86_
を入力しましょう。
これでPerl Runtimeの設定は完了です。正しく設定が行えていれば、図3のような画面になるはずです。
ソースコードのアップロード
実行環境の設定が終わったので、いよいよPerlのソースコードを書きましょう。Lambda関数はPerlのサブルーチンとして実装します。次のソースコードは、入力をそのまま出力するLambda関数です。
図3の画面をスクロールすると図4のコンソールコードエディタが表示されます。表示されたコンソールエディタにこのソースコードを入力します。
関数の動作確認
入力したコードはコンソールコードエディタからデプロイと実行ができます。
初回実行時はダイアログが開いて、Lambda関数へどんなデータを入力するかを聞かれます。入力データはJSON形式です。例として次のJSONデータがあらかじめ入力されているので、そのまま実行しましょう。
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
実行がうまくいけば、図4の
AWS SAMを用いたデプロイ
AWS SAM
テンプレートの作成
以下は、Perl Custom Runtimeを用いたアプリケーションの設定例です。
SAM CLIのインストール
SAMテンプレートをデプロイするにはSAM CLIを利用します。macOSやLinuxを使っており、Homebrewが利用可能な場合は、次のコマンドでインストールできます。
$ brew tap aws/tap $ brew install aws-sam-cli
そのほかのOSへのインストール方法は、公式ドキュメントの
関数のデプロイ
デプロイにはdeploy
サブコマンドを利用します。初回デプロイ時は--guided
オプションが便利です。--guided
オプションを使ってdeploy
サブコマンドを実行すると、デプロイに必要な項目を対話形式で設定できます。すべてデフォルトのままで設定してかまいません。
$ sam deploy --guided
関数の動作確認
デプロイが完了したら、AWS CLIを使って動作を確認してみましょう。次のコマンドを実行すると、AWSのサーバ上で関数が実行され、response.
に関数の実行結果が保存されます。simple-perl-app-Function-wCB4tK9B6B
の部分は、新しいLambda関数を作成するたびに変わります。みなさんの環境に合った名前へ置き換えて実行してください。
$ aws lambda invoke \ --function-name simple-perl-app-Function-wCB4tK9B6B \ --cli-binary-format raw-in-base64-out \ --payload '{"key":"value"}' \ response.json
<続きの