AWS IoT と Amazon Location の接続を確立するには、EventBridge CloudWatch イベントによって転送されたメッセージを処理する Lambda 関数が必要です。この関数は、位置データをすべて抽出し、Amazon Location の形式にして、Amazon Location Tracker API を使用して送信します。
以下の手順では、Lambda コンソールを使用してこの関数を作成する方法を示します。
コンソール
を開きます。 ナビゲーションペインで、[関数] を選択します。
[関数を作成] を選択し、[一から作成] オプションが選択されていることを確認します。
[関数名] を入力し、[ランタイム] オプションで [Node.js 16.x] を選択します。
機能の作成を選択します。
[コード] タブを開いてエディタにアクセスします。
index.js
ファイルのプレースホルダーコードを以下のコードで上書きします。const AWS = require('aws-sdk') const iot = new AWS.Iot(); exports.handler = function(event) { console.log("event===>>>", JSON.stringify(event)); var param = { endpointType: "iot:Data-ATS" }; iot.describeEndpoint(param, function(err, data) { if (err) { console.log("error===>>>", err, err.stack); // an error occurred } else { var endp = data['endpointAddress']; const iotdata = new AWS.IotData({endpoint: endp}); const trackerEvent = event["detail"]["EventType"]; const src = event["source"]; const time = event["time"]; const gfId = event["detail"]["GeofenceId"]; const resources = event["resources"][0]; const splitResources = resources.split("."); const geofenceCollection = splitResources[splitResources.length - 1]; const coordinates = event["detail"]["Position"]; const deviceId = event["detail"]["DeviceId"]; console.log("deviceId===>>>", deviceId); const msg = { "trackerEventType" : trackerEvent, "source" : src, "eventTime" : time, "geofenceId" : gfId, "coordinates": coordinates, "geofenceCollection": geofenceCollection }; const params = { topic: `${deviceId}/tracker`, payload: JSON.stringify(msg), qos: 0 }; iotdata.publish(params, function(err, data) { if (err) { console.log("error===>>>", err, err.stack); // an error occurred } else { console.log("Ladmbda triggered===>>>", trackerEvent); // successful response } }); } }); }
[デプロイ] を押して、更新された関数を保存します。
次に、[設定] タブを開きます。
[トリガー] セクションで、[トリガーを追加] ボタンを押します。
[ソース] フィールドで [EventBridge (CloudWatch Events)] を選択します。
[既存のルール] オプションを選択します。
ルール名 (
AmazonLocationMonitor-GEOFENCECOLLECTION_NAME
など) を入力します。[追加] ボタンを押します。
これにより、アクセス許可タブにリソースベースのポリシーステートメントもアタッチされます。
次は、AWS IoT を使用して MQTT テストクライアントを設定します。以下の手順に従ってください。
https://console.aws.amazon.com/iot/
を開きます。 左側のナビゲーションペインで、[MQTT テストクライアント] を選択します。
[MQTT テストクライアント] というセクションが表示され、そこで MQTT 接続を設定できます。
必要な設定を行った後、[接続] ボタンをクリックして、指定したパラメータを使用して MQTT ブローカーへの接続を確立します。
後でチュートリアルで使用するため、エンドポイントは記録しておいてください。
テストクライアントに接続すると、MQTT テストクライアントインターフェイスに用意されている各入力フィールドを使用して、MQTT トピックにサブスクライブしたり、トピックにメッセージをパブリッシュしたりできます。次に、AWS IoT ポリシーを作成します。
左側のメニューの [管理] で、[セキュリティ] オプションを展開し、[ポリシー] をクリックします。
[ポリシーを作成] ボタンをクリックします。
ポリシー名を入力します。
[ポリシードキュメント] で [JSON] タブを選択します。
以下に示すポリシーをコピーして貼り付けます。ただし、すべての要素を実際の
とREGION
で更新してください。ACCOUNT_ID
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive" ], "Resource": [ "arn:aws:iot:
REGION
:ACCOUNT_ID
:client/${cognito-identity.amazonaws.com:sub}", "arn:aws:iot:REGION
:ACCOUNT_ID
:topic/${cognito-identity.amazonaws.com:sub}", "arn:aws:iot:REGION
:ACCOUNT_ID
:topicfilter/${cognito-identity.amazonaws.com:sub}/*", "arn:aws:iot:REGION
:ACCOUNT_ID
:topic/${cognito-identity.amazonaws.com:sub}/tracker" ], "Effect": "Allow" } ] }[作成] ボタンを選択して終了します。
前の手順が完了したら、以下のようにゲストロールのアクセス許可を更新します。
Amazon Cognito に移動し、アイデンティティプールを開きます。次に、[ユーザーアクセス] に進み、[ゲストロール] を選択します。
[アクセス許可ポリシー] をクリックして、[編集] を有効にします。
{ 'Version': '2012-10-17', 'Statement': [ { 'Action': [ 'geo:GetMap*', 'geo:BatchUpdateDevicePosition', 'geo:BatchEvaluateGeofences', 'iot:Subscribe', 'iot:Publish', 'iot:Connect', 'iot:Receive', 'iot:AttachPrincipalPolicy', 'iot:AttachPolicy', 'iot:DetachPrincipalPolicy', 'iot:DetachPolicy' ], 'Resource': [ 'arn:aws:geo:us-east-1:{
USER_ID
}:map/{MAP_NAME
}', 'arn:aws:geo:us-east-1:{USER_ID
}:tracker/{TRACKER_NAME
}', 'arn:aws:geo:us-east-1:{USER_ID
}:geofence-collection/{GEOFENCE_COLLECTION_NAME
}', 'arn:aws:iot:us-east-1:{USER_ID
}:client/${cognito-identity.amazonaws.com:sub}', 'arn:aws:iot:us-east-1:{USER_ID
}:topic/${cognito-identity.amazonaws.com:sub}', 'arn:aws:iot:us-east-1:{USER_ID
}:topicfilter/${cognito-identity.amazonaws.com:sub}/*', 'arn:aws:iot:us-east-1:{USER_ID
}:topic/${cognito-identity.amazonaws.com:sub}/tracker' ], 'Effect': 'Allow' }, { 'Condition': { 'StringEquals': { 'cognito-identity.amazonaws.com:sub': '${cognito-identity.amazonaws.com:sub}' } }, 'Action': [ 'iot:AttachPolicy', 'iot:DetachPolicy', 'iot:AttachPrincipalPolicy', 'iot:DetachPrincipalPolicy' ], 'Resource': [ '*' ], 'Effect': 'Allow' } ] }上記のポリシーの変更により、アプリケーションに必要なすべての AWS リソースが適切に設定されました。