AWSを使ってみる – jsonファイル変更 from S3 to S3 via Lambda

プログラミング
この記事は約3分で読めます。

前回はAWSを使ってみる – S3で静的ウェブページ配信と題して、独自ドメインでアクセスできるサイト構築をやってみました。今回はサーバレスアーキテクチャーの中核を担うLambdaを利用してみます。具体的には、S3にアップロードしたjsonファイルに変更を加える枠組みを作ってみようと思います。

結論

  • Lambdaの料金は一瞬しかコンピュートリソースを占有しないため、非常に安い。
    • 今回のお試しだとほぼ無料だと思ってよさそう。
  • jsonファイルをS3にアップロードすることをトリガーとするLambda関数が作成できた。
  • Lambda関数内では、S3にフルアクセスできるアクセスキーを利用し以下の共同が実現できた。
    • アップロードしたjsonファイルを取得
    • jsonに変更
    • 別のS3バケットにjsonファイルを保存
  • CloudWatchで、アップロードした際にLambdaが動いている挙動も確認できた。

利用するAWSサービス

  • S3
  • Route53
  • Lambda
  • CloudWatch
  • IAM

前提知識

料金

具体的な手順

  • 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
    • 以下のようなコードを記述
      1. eventからputされたバケット名とkey(バケット内のファイルパス名)を取得
      2. jsonオブジェクトGET
      3. jsonオブジェクトに変更を加える
      4. jsonオブジェクトをPUT
    • config.jsonファイル(S3認証情報)を配置する
    • 変更したオブジェクトを保存するバケット側に、意図したjsonが保存されていればおk

サンプルコード

サンプルコードでは、S3にアップロードする際にjson/以下に保存するようにしているため、前もって保存用のS3バケットにjsonフォルダを作成しています。

コメント

タイトルとURLをコピーしました