事前プロビジョニングフック - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

事前プロビジョニングフック

AWS では、プロビジョニングテンプレートを作成するときに事前プロビジョニングフック関数を使用することをお勧めします。これにより、アカウントがオンボードするデバイスとデバイスの数をより詳細に制御できます。事前プロビジョニングフックは、デバイスのプロビジョニングを許可する前に、デバイスから渡されたパラメータを検証する Lambda 関数です。この Lambda 関数は、デバイスが RegisterThing を介してリクエストを送信するたびに呼び出されるため、デバイスをプロビジョニングする前にアカウントに存在する必要があります。

重要

Lambda アクションにアタッチされたポリシーのグローバル条件コンテキストキーに source-arn または source-account を必ず含め、アクセス許可の操作を防止します。詳細については、「サービス間での不分別な代理処理の防止」を参照してください。

デバイスをプロビジョニングするには、Lambda 関数が入力オブジェクトを受け入れ、このセクションで説明する出力オブジェクトを返す必要があります。プロビジョニングは、Lambda 関数が "allowProvisioning": True のオブジェクトを返す場合にのみ続行されます。

事前プロビジョニングフックの入力

AWS IoT デバイスが に登録されると、 はこのオブジェクトを Lambda 関数に送信します AWS IoT。

{ "claimCertificateId" : "string", "certificateId" : "string", "certificatePem" : "string", "templateArn" : "arn:aws:iot:us-east-1:1234567890:provisioningtemplate/MyTemplate", "clientId" : "221a6d10-9c7f-42f1-9153-e52e6fc869c1", "parameters" : { "string" : "string", ... } }

Lambda 関数に渡される parameters オブジェクトには、RegisterThing リクエストペイロードで渡される parameters 引数のプロパティが含まれています。

事前プロビジョニングフックの戻り値

この Lambda 関数は、プロビジョニングリクエスト、およびオーバーライドするプロパティの値を承認したかどうかを示す応答を返す必要があります。

次に、事前プロビジョニング機能からの正常な応答の例を示します。

{ "allowProvisioning": true, "parameterOverrides" : { "Key": "newCustomValue", ... } }

"parameterOverrides" 値は、RegisterThing リクエストペイロードの "parameters" パラメータに追加されます。

注記
  • Lambda 関数が失敗した場合、プロビジョニングリクエストは で失敗ACCESS_DENIEDし、エラーが CloudWatch ログに記録されます。

  • Lambda 関数が応答で "allowProvisioning": "true" を返さない場合、プロビジョニング要求は ACCESS_DENIED で失敗します。

  • Lambda 関数の実行が終了し、5 秒以内に戻る必要があります。そうでない場合は、プロビジョニングリクエストは失敗します。

事前プロビジョニングフック Lambda の例

Python

Python での事前プロビジョニングフック Lambda の例。

import json def pre_provisioning_hook(event, context): print(event) return { 'allowProvisioning': True, 'parameterOverrides': { 'DeviceLocation': 'Seattle' } }
Java

Java での事前プロビジョニングフック Lambda の例。

ハンドラークラス:

package example; import java.util.Map; import java.util.HashMap; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class PreProvisioningHook implements RequestHandler<PreProvisioningHookRequest, PreProvisioningHookResponse> { public PreProvisioningHookResponse handleRequest(PreProvisioningHookRequest object, Context context) { Map<String, String> parameterOverrides = new HashMap<String, String>(); parameterOverrides.put("DeviceLocation", "Seattle"); PreProvisioningHookResponse response = PreProvisioningHookResponse.builder() .allowProvisioning(true) .parameterOverrides(parameterOverrides) .build(); return response; } }

リクエストクラス:

package example; import java.util.Map; import lombok.Builder; import lombok.Data; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @Data @Builder @AllArgsConstructor @NoArgsConstructor public class PreProvisioningHookRequest { private String claimCertificateId; private String certificateId; private String certificatePem; private String templateArn; private String clientId; private Map<String, String> parameters; }

Response クラス:

package example; import java.util.Map; import lombok.Builder; import lombok.Data; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @Data @Builder @AllArgsConstructor @NoArgsConstructor public class PreProvisioningHookResponse { private boolean allowProvisioning; private Map<String, String> parameterOverrides; }
JavaScript

の事前プロビジョニングフック Lambda の例 JavaScript。

exports.handler = function(event, context, callback) { console.log(JSON.stringify(event, null, 2)); var reply = { allowProvisioning: true, parameterOverrides: { DeviceLocation: 'Seattle' } }; callback(null, reply); }