AWS Lambda で S3 のアップロードログを取る
Why?
- Lambda の練習用
- S3 のイベントを拾う
- ログに書き込む
- 特に他のサービスと連携しない
Code
- Handler: logS3.handler
- Add event source: S3のPutイベントを拾う
- IAM: Putイベントを拾う対象のReadイベントが必須
console.log('Load Lambda function'); var AWS = require('aws-sdk'); exports.handler = function (event, context) { console.log("Received event"); var bucket = event.Records[0].s3.bucket.name; var object = event.Records[0].s3.object.key; console.log("bucket name: " + bucket + " / object key: " + object); console.log("done"); };
Result
- Monitor tabでinvoke確認
- Cloud watch でログを確認
- ちゃんと出てた
bucket name: for-lambda-test2 / object key: hoge.jpg
Lambda の Add event source でエラーになる
What's happen?
- エラーが出て、event sourceを登録できない
There was an error creating the event source mapping: Configurations overlap. Configurations on the same bucket cannot share a common event type.
原因
- 英語そのまま
- イベントの設定が重複しているから、登録できない
解決方法
- 他のイベントと重複していないか確認する
- 他のイベントからイベントを削除する(disableにしてるだけじゃだめ) or 違うイベントを設定する
iterm2 でタブをウィンドウに分割したあと統合できない
What's happen?
- Cmd + option + Shift で画面を掴むと、画面分割状態としては統合できる
- 本当はタブとして統合したい…
解決方法
- まだわかんないです…
TODO
- 解決する
chromeで、はてなと四角の記号に文字化けする
What happen?
- バージョン情報
- OS X El Capitan version 10.11.4
- Version 49.0.2623.110 (64-bit)
やってだめだったこと
- コピペしてみたらちゃんと日本語になってる
- エンコードの問題ではない
- フォント?
原因
解決方法
- Open Sans フォントをインストールする
- 右上の↓ボタンからzipでダウンロード
- https://www.google.com/fonts/#UsePlace:use/Collection:Open+Sans
追記
- Roboto フォントでも化けたのでこちらも同様に
参考
AWS Lambda で node.js 実行時に出たエラーと対処方法
What for?
- Hello world 的なことをしようとしたら引っかかった
Handlerがない
"errorMessage": "Handler 'handler' missing on module 'index'"
- エラーの意味
- handlerが見つからないよ
- 原因と対処
- handler がタイポってるならタイポをなおせ
- そもそもちゃんと
exports.handler = function(event, context) {
を書こう
初期実行で指定したModuleがない
"errorMessage": "Cannot find module 'index'"
- エラーの意味
- index module が見つからないよ
- 原因と対処
- Lambda上で設定したHandler名とfile名の不一致だから、設定とfile名を合わせよう
特定のModule(ライブラリ)がない
"errorMessage": "Cannot find module 'xxx'"
- エラーの意味
- xxx module が見つからないよ
- 原因と対処
- プログラムで呼び出しているModuleがzipで一緒にアップロードされてない
- Moduleのzipの構造が間違っている
- zipにディレクトリ本体を含めない。
$ zip -r tryCallback.zip index.js node_modules
タイムアウトになる
`Process exited before completing request
AWS Lambda を使ってみる
What for?
- アプリケーションを実行するために、リソースの計画をして、サーバーを立てて、それを監視する必要があるが、それはだるい。
- リソース管理や監視は全部Lambdaがやってくれるので、アプリケーション開発に集中できる。
どういうことができる?
- イベントをトリガとして、プログラムを非同期実行できる
- データ処理、ファイル処理、ストリーム処理、DB抽出、IoTバックエンドetc...
- イベントにはプルイベント、プッシュイベント、スケジュールイベントがある
- プルイベント: Lambdaが某のイベント発生をポーリングする
- プッシュイベント: Lambdaに某がイベントを発行する
- スケジュールイベント: cronのようなもの
- 監視はCloudWatchでモニタリング可能
- バージョン管理がある。
お値段は?
- 2016/4/23時点で
- リクエストのうち毎月最初の 1,000,000 件は無料
- その後は 0.20 USD/1,000,000 件のリクエスト(0.0000002 USD/秒)
やってみる
とりあえずScheduled Eventで走らせてみる
Create New function
Step 1: Select blueprint
はSkipStep 2: Configure function
- 名前つけて、言語選択して、
Edit code inline
にコードを貼り付ける。 - ロールは
Basic execution role
でOK。その他はdefaultで。
- 名前つけて、言語選択して、
設定し終わったら
Event source
タブから、1分ごとのScheduled Event を設定するNode.js でとりあえず以下のコードで実行してみる
console.log('Hello World');
- Monitoring タブを確認したら、めっちゃ
Handler 'handler' missing on module 'index'
エラーが出た
exports.handler = function (event, context) { context.succeed('Hello World'); };
- ちゃんと書いた。問題なく1分ごとにlogが吐かれている。
- 止めるときは、Event sourceをDisableにする
TODO
Git での Committer と Author の違いは?
Why?
- 以下記事にて、Git での Committer と Author の違いについて気になった
Committer と Author の違い
- 意味
- Author: オリジナルのコードを書いた人
- Committer: コミットをした人
- なぜ?
- Git は rebase などで歴史を改変できるので、
commit --amend
などを行っても、オリジナルのコードを書いたのが誰かがわかるように Author が変更されない$ git commit --amend
: これは Committer しか変更されない$ git commit --amend --author="kz-engineer <kz-engineer@example.com>"
: Author option をつけることで、オリジナルを書いた Author の歴史も改変できる
- Git は rebase などで歴史を改変できるので、
普段の git log はどっちを表示してる?
- 通常時: Authorだけの表示
$ git log commit <sha1> Author: <author> Date: <author date>
- fuller表示: Committer と Author 両方が表示
$ git log --pretty=fuller commit <sha1> Author: <author> AuthorDate: <author date> Commit: <committer> CommitDate: <committer date>
TODO List
- 他にも色々とLogの表示法がありそう Git - git-log Documentation