기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
사전 프로비저닝 후크
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 Logs에 오류가 기록됩니다.
-
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;
}
응답 클래스:
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
-
JavaScript에서 사전 프로비저닝 후크 Lambda 예시.
exports.handler = function(event, context, callback) {
console.log(JSON.stringify(event, null, 2));
var reply = {
allowProvisioning: true,
parameterOverrides: {
DeviceLocation: 'Seattle'
}
};
callback(null, reply);
}