AWS Lambda でサーバーレスに処理する

AWS Lambda の Lambda 関数を使ってサーバーレスに処理実行をしてみます。

AWS Lambda

Lambda を使用すれば、サーバー管理を必要とせずにコードを実行できます。課金はイベント時(実際にコードが実行されたとき)のみ発生します。今回は Node.js で実行してみます。

現在の対応言語

  • Node.js
  • Java
  • C#
  • Python

自動デプロイ

  • AWS CodePipeline
  • AWS CodeBuild

メリット

  • サーバー管理が不要
  • 継続的スケーリング
  • ミリ秒単位の課金

デメリット

  • インスタンスへはログイン不可
  • インスタンスのカスタマイズ不可

Lambda 関数実行

Lambda 関数をテスト実行するには下記手順となります。

  1. Lambda コンソールを起動
  2. Lambda の設計図を選択
  3. Lambda 関数を設定して作成
  4. Lambda 関数を呼び出して結果を検証
  5. メトリクスをモニタリング
  6. Lambda 関数を削除

S3 で使用

まず、バケットを2つ作成します。

  • ソースバケット
  • ターゲットバケット

次に、Lambda 用の IAM ロールを作成します。

  • ロールを使用するサービスに「Lambda」を選択
  • 「S3」からのアクセス権限を付与
  • 「Amazon CloudWatch Logs」からのアクセス権限を付与

デプロイパッケージの作成

デプロイパッケージは、Lambda 関数のコードと依存関係を含む .zip ファイルのことです。今回はわかりやすく手動で行ってみます。

まず、デプロイパッケージ用のディレクトリに依存関係にある2種類のライブラリ async と gm を npm でインストールしておきます。

次に、処理内容の js ファイルにS3用のサンプルコードを使用して作成します。処理内容としては、S3 バケットに画像をアップロードすると、それをトリガーに別の S3 バケットにリサイズした画像をアップロードする処理を作成します。

次に、ディレクトリの中身を zip ファイルにしてデプロイパッケージを作成します。

次に、作成したデプロイパッケージを Lambda 関数にアップロードします。

Lambda 関数を作成

コンソールまたは AWS CLI からデプロイパッケージをアップロードします。

手動テスト

作成した関数はコンソールか AWS CLI を使用してテストできます。

イベントソースを設定

イベントを発行する S3 を設定します。

ここでは「ソースバケット」を指定します。

テスト

サンプルイベントの「S3 Put」を使用して実行します。

検証

  1. S3 から「ソースバケット」に画像をアップロードします。
  2. アップロードをトリガーに自動で Lambda 関数が実行されます。
  3. Lambda 関数により「ターゲットバケット」に画像がリサイズしてアップロードされます。

CloudWatch よりログを確認することで処理の内容が分かります。

まとめ

EC2 は仮想サーバとなりますが、Lambda はサーバーレスで負荷やメンテの管理コストを気にせずコードに集中できるということのようです。そのかわり、コンピューティングインスタンスにログインしたり、OSなどをカスタマイズしたりすることはできなくなります。現状では、複雑な構成のアプリケーションでは無く、シンプルな構成のアプリケーションに向いているようですね。今後の発展も注視したいと思います。

参考

AWS Lambda とは

AWS Lambda (サーバーレスでコードを実行・自動管理)

返信を残す

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

CAPTCHA