前回はAWSを使ってみる – S3で静的ウェブページ配信と題して、独自ドメインでアクセスできるサイト構築をやってみました。今回はサーバレスアーキテクチャーの中核を担うLambdaを利用してみます。具体的には、S3にアップロードしたjsonファイルに変更を加える枠組みを作ってみようと思います。
結論
- Lambdaの料金は一瞬しかコンピュートリソースを占有しないため、非常に安い。
- 今回のお試しだとほぼ無料だと思ってよさそう。
- jsonファイルをS3にアップロードすることをトリガーとするLambda関数が作成できた。
- Lambda関数内では、S3にフルアクセスできるアクセスキーを利用し以下の共同が実現できた。
- アップロードしたjsonファイルを取得
- jsonに変更
- 別のS3バケットにjsonファイルを保存
- CloudWatchで、アップロードした際にLambdaが動いている挙動も確認できた。
利用するAWSサービス
- S3
- Route53
- Lambda
- CloudWatch
- IAM
前提知識
- 前回のAWSを使ってみる – S3で静的ウェブページ配信の内容を理解している
- IAMのグループ・ユーザ・ロール・ポリシーなどをなんとなく理解している
料金
- Lambda
- 利用料見る感じだと、ちょっと使う分には無料枠で事足りそう
- https://aws.amazon.com/jp/lambda/pricing/
- CloudWatch
- こちらも、 無料枠で事足りそう
- https://aws.amazon.com/jp/cloudwatch/pricing/
具体的な手順
- S3
- アップロード用のバケット作成
- 変更したオブジェクトを保存するバケット作成
- Lambda
- 関数を作成:一から作成する
- 関数名:upload-sample
- ランタイム:Nodejs 8.10
- ロール:「1 つ以上のテンプレートから新しいロールを作成します。」を選択してロールを作成
- ロール名:upload-sample-role
- ポリシーテンプレート:「Amazon S3 オブジェクトの読み取り専用アクセス権限」を追加
- 「関数の作成」で決定する
- UIでS3のトリガーを追加する
- イベント発火元に<アップロード用のバケット>を指定
- IAM
- コード内でS3へのGET権限・PUT権限などが必要なのでIAMロールからAPIkeyを発行する
- それとなくグループ・ユーザを作成し、「AmazonS3FullAccess」のポリシーを付与する
- APIkeyは「ユーザ」の「認証情報」の「アクセスキーの作成」から作成する
- 何度も作り直せるが、secretAccessKeyは作成の際のみ表示されるので、ここでメモしておく。
- Lambda
- 以下のようなコードを記述
- eventからputされたバケット名とkey(バケット内のファイルパス名)を取得
- jsonオブジェクトGET
- jsonオブジェクトに変更を加える
- jsonオブジェクトをPUT
- config.jsonファイル(S3認証情報)を配置する
- 変更したオブジェクトを保存するバケット側に、意図したjsonが保存されていればおk
- 以下のようなコードを記述
サンプルコード
サンプルコードでは、S3にアップロードする際にjson/以下に保存するようにしているため、前もって保存用のS3バケットにjsonフォルダを作成しています。
コメント