はじめに
こんにちは、k_ukiです。
「AWSではじめるクラウド開発入門」の10章と11章を進めていきました。
そこでは、サーバーレスクラウドに関連する技術が取り上げられており、「Lambda」「S3」「DynamoDB」の3つの技術をハンズオン形式で学習しました。
その中でも、今回は「Lambda」について学んだことをまとめていきます。
「Lambda」とは?
簡単にまとめるとサーバーレスコンピューティングにおいて、プログラムの処理を担う部分にあたります。
Lambdaを理解するにおいて、まずサーバーレスコンピューティングの概要について学ぶ必要があります。
サーバーレスコンピューティングとは?
今回は、webアプリケーションを開発&デプロイするケースを例とします。
従来通りであればプログラムを実行するためのwebサーバが必要となります。また、そのwebサーバーを実行するためのOSサーバーの環境なども構築する必要があります。webアプリケーションを開発&デプロイする際に、実行環境の構築はかなり大変な作業となります。この従来のシステムをサーバーフルといいます。
サーバーレスコンピューティングは、簡単にいうと、EC2等でサーバーを構築しなくてもプログラムの処理を実行できるようにする考え方です。ユーザは実行環境を構築する必要がなく、アプリケーションで実行したい処理のみを記述すればよくなります。
サーバーレスコンピューティングでは、webサーバやOSサーバの代わりにLambdaがプログラムの実行を担っています。
Lambdaを触ってみた
今回のハンズオンではSTEP1,STEP2の二つを実施しました。それぞれの内容は以下の通りです。
- STEP1: AWS CDKを使用し、PythonのコードをLambdaに登録してみる。
- STEP2: Invoke APIを用いて複数のLambdaを起動し並列な計算を行う。
また、登録するPythonファイルの内容は、["salmon","tune","squid"]の3種類の文字列をランダムに選択し、文字列を返すという簡単な関数となっています
STEP1
STEP1ではPythonのコードをLambdaに登録する作業を行いました。
まず、プロジェクトのディレクトリに移動し以下のコマンドを実行しました。
# venvを作成し、依存ライブラリのインストール
$ python3 -m venv .env
$ source .env/bin/activate
$ pip install -r requirements.txt
# デプロイの実行
$ cdk deploy
実行後、以下の文字列が返されました。正しくデプロイできたことがわかります。
AWSコンソールにアクセスし、関数名をクリックすると無事登録した関数を表示させることができました。
これで、登録は完了です!
STEP2
STEP2ではInvoke APIを用いて実際に計算を行いました。
まずは1回だけ処理を実行してみます。
以下のコマンドを実行します。
$ python invoke_one.py #{デプロイ時に出力されたランダムな文字列}
実行したところ以下の結果が得られました。これにより、クラウド上で関数が動き実際に出力が返されたことがわかります。
"Welcome to Cloud Sushi. Your order is salmon"
次に同時に100のタスクを実行するために以下のコマンドを実行しました。
$ python invoke_many.py #{デプロイ時に出力されたランダムな文字列} 100
その結果以下のような出力が返されました。
Submitted 100 tasks to Lambda!
コンソールを確認したところしっかりタスクが受理されていることを確認できました。
スタックの削除
演習は完了なので以下のコマンドでスタックを削除しました
$ cdk destroy
さいごに
以上が今回行ったLambdaの演習内容です、この演習でサーバーレスコンピューティングとは何か、関数を実際に登録し、処理を実行させる流れを掴むことができました。