22
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWSのLambdaを使ってみた

Posted at

AWSのサービスの一つであるLambdaを使用してみたので、使い方等のメモ。

Lambdaとは

簡単に言うと、サーバを用意することなくコードをアップロードしてトリガを設定しておくだけでコードを実行してくれるプラットフォーム。

トリガ

以下のリソースへのアクセスをトリガとして設定できる。

  • S3
  • DynamoDB
  • Kinesis
  • SNS

また、cronのような設定や、「API Gateway」と組み合わせることも可能。

言語について

Lambda上で実行できる言語は、以下の通り。

  • Node.js
  • Python
  • Java

Java以外の言語については、コードをアップロードするだけでなくてAWSのコンソール上で直接コードを書くことができる。

作り方

言語には「Node.js」、トリガに「S3」を使用したサンプルをやってみる。

  1. AWSコンソールから「Lambda」を選択して、「Create a Lambda function」をクリック
  2. 「Select blueprint」という画面が表示されて、おそらくテンプレートを選べるのだろうけど、ここでは、何も選択せずに「skip」をクリック
  3. 「Name」「Description」に適当なものを入力し、「Runtime」には「Node.js」を選択
  4. 「Lambda function code」のテキストエリアにコードを書いていく(コード例は後述)
  5. 「Role」の個所では、今回はS3を使用するので、「S3 execution role」を選択する。すると、別ウインドウが開くので、特に変更せずに「許可」をクリック
  6. 「Memory」や「Timeout」は特に問題なければそのまま
  7. 「Next」をクリック
  8. 「Create function」をクリック
  9. 作成したfunctionの詳細画面が表示されるので、トリガの設定を行っていく
  10. 「Event sources」のタブをクリック
  11. 「Add event source」をクリック
  12. ダイアログが表示されるので、「Event source type」に「S3」を選択
  13. さらに細かい設定が表示されるので設定する
  • Bucket: 監視するバケットを選択
  • Event type: トリガとなるイベントを選択
  • Prefix: ファイル名のPrefixを設定できる
  • Suffix: ファイル名のSuffixを設定できる
  1. 「Submit」をクリック

コード例

S3にアップロードされたファイル名を表示するコードはこちら。

// 開始ログ出力
console.log('Loading event');

exports.handler = function(event, context) {

  // 引数のeventにはトリガに応じたObjectが渡ってくる。
  // それぞれどんな形式かは、コードの編集画面の「Actions」→「Configure test event」
  // で確認できる
  console.log(event.Records[0].s3.object.key);

  // 終了
  context.succeed('handler complete');

};

おまけ

コード内でhttp通信したい場合は以下のような感じで。
LambdaというかNodeのサンプルみたいな感じですが。。。

var http = require('http');
var querystring = require('querystring');
var https = require('https'); // https用

console.log('Loading event');

exports.handler = function(event, context) {

// 「GET」の例
  http.get('${url}', function(res) {
    res.setEncoding('utf8');
    res.on('data', function(str) {
      console.log(str);
      context.succeed('handler complete');
    }).on('error', function(e) {
      context.done('error', e);
    });
  });
    
// 「POST」の場合
//    パラメータの組み立て
//    var data = querystring.stringify({
//        name: 'sugasawa',
//        email: 'hoge121@example.com'
//    });

//  var options = {
//    hostname: '${host}',
//    port: ${port},
//    path: '${path}',
//    method: 'POST',
//    headers: {
//      'Content-Type': 'application/x-www-form-urlencoded',
//      'Content-Length': Buffer.byteLength(data)
//    }
//  };

//  var req = http.request(options, function(res) {
//    res.setEncoding('utf8');
//    res.on('data', function (body) {
//      console.log(body);
//      context.succeed('handler complete');
//    });
//  }).on('error', function(e) {
//    context.done('error', e);
//  });

//  req.write(data);
//  req.end();

};
22
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?