기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Cognito Events를 사용하여 워크플로 사용자 지정
Amazon Cognito Sync를 처음 사용하는 경우 AWS AppSync
앱 기본 설정이나 게임 상태 같은 사용자 데이터를 동기화할 수 있습니다. 또한 이러한 기능을 더욱 확장해, 복수의 사용자가 공유 데이터를 실시간으로 동기화하고 협업할 수 있게 합니다.
Amazon Cognito Events를 사용하면 Amazon Cognito의 중요한 이벤트에 대한 응답으로 AWS Lambda 함수를 실행할 수 있습니다. Amazon Cognito는 데이터 집합이 동기화될 경우 동기화 트리거 이벤트를 유발합니다. 사용자가 데이터를 업데이트할 때 동기화 트리거 이벤트를 사용하여 작업을 수행할 수 있습니다. 이 함수는 클라우드에 저장되고 사용자의 다른 디바이스에 동기화되기 전에 데이터를 평가하고 선택적으로 조작합니다. 사용자의 다른 디바이스에 동기화되기 전에 디바이스에서 제공된 데이터를 검증하거나 플레이어가 새 레벨에 도달할 때 상 제공 등 수신 데이터에 따라 데이터 세트의 다른 값을 업데이트하는 데 유용합니다.
아래 단계는 Amazon Cognito 데이터 집합이 동기화될 때마다 실행하는 Lambda 함수를 설정하는 방법을 보여줍니다.
참고
Amazon Cognito 이벤트를 사용할 때는 Amazon Cognito Identity에서 받은 자격 증명만 사용할 수 있습니다. 연결된 Lambda 함수가 있지만 AWS 계정 자격 증명(개발자 자격 증명)UpdateRecords
을 사용하여 를 호출하는 경우 Lambda 함수는 호출되지 않습니다.
에서 함수 생성 AWS Lambda
Amazon Cognito와 Lambda를 통합하려면 먼저 Lambda에서 함수를 생성해야 합니다. 그렇게 하려면 다음을 수행하세요.
Amazon Cognito에서 Lambda 함수 선택
Lambda 콘솔을 엽니다.
[Lambda 함수 생성(Create a Lambda function)]을 클릭합니다.
블루프린트 선택 화면에서 를 검색하고 “.”를 선택합니다cognito-sync-trigger.
이벤트 소스 구성(Configure event sources) 화면에서 이벤트 소스 유형을 "Cognito Sync 트리거"로 설정해 두고 자격 증명 풀을 선택합니다. 다음을 클릭합니다.
참고
콘솔 외부에서 Amazon Cognito Sync 트리거를 구성하는 경우 Amazon Cognito가 함수를 호출할 수 있도록 Lambda 리소스 기반 권한을 추가해야 합니다. Lambda 콘솔(에 대한 리소스 기반 정책 사용 AWS Lambda 참조) 또는 Lambda AddPermission 작업을 사용하여 이 권한을 추가할 수 있습니다.
Lambda 리소스 기반 정책 예제
다음 AWS Lambda 리소스 기반 정책은 Amazon Cognito에 Lambda 함수를 호출할 수 있는 제한적인 권한을 부여합니다. Amazon Cognito는
aws:SourceArn
조건의 자격 증명 풀과aws:SourceAccount
조건의 계정을 대신하는 경우에만 함수를 호출할 수 있습니다.{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "lambda-allow-cognito-my-function", "Effect": "Allow", "Principal": { "Service": "cognito-sync.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "
<your Lambda function ARN>
", "Condition": { "StringEquals": { "AWS:SourceAccount": "<your account number>
" }, "ArnLike": { "AWS:SourceArn": "<your identity pool ARN>
" } } } ] }함수 구성(Configure function) 화면에서 함수 이름과 설명을 입력합니다. 런타임(Runtime)을 "Node.js"로 설정합니다. 이 예제에서는 코드를 변경하지 않고 그대로 둡니다. 기본 예제는 동기화되는 데이터를 변경하지 않으며 Amazon Cognito Sync 트리거 이벤트가 발생했다는 사실만 기록합니다. 핸들러 이름을 "index.handler"로 설정해 둡니다. 역할에서 에 액세스할 수 있는 코드 권한을 부여하는 IAM 역할을 선택합니다 AWS Lambda. 역할을 수정하려면 IAM 콘솔을 참조하세요. 고급(Advanced) 설정을 변경하지 않고 그대로 둡니다. 다음을 클릭합니다.
검토(Review) 화면에서 세부 정보를 검토하고 함수 생성(Create function)을 클릭합니다. 다음 페이지에는 새 Lambda 함수가 표시됩니다.
Lambda에 작성된 적절한 함수가 있는 경우 해당 함수를 Amazon Cognito Sync 트리거 이벤트에 대한 핸들러로 선택해야 합니다. 아래 단계는 이 프로세스를 소개합니다.
콘솔 홈 페이지에서 다음을 수행합니다.
Amazon Cognito 이벤트를 설정할 자격 증명 풀 이름을 클릭합니다. 자격 증명 풀에 대한 대시보드 페이지가 표시됩니다.
대시보드(Dashboard) 페이지의 우측 상단 모서리에서 연동 자격 증명 관리(Manage Federated Identities)를 클릭합니다. 연동 자격 증명 관리(Manage Federated Identities) 페이지가 나타납니다.
아래로 스크롤하고 Cognito 이벤트(Cognito Events)를 클릭하여 확장합니다.
동기화 트리거 드롭다운 메뉴에서 동기화 이벤트가 발생할 때 트리거할 Lambda 함수를 선택합니다.
변경 사항 저장을 클릭합니다.
이제 데이터 세트가 동기화될 때마다 Lambda 함수가 실행됩니다. 다음 섹션에서는 함수에서 데이터가 동기화될 때 이 데이터를 읽고 수정하는 방법에 대해 설명합니다.
동기화 트리거에 대한 Lambda 함수 작성
동기화 트리거는 서비스 공급자 인터페이스에서 사용하는 프로그래밍 패턴을 따릅니다. Amazon Cognito는 Lambda 함수에 다음 JSON 형식으로 입력을 제공합니다.
{ "version": 2, "eventType": "SyncTrigger", "region": "us-east-1", "identityPoolId": "identityPoolId", "identityId": "identityId", "datasetName": "datasetName", "datasetRecords": { "SampleKey1": { "oldValue": "oldValue1", "newValue": "newValue1", "op": "replace" }, "SampleKey2": { "oldValue": "oldValue2", "newValue": "newValue2", "op": "replace" },.. } }
Amazon Cognito는 입력과 동일한 형식으로 함수의 반환 값을 예상합니다.
동기화 트리거 이벤트에 대한 함수를 작성할 때 다음 사항을 준수합니다.
-
Amazon Cognito가 중에 Lambda 함수를 호출할 때 함수 UpdateRecords는 5초 이내에 응답해야 합니다. 그렇지 않으면 Amazon Cognito Sync 서비스에서
LambdaSocketTimeoutException
예외가 발생합니다. 이 제한 시간 값은 늘릴 수 없습니다. -
LambdaThrottledException
예외가 발생하면 동기화 작업을 다시 시도하여 레코드를 업데이트하세요. Amazon Cognito는 데이터 세트에 있는 모든 레코드를 함수에 대한 입력으로 제공합니다.
앱 사용자가 업데이트하는 레코드에
replace
로 설정된op
필드가 있습니다. 삭제된 레코드에remove
로 설정된op
필드가 있습니다.앱 사용자가 레코드를 업데이트하지 않은 경우에도 레코드를 수정할 수 있습니다.
를 제외한 모든 필드는 읽기 전용 datasetRecords 입니다. 변경할 수 없습니다. 이러한 필드를 변경하면 레코드를 업데이트할 수 없습니다.
레코드 값을 수정하려면 이 값을 업데이트하고
op
를replace
로 업데이트합니다.레코드를 제거하려면
op
를remove
로 설정하거나 이 값을 null로 설정합니다.레코드를 추가하려면 datasetRecords 배열에 새 레코드를 추가합니다.
Amazon Cognito는 Amazon이 레코드를 업데이트할 때 응답에서 생략된 레코드를 무시합니다.
샘플 Lambda 함수
다음은 데이터에 액세스하고 데이터를 수정 및 제거하는 방법을 보여주는 Lambda 함수의 예입니다.
console.log('Loading function'); exports.handler = function(event, context) { console.log(JSON.stringify(event, null, 2)); //Check for the event type if (event.eventType === 'SyncTrigger') { //Modify value for a key if('SampleKey1' in event.datasetRecords){ event.datasetRecords.SampleKey1.newValue = 'ModifyValue1'; event.datasetRecords.SampleKey1.op = 'replace'; } //Remove a key if('SampleKey2' in event.datasetRecords){ event.datasetRecords.SampleKey2.op = 'remove'; } //Add a key if(!('SampleKey3' in event.datasetRecords)){ event.datasetRecords.SampleKey3={'newValue':'ModifyValue3', 'op' : 'replace'}; } } context.done(null, event); };