LoginSignup
15
15

More than 5 years have passed since last update.

CoffeeScriptで記述したAWS Lambda関数をGulpでデプロイする

Last updated at Posted at 2015-07-15

タイトルの通り、AltJS系言語であるCoffeeScriptを用いてAWS Lambda関数を記述し、それをGulpを使ってデプロイする手順について述べます。

※2015年10月9日追記

より手軽にAWS LambdaでCoffeeScriptを使うためにlamjetというツールを作成し、それについての記事を書きました。あわせてご参照ください。
lamjet を使って AWS Lambda に CoffeeScript で書かれた関数を楽々デプロイする方法

1. やりたいこと

  • AWS Lambdaの関数(以下、Lambda関数)をCoffeeScriptを用いて記述する
  • Lambda関数をgulpコマンド1発でデプロイする

2. 結論

lambduh/lambduh-gulpを使うのが便利です。ZIPファイルの生成、アップロードなどのGulpタスク一式が含まれています。

他にも以下の様なGulpプラグインが見つかりますが、どちらもLambda関数の登録、アップロードを主眼としており、関連タスクまでは含まれていません。複数のLambda関数のアップロードを行うなど、より細かい、より複雑な制御を行う場合は、これらの方が便利かもしれません。

3. jsタスクの上書き

lambduh/lambduh-gulpはJavaScript用に作られているため、CoffeeScriptを使う場合にはjsタスクの上書きが必要です。

gulpfile.coffee(抜粋)
# ...
gulp.task "js", ->
  gulp.src("./src/*.coffee")
    .pipe(coffee({bare: true})).on("error", gutil.log)
    .pipe(gulp.dest("./dist"))

4. ファイル構成

今回は、1つのLambda関数を1つのディレクトリとして管理します。ファイル構成は以下の通り。

lambda-function-name/  ..  Lambda関数の管理用ディレクトリ。
  dist/  ................  ビルド結果が格納されるディレクトリ。Gulpにより生成される。
  node_modules/  ........  パッケージディレクトリ。
  src/  .................  CoffeeScriptを格納するディレクトリ。
    index.coffee  .......  Lambda関数の本体。
  dist.zip  .............  Lambda関数のZIPアーカイブ。Gulpにより生成される。
  gulpfile.coffee  ......  Gulpの設定ファイル。後述。
  lambda-config.js  .....  Lambda関数の設定ファイル。後述。
  package.json  .........  パッケージの設定ファイル。後述。

5. 設定ファイルの例

設定ファイルの例は以下の通り。少なくともlambda-config.jsFunctionNameRoleRegionを環境に合わせて書き換える必要があります。

gulpfile.coffee
gulp        = require "gulp"
coffee      = require "gulp-coffee"
gutil       = require "gulp-util"
lambduhGulp = require "lambduh-gulp"

lambduhGulp gulp

gulp.task "js", ->
  gulp.src("./src/*.coffee")
    .pipe(coffee({bare: true})).on("error", gutil.log)
    .pipe(gulp.dest("./dist"))
lambda-config.js
module.exports = {
  FunctionName: "function-name",
  Description: "description",
  Handler: "index.handler",
  Role: "arn:aws:iam::XXXXXXXXXXXX:role/yyyy",
  Region: "us-east-1",
  Runtime: "nodejs",
  MemorySize: 128,
  Timeout: 3
}
package.json(抜粋)
{
  "devDependencies": {
    "coffee-script": "^1.9.3",
    "gulp": "^3.9.0",
    "gulp-coffee": "^2.3.1",
    "gulp-util": "^3.0.6",
    "lambduh-gulp": "^0.1.1"
  }
}

6. デプロイ

上記の設定ファイルを用意することで、下記の1行でLambda関数がビルド、ZIPファイル化、アップロードされます。
内部的にaws-sdkが使われており、AWS CLIなどと同様に、認証に関する情報を~/.aws/credentialsファイルや環境変数に設定する必要があります。

$ gulp zipload

7. 参考

15
15
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
15
15