AWS Lambdaの関数アップロードをお手軽に
Lambda関数を、ローカルPCからアップロードするコマンドをご紹介。ダウンロードも出来ますよっと。
Lambda関数はAWSのWEBコンソールで編集できますが、数が増えるとやってらんない。そして外部モジュールを使う場合はWEBでは無理ですし。
でき得るならばローカルで、編集したのをアップロードしたいのだけど、その都度ZIPしてアップしてとか、それはそれで手間がかかってイライラします…
photo credit: 150120-N-ZZ999-002 via photopin (license)
てなことで、怒りに任せて(笑)取り急ぎ、勢いで3つばかり作ってしまいました。
その後、いろいろ更新してnpmとして公開してます。 最新版では、SQLライクな構文でDynamoDBを操作できるようになりました。 これについては以下の記事で説明してます。
aws-node-utilのDynamoDB関連記事はこちらです:
1. コマンド
1-1. aws-lambda-get - Lambda関数をダウンロード
AWSのLambda関数をダウンロードします。
$ aws-lambda-get <function-name>
パラメータ
- function-name - Lambda関数名。
ちゃんとダウンロードできたら、カレントディレクトリに関数名のディレクトリが作られ、全てのファイルが展開されます。
安心してください、上書きしませんよ
既に同名のサブディレクトリがカレントディレクトリ直下にある場合はダウンロードしません。 ディレクトリの名前を変更して再実行してください。
1-2. aws-lambda-upload - Lambda関数を更新(上書き)
AWSのLambda関数をローカルファイルで更新します。
カレントディレクトリ直下の関数名のディレクトリをZIPファイルにまとめてAWSへアップロードして上書きます。
$ aws-lambda-upload <function-name>
パラメータ
1-3. aws-lambda-create - Lambda関数を新規作成
ローカルのLambda関数をAWSへアップロードし、新規作成します。
カレントディレクトリ直下の関数名のディレクトリをZIPファイルにまとめてAWSへアップロードします。
$ aws-lambda-create <function-name> <role-arn>
パラメータ
- function-name - Lambda関数名です。カレントディレクトリ直下に同名のサブディレクトリが必要です。それをZIPしてアップします。
- role-arn - Lamdaに付けられるRoleのarnを指定してください。RoleはAWS IAMで作成出来ます。
Node.js限定です
新規作成に関しては、言語はnode.jsだけで、ハンドラーは index.handler
に固定されています。
生成だけなら別途awsコマンドでやってもたいした手間ではありません。その後、uploadすれば大丈夫なんじゃないかな?(試してないのでスミマセン)
2. 機能説明
2-1. ローカルのLambda関数のディレクトリ構造
AWSからダウンロードするとカレントディレクトリ直下に関数名のサブディレクトリが作成されます。 このディレクトリは、そのままアップロードできる状態になっています。
例
たとえば、以下のようにHelloLambdaという関数をダウンロードすると、
カレントディレクトリ直下にディレクトリHelloLambda
が作成され、全ファイルが展開されます。
$ aws-lambda-get HelloLambda
以下は、HelloLambdaがモジュールを使用している場合の例です。
./HelloLambda/ index.js node_modules/ node-uuid/ ....
2-2. アップロード前に特定の処理を実行する
アップロードする前に、Lambda関数が利用しているモジュールを更新したり、エディタのテンポラリファイルを削除したくなると思います。
各関数のディレクトリ直下に、.onupload.sh
というファイルがあれば、アップロード前(正確にはZIPで固める前)に、これをシェルスクリプトとして実行します。
このファイル自体はAWSへはアップロードされません。
例
#node-uuidをインストール if [ ! -d node_modules ]; then npm install node-uuid else npm update node-uuid fi #VIMのバックアップファイルを消す rm *~ .*~
3. セットアップ
3-1. 実行環境と必要なツール等
利用するには、以下のものが必要です。
- AWSのアカウント - これがないと始まらない。今なら登録から1年間は基本的に無料。
- AWSCLI - AWSのコマンドラインインターフェースです。AWSからダウンロードしてインストールし、AWSアカウントで接続できるようにしておいてください。各コマンドから利用しています。
- Bash - コマンドがシェルスクリプトなので必要です。
- Node.js - JSONの処理等に利用しています。将来的には全部Nodeでやりたいです。
- Zip/Unzipコマンド - Lambda関数のアップロード、ダウンロードで必要になります。(Bashで最初から利用できるのかも?)
3-2. インストール方法
npmにpublishしたので、インストールは npm install -g aws-node-util
でOKです。
インストールスクリプトは INSTALL.sh
。
$ sh INSTALL.sh
実行すると、各スクリプトを ~/bin
へコピーし、node_modules以下のファイルを ~/node_modules
へコピーしています。
かなりいい加減なインストールスクリプトで申し訳ないです。当方MinGW使ってるのでこれで済んでいます。
可能ならば、Forkして適切に修正してください。そしてプルリク下さい。よろしくお願いいたします。
3-3. リポジトリ
ソースは全て以下のGitHubに置いています。 ご自由に利用なさってください(MIT license)。 他にも雑多なスクリプトが入っていますが、それはそれでまたおいおい。