(レポート) AWSモバイル/IoTサービス徹底攻略!! 「Using Amazon API Gateway with AWS Lambda to Build Secure and Scalable APIs」 #cmdevio

朝のジャスミン茶は欠かせない田宮です。
本日11/21(土)に目黒のAWSJにて開催された「AWSモバイル/IoTサービス徹底攻略!!〜Developers.IO Meetup番外編〜」のレポートを会場からお届けします!

イベント概要

本勉強会は、基本的な内容の Basic Track、応用的な内容の Advanced Track、実際に試すことの出来る Hands On の3トラックに分けてAWSのモバイルサービスや、サーバーレスアーキテクチャ、IoTのお話をするというものです。

ご登壇者様・タイトル

アマゾン ウェブ サービス ジャパン(株) 塚田 朗弘さん

Using Amazon API Gateway with AWS Lambda to Build Secure and Scalable APIs

intro_self

セッション内容

はじめに塚田さんから本日のハンズオン内容が紹介されました。

完成品

これが完成品です。ユーザーが入力した情報が登録されていくサイトが実現できるものとなります。

今回のハンズオンで使う情報の取得・更新の流れ

その後、技術的な大枠の解説がされました。

  1. S3のStaticWebsiteにアクセス
  2. Cognitoから認証情報取得
  3. AjaxでAPI Gatewayを叩く
  4. APIがLambdaをキック
  5. LambdaでDynamoDBを操作

IMG_7810

以下、ハンズオンでの内容を箇条書きにしてお届けします。完全な内容ではありませんが、Lambdaや各インスタンスについておおまかにどのような設定をしていくのかがお届けできればと思います。

S3バケットの作成

  • マネジメントコンソールでS3バケットを作成
  • プロパティを設定
    • ウェブサイトのホスティングを有効にする
    • インデックスドキュメントとしてindex.htmlを指定
  • バケットポリシーを設定
    • あらかじめ用意されたバケットポリシーを貼り付け
  • HTMLコンテンツのアップロード
    • 用意されたHTMLファイルや画像ファイル、CSSファイルをS3にアップロード

これらの操作により、WEBブラウザ上で、エンドポイントにアクセスして、ページを表示することが出来ました! しかし、見た目上は完成している用に見えますが、この時点では S3 にHTML等を置いたのみですので、実際には投稿できません。

Cognitoの設定

Identity Pool 作成

  • エンドユーザのIdentityを保存するためにユニークな名前を設定します
  • Enable access to unauthenticated identities にチェックを入れる
    • ゲストユーザもアクセスできるようにする

DynamoDBのテーブルを作成する

データベースを司るDynamoDBを作成します。

  • テーブル名を設定
  • プライマリキーを設定
    • Track(文字列)
    • Timestamp(数値)
  • テーブル作成を実行

Lambda

DynamoDBからの読み込み

  • simple mobile backend テンプレートを選択
  • Name, Description設定
  • 今回は、直接コンソール上でコードを打ち込むので、Edit code inline を選択
  • コードはあらかじめ用意さたものを使用
  • DynamoDBへのアクセス権限を付与 (Roleの設定)
  • Actions > Publish new version で有効化
  • ARN(このLambdaファンクションの識別子)を控えておく

DynamoDBへの書き込み

  • DynamoDBからの読み込み同様の流れで作成
  • Name, Description
  • コードはあらかじめ用意さたものを使用

lightreek2

API作成

GET,POSTを扱うAPI Gateway を作成

  • API名設定してAPI作成
  • Create Resource でリソースを作成
    • comments という名前でリソース作成
  • Create Method
    • GETメソッドを作成・定義
      • Integration type: Lambda Function
      • Lambda Region: リージョン設定
      • DynamoDBからの読み込みに使うLambdaファンクション名を選択
      • Method Requestを定義
        • Authorization type: AWS_IAM
        • Add Query Setting で "track" の名前でクエリセッティング追加 *ARNを控えておく
      • Integration Request を定義
        • Invoke with caller credentials にチェック
        • Mapping Templatesで application/json の名前で mapping templateを追加
        • 鉛筆マークをクリックし”Mapping template" を選択すると、入力画面が表示される
        • 資料にあるコードを入力
    • POSTメソッドを作成・定義
      • Integration type: Lambda Function
      • Lambda Region: リージョン設定
      • DynamoDBへの書き込みに使うLambdaファンクション名を選択
      • Method Requestを定義
        • Authorization type: AWS_IAM
        • ARNを控えておく
      • Integration Request を定義
        • GETメソッドと同様
    • CORSの設定
      • POST, GETについて、JavaScriptから呼び出せるよう設定
    • デプロイ
    • Invoke URLを控え、S3に上げたファイルのうち、該当URLを使用しているファイルを修正
  • IAMの設定
    • コンソールからIAMをひらく
    • 匿名認証に与えるアクセス許可を設定
      • ロールポリシーの作成をクリック
      • Policy Generatorを選択
      • Lambdaに対してのアクセス許可を編集・設定
  • 動作確認
    • 最後に、動作確認し、完了となりました!

最後に

幾つものインスタンスを立ち上げ、それらを相互に関連させながら、サービスを立ち上げることのできる内容でした。とてもホットでエキサイティングな内容でとても楽しかったです!

lightlreak