Amazon Cognito 이벤트 - Amazon Cognito

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Cognito 이벤트

Amazon Cognito Sync를 처음 사용하는 경우 AWS AppSync를 사용하세요. Amazon Cognito Sync와 마찬가지로, AWS AppSync도 디바이스 사이에서 애플리케이션 데이터를 동기화하는 서비스입니다.

앱 기본 설정이나 게임 상태 같은 사용자 데이터를 동기화할 수 있습니다. 또한 이러한 기능을 더욱 확장해, 복수의 사용자가 공유 데이터를 실시간으로 동기화하고 협업할 수 있게 합니다.

Amazon Cognito 이벤트를 사용하면 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 함수 선택
  1. Lambda 콘솔을 엽니다.

  2. [Lambda 함수 생성(Create a Lambda function)]을 클릭합니다.

  3. 블루프린트 선택(Select blueprint) 화면에서 "cognito-sync-trigger"를 검색하고 선택합니다.

  4. 이벤트 소스 구성(Configure event sources) 화면에서 이벤트 소스 유형을 "Cognito Sync 트리거"로 설정해 두고 자격 증명 풀을 선택합니다. 다음(Next)을 클릭합니다.

    참고

    콘솔 외부에서 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>" } } } ] }
  5. 함수 구성(Configure function) 화면에서 함수 이름과 설명을 입력합니다. 런타임(Runtime)을 "Node.js"로 설정합니다. 이 예제에서는 코드를 변경하지 않고 그대로 둡니다. 기본 예제는 동기화되는 데이터를 변경하지 않으며 Amazon Cognito Sync 트리거 이벤트가 발생했다는 사실만 기록합니다. 핸들러 이름을 "index.handler"로 설정해 둡니다. 역할의 경우 AWS Lambda에 액세스할 코드 권한을 부여하는 IAM 역할을 선택합니다. 역할을 수정하려면 IAM 콘솔을 참조하세요. 고급(Advanced) 설정을 변경하지 않고 그대로 둡니다. 다음(Next)을 클릭합니다.

  6. 검토(Review) 화면에서 세부 정보를 검토하고 함수 생성(Create function)을 클릭합니다. 다음 페이지에는 새 Lambda 함수가 표시됩니다.

Lambda에 작성된 적절한 함수가 있는 경우 해당 함수를 Amazon Cognito Sync 트리거 이벤트에 대한 핸들러로 선택해야 합니다. 아래 단계는 이 프로세스를 소개합니다.

콘솔 홈 페이지에서 다음을 수행합니다.

  1. Amazon Cognito 이벤트를 설정할 자격 증명 풀 이름을 클릭합니다. 자격 증명 풀에 대한 대시보드 페이지가 표시됩니다.

  2. 대시보드(Dashboard) 페이지의 우측 상단 모서리에서 연동 자격 증명 관리(Manage Federated Identities)를 클릭합니다. 연동 자격 증명 관리(Manage Federated Identities) 페이지가 나타납니다.

  3. 아래로 스크롤하고 Cognito 이벤트(Cognito Events)를 클릭하여 확장합니다.

  4. 동기화 트리거 드롭다운 메뉴에서 동기화 이벤트가 발생할 때 트리거할 Lambda 함수를 선택합니다.

  5. 변경 사항 저장을 클릭합니다.

이제 데이터 세트가 동기화될 때마다 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가 UpdateRecords 동안 Lambda 함수를 호출하면 함수는 5초 이내에 응답해야 합니다. 그렇지 않으면 Amazon Cognito Sync 서비스에서 LambdaSocketTimeoutException 예외가 발생합니다. 이 제한 시간 값은 늘릴 수 없습니다.

  • LambdaThrottledException 예외가 발생하면 동기화 작업을 다시 시도하여 레코드를 업데이트하세요.

  • Amazon Cognito는 데이터 세트에 있는 모든 레코드를 함수에 대한 입력으로 제공합니다.

  • 앱 사용자가 업데이트하는 레코드에 replace로 설정된 op 필드가 있습니다. 삭제된 레코드에 remove로 설정된 op 필드가 있습니다.

  • 앱 사용자가 레코드를 업데이트하지 않은 경우에도 레코드를 수정할 수 있습니다.

  • datasetRecords를 제외한 모든 필드는 읽기 전용이며 변경할 수 없습니다. 이러한 필드를 변경하면 레코드를 업데이트할 수 없습니다.

  • 레코드 값을 수정하려면 이 값을 업데이트하고 opreplace로 업데이트합니다.

  • 레코드를 제거하려면 opremove로 설정하거나 이 값을 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); };