Atom's tech blog

AWS IoT Device Shadowを使ってみた!(Part2)

f:id:iAtom:20201218174122j:plain

本記事は、最終目標である遠隔からDevice Shadow機能を使ってIoT Device制御をまとめたものです。 なお、4つの記事の中で今回は 下記の「 Part2 」です

主な全体記事の流れです。

■ Part1 : API Gatewayから起動するLambda関数の作成

■ Part2:API GatewayAPI作成

■ Part3 : AWS IoT Deviceとshadow作成

■ Part4 : iPhoneアプリ作成 と 遠隔Camera起動確認

AWS構成図

赤点線で囲んだ箇所を今回作成します。


f:id:iAtom:20201217154405j:plain

API の作成

AWS API Gatewayコンソールにいきます。


f:id:iAtom:20201208084054j:plain


APIを作成 」ボタンをクリックします。


f:id:iAtom:20201216141755j:plain


APIタイプを「 REST API」の「 構築 」ボタンをクリックします。


f:id:iAtom:20201216141955j:plain


API」入力、「 エンドポイントタイプ」を選択します。ここではAPI名は「cameraAPITest」、「リージョン」を指定し、「 APIの作成 」ボタンをクリックします。

エンドポイントにリージョンを選択すると、外部から指定するURLに「リージョン名」を付与しているアドレスになるイメージです。

下記のリージョン名は、「ap-northeast-1」です。尚、リージョン名は「メソッド作成」箇所で選択します。 (https:xxxxxxxxxxxxxxxxxxxx.ap-northeast-1.amazonaws.com/xxxxxxxxxxxxxx)


f:id:iAtom:20201216142316j:plain


リソースの作成

アクション 」ボタンをクリックし「 リソースの作成 」を選択します。


f:id:iAtom:20201208084930j:plain


リソース名 」を入力し、「 リソースの作成 」をクリックし、リソースを作成します。 「リソース名」は「リソースパス」欄に自動挿入されます。

「リソースパス」とは、外部から指定するURL(https:................/test )のアドレスとして扱われます。ここでは「リソース名」を「test」としているため、パスにtestが入ります。


f:id:iAtom:20201208085700j:plain


メソッドの作成

アクションボタン 」をクリックし、「 メソッドの作成 」を選択します。

「メソッド」とは、HTTPメソッドのことです。 HTTPメソッドとは、リソースに対して実行したいアクションを示すもので、メソッドには「GET」、「POST」、「PUT」などがあり、HTTPサーバー(今回はAWSがサーバー)へ指定する時に使用します。

AWS API Gatewayは、一つのメソッドに一つのLambda functionを登録できますので、メソッド毎にLambda functionを登録し、別の処理を行うことができます。


f:id:iAtom:20201208090002j:plain


プルダウンリストからHTTPリクエストメソッド「 POST 」を選択します。選択完了後は、「 チェックマーク 」をクリックします。


f:id:iAtom:20201208093105j:plain


Lambda関数の登録

左側のツリー表示から「POST」を選択し、POSTのセットアップをします。 統合タイプは「 Lambda関数 」のラジオボタンで選択、「 Lambdaリージョン 」を選択します。最後に「 Lambda関数 」に関数名を入力&選択し、「 保存 」ボタンをクリックします。

Lambda関数名は、「Part1」で作成した「」です。キーボードで登録したい関数名を入力すると、作成済みのLambda関数が表示されますので、対象の関数があったらそれを選択しましょう。

f:id:iAtom:20201216143103j:plain

Lambda関数に権限を追加する 」のダイアログが表示されます。「 OK 」ボタンをクリックします。


f:id:iAtom:20201216143322j:plain


APIキーの作成

ここからが「 外部からアクセスするためにURLを公開」する登録です。

ただし、APIをデプロイした時点で外部に公開され、誰でもアクセスできてしまいます。 Webブラウザからアクセスするブログなどのサイトではないので、誰からもアクセスできないようAPIキーを使用して認証を行うようにします。

先にAPIキーを作成し、APIリクエスト時に認証を行うようにします。

左メニューから「 APIキー 」を選択。「 アクションボタン 」をクリックし、「 APIキーの作成 」を選択します。


f:id:iAtom:20201216143832j:plain


名前 」を入力し、「 APIキー 」は自動生成とし、「 保存ボタン 」をクリックします。


f:id:iAtom:20201216144029j:plain


作成が完了すると、APIキーが生成されます。このAPIキーは、外部からアクセスするときに使用します。「 表示 」をクリックでキー情報を確認できます。


f:id:iAtom:20201216144313j:plain


APIキーをメソッドと関連付けさせます。左ツリー表示の「 POST 」を選択し、右画面の「 メソッドリクエス 」をクリックします。


f:id:iAtom:20201216145224j:plain

APIキーの必要性 」が「 false 」になっていますので、プルダウンで「 true 」を選択し、「 チェックボタン 」をクリックします。


f:id:iAtom:20201208100601j:plain


マッピングプレートの作成

URLでパラメータ取得のための「 マッピングプレート 」の登録をします。

POSTメソッドの「 統合リクエス」をクリックします。


f:id:iAtom:20201216154314j:plain


マッピングプレート 」をクリックします。


f:id:iAtom:20201216154423j:plain


テンプレートが定義されていない場合(推奨)」を選択し、Content-Typeに「 application/json 」を入力し、チェックボタンをクリックします。


f:id:iAtom:20201216154638j:plain


チェックボタンクリック後、画面下に「 設定欄 」が表示されますのでイメージのように入力し「 保存」ボタンをクリックし保存します。


f:id:iAtom:20201216154848j:plain

設定欄の入力イメージです。

  {
   "camera": "$input.params('camera')"
  }


これでURLでパラメータ取得の設定が終わりました。

APIのデプロイ

アクションボタン 」をクリックし、「 APIのデプロイ 」を選択します。


f:id:iAtom:20201208101054j:plain

デプロイ後に各種設定変更した場合は、同様に再デプロイすることで設定が反映されます。


APIのステージを登録します。

このステージは、実際の使用する時エンドポイントを分けて使用することができます。例えば開発用、評価が終わって正式公開用などのようにもできます。

今回はお試しなので「 デプロイされるステージ 」を「新しいステージ」、「 ステージ名 」を「development」とし、「 デプロイ 」ボタンをクリックし、デプロイします。

このステージ名がURL(https:xxxxxxxxxxxxx/development/test)に割り当てられます。


f:id:iAtom:20201208101927j:plain


デプロイ 」が完了するとステージまでのURLアドレスが表示されます。これに「 リソース名」(今回はtest)が追加されたアドレスがアクセスアドレスになります。


f:id:iAtom:20201208102631j:plain


使用量プランの作成

使用量プランを設定します。作成したAPIの使用量を測定することに使用されます。 左メニュー画面から「 使用プラン 」を選択し、「 作成 」ボタンをクリックします。


f:id:iAtom:20201208103510j:plain


プラン「 名前 」を入力し、「ロットリングの有効化 」「 クォータを有効する 」のチェックボックスのチェックを外して、「 次へ 」のボタンをクリックします。


f:id:iAtom:20201216150307j:plain


APIステージと使用プランを関連付けます。下記画像の「 APIステージの追加 」ボタンが非Active化(グレー表示)なっていますが、実際はボタンはActive化状態となっていますので、ご了承ください。

APIステージの追加 」ボタンをクリックし、「 API 」、「 ステージ 」を選択し、「 チェックマーク 」をクリックします。


f:id:iAtom:20201216150557j:plain


完了すると、「 次へ 」ボタンがActive化されますので、ボタンをクリックします。


f:id:iAtom:20201216150723j:plain

APIキーと使用プランを関連付けします。下記画像の「 APIキーを使用プランに追加 」ボタンが非Active化(グレー表示)なっていますが、実際はボタンはActive化状態となっていますので、ご了承ください。

名前のテキストボッククス 」に、APIキー名を入力すると選択表示が出ますので選択します。


f:id:iAtom:20201216151214j:plain


チェックマーク 」をクリックします。


f:id:iAtom:20201216151236j:plain


完了すると、「 完了 」ボタンがActive化されますので、ボタンをクリックします。


f:id:iAtom:20201216151342j:plain

これで外部からAPIキーを使用したURLアクセスができるようになりました。

次はPart3のAWS IoT Deviceとshadow作成です。