AWS Lambda을 사용한 세그먼트 사용자 지정 - Amazon Pinpoint

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

AWS Lambda을 사용한 세그먼트 사용자 지정

이 시험판 설명서는 공개 베타 버전의 기능에 관한 것입니다. 변경될 수 있습니다.

AWS Lambda를 사용하여 Amazon Pinpoint 캠페인에서 목표 고객과 접촉하는 방법을 맞춤 조정할 수 있습니다. AWS Lambda를 사용하면 Amazon Pinpoint가 캠페인의 메시지를 전송하는 시점에 캠페인의 세그먼트를 수정할 수 있습니다.

AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고 코드를 실행하는 데 사용할 수 있는 컴퓨팅 서비스입니다. 코드를 패키징해서 Lambda에 Lambda 함수로 업로드합니다. Lambda는 수동으로 또는 이벤트에 대한 응답으로 자동으로 함수가 간접 호출되면 그 함수를 실행합니다. 자세한 내용은 AWS Lambda개발자 안내서를 참조하세요.

Lambda 함수를 캠페인에 할당하려면 Amazon Pinpoint API의 캠페인 리소스를 사용하여 캠페인의 CampaignHook 설정을 정의합니다. 이러한 설정에는 Lambda 함수 이름이 포함됩니다. 또한 Amazon Pinpoint가 함수로부터 반환 값을 받는지 여부를 지정하는 CampaignHook 모드도 포함됩니다.

캠페인에 할당한 Lambda 함수를 Amazon Pinpoint 확장이라고 합니다.

CampaignHook 설정이 정의되면 Amazon Pinpoint는 캠페인을 실행할 때 캠페인의 메시지를 전송하기 전에 자동으로 Lambda 함수를 간접 호출합니다. Amazon Pinpoint는 함수를 간접 호출할 때 메시지 전송에 대한 이벤트 데이터를 제공합니다. 이 데이터에는 Amazon Pinpoint가 메시지를 보내는 엔드포인트 목록인 캠페인 세그먼트가 포함됩니다.

CampaignHook 모드가 FILTER로 설정되면 Amazon Pinpoint는 메시지를 보내기 전에 함수가 세그먼트를 수정하고 반환하도록 허용합니다. 예를 들어 함수는 Amazon Pinpoint 외부의 소스에서 가져온 데이터가 포함된 속성으로 엔드포인트 정의를 업데이트할 수 있습니다. 또는 함수는 함수 코드의 조건을 기반으로 특정 엔드포인트를 제거하여 세그먼트를 필터링할 수 있습니다. Amazon Pinpoint는 함수로부터 수정된 세그먼트를 수신한 후 캠페인의 전송 채널을 사용하여 세그먼트의 각 엔드포인트에 메시지를 보냅니다.

AWS Lambda를 사용하여 세그먼트를 처리하면 메시지를 보내는 대상과 메시지의 내용을 더 자세히 제어할 수 있습니다. 캠페인 메시지가 전송되는 시점에 실시간으로 캠페인을 맞춤 조정할 수 있습니다. 세그먼트를 필터링하면 더 협소하게 정의된 세그먼트의 하위 집합과 접촉할 수 있습니다. 또한 엔드포인트 속성을 추가하거나 업데이트하면 메시지 변수에 새 데이터를 사용할 수 있습니다.

참고

CampaignHook 설정을 사용하여 메시지 전송을 처리하는 Lambda 함수를 할당할 수도 있습니다. 이 유형의 함수는 소셜 미디어 플랫폼과 같이 Amazon Pinpoint에서 지원하지 않는 사용자 지정 채널을 통한 메시지 전송에 유용합니다. 자세한 내용은 Amazon Pinpoint에서 사용자 지정 채널 생성 섹션을 참조하세요.

Amazon Pinpoint를 사용하여 Lambda 후크를 간접 호출할 때는 Lambda 함수도 Amazon Pinpoint 프로젝트와 동일한 리전에 있어야 합니다.

AWS Lambda를 사용하여 캠페인 세그먼트를 수정하려면 먼저 Amazon Pinpoint에서 전송한 이벤트 데이터를 처리하고 수정된 세그먼트를 반환하는 함수를 만듭니다. 그런 다음 Lambda 함수 정책을 할당하여 함수를 간접 호출하도록 Amazon Pinpoint를 승인합니다. 마지막으로 CampaignHook 설정을 정의하여 하나 이상의 캠페인에 함수를 할당합니다.

이벤트 데이터

Amazon Pinpoint는 Lambda 함수를 간접 호출할 때 다음 페이로드를 이벤트 데이터로 제공합니다.

{ "MessageConfiguration": {Message configuration} "ApplicationId": ApplicationId, "CampaignId": CampaignId, "TreatmentId": TreatmentId, "ActivityId": ActivityId, "ScheduledTime": Scheduled Time, "Endpoints": { EndpointId: {Endpoint definition} . . . } }

AWS Lambda은 함수 코드에 이벤트 데이터를 전달합니다. 이벤트 데이터는 다음 속성을 제공합니다.

  • MessageConfiguration - Amazon Pinpoint API에 있는 메시지 리소스의 DirectMessageConfiguration 객체와 구조가 동일합니다.

  • ApplicationId - 캠페인이 속한 Amazon Pinpoint 프로젝트의 ID입니다.

  • CampaignId - 함수가 간접 호출된 Amazon Pinpoint 캠페인의 ID입니다.

  • TreatmentId - A/B 테스트에 사용되는 캠페인 변형의 ID입니다.

  • ActivityId - 캠페인에 의해 수행 중인 활동의 ID입니다.

  • ScheduledTime - 캠페인의 메시지가 전달될 때 ISO 8601 형식의 날짜 및 시간입니다.

  • Endpoints - 엔드포인트 ID와 엔드포인트 정의를 연결하는 맵입니다. 각 이벤트 데이터 페이로드에는 최대 50개의 엔드포인트가 포함됩니다. 캠페인 세그먼트에 포함된 엔드포인트가 50개를 초과하는 경우 Amazon Pinpoint는 모든 엔드포인트가 처리될 때까지 한 번에 최대 50개의 엔드포인트를 사용하여 함수를 반복적으로 간접 호출합니다.

Lambda 함수 생성

Lambda 함수를 생성하는 방법을 알아보려면 AWS Lambda 개발자 안내서시작하기를 참조하세요. 함수를 만들 때 다음 조건에서는 메시지 전달이 실패한다는 점에 유의하세요.

  • Lambda 함수에서 수정된 세그먼트를 반환하는 데 15초 이상 소요됩니다.

  • Amazon Pinpoint는 함수의 반환 값을 디코딩할 수 없습니다.

  • 함수를 성공적으로 간접 호출하기 위해 Amazon Pinpoint에서 3번 이상 시도해야 합니다.

Amazon Pinpoint는 함수의 반환 값에 있는 엔드포인트 정의만 수락합니다. 함수는 이벤트 데이터의 다른 요소를 수정할 수 없습니다.

Lambda 함수 예제

Lambda 함수는 Amazon Pinpoint가 전송한 이벤트 데이터를 처리하며, 수정된 엔드포인트를 반환합니다(Node.js로 작성된 다음 예제 핸들러 참조).

'use strict'; exports.handler = (event, context, callback) => { for (var key in event.Endpoints) { if (event.Endpoints.hasOwnProperty(key)) { var endpoint = event.Endpoints[key]; var attr = endpoint.Attributes; if (!attr) { attr = {}; endpoint.Attributes = attr; } attr["CreditScore"] = [ Math.floor(Math.random() * 200) + 650]; } } console.log("Received event:", JSON.stringify(event, null, 2)); callback(null, event.Endpoints); };

Lambda는 이벤트 데이터를 핸들러에 event 파라미터로 전달합니다.

이 예제에서 핸들러는 event.Endpoints 객체의 각 엔드포인트를 거쳐 반복되며 새 속성 CreditScore를 엔드포인트에 추가합니다. CreditScore 속성의 값은 단순한 난수입니다.

console.log() 명령문은 CloudWatch Logs에 이벤트를 로그합니다.

callback() 명령문은 수정된 엔드포인트를 Amazon Pinpoint에 반환합니다. 일반적으로 callback 파라미터는 Node.js Lambda 함수에서 선택 사항이지만 이 컨텍스트에서는 함수가 업데이트된 엔드포인트를 Amazon Pinpoint에 반환해야 하므로 필수입니다.

함수는 이벤트 데이터가 제공한 것과 동일한 형식으로 엔드포인트를 반환해야 하며, 이는 엔드포인트 ID와 엔드포인트 정의를 연결하는 맵입니다(다음 예제 참조).

{ "eqmj8wpxszeqy/b3vch04sn41yw": { "ChannelType": "GCM", "Address": "4d5e6f1a2b3c4d5e6f7g8h9i0j1a2b3c", "EndpointStatus": "ACTIVE", "OptOut": "NONE", "Demographic": { "Make": "android" }, "EffectiveDate": "2017-11-02T21:26:48.598Z", "User": {} }, "idrexqqtn8sbwfex0ouscod0yto": { "ChannelType": "APNS", "Address": "1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f", "EndpointStatus": "ACTIVE", "OptOut": "NONE", "Demographic": { "Make": "apple" }, "EffectiveDate": "2017-11-02T21:26:48.598Z", "User": {} } }

예제 함수는 이벤트 데이터에서 받은 event.Endpoints 객체를 수정하고 반환합니다.

선택에 따라 반환하는 엔드포인트 정의에 TitleOverrideBodyOverride 속성을 포함시킬 수 있습니다.

참고

이 솔루션을 사용해 메시지를 전송할 때 Amazon Pinpoint는 엔드포인트에 대해 BodyOverrideChannelType 속성만 인식합니다. 여기에서 ADM 속성의 값은 TitleOverride, APNS, APNS_SANDBOX, APNS_VOIP, APNS_VOIP_SANDBOX, BAIDU, GCM 또는 SMS 중 하나입니다.

Amazon Pinpoint는 ChannelType 속성 값이 EMAIL인 엔드포인트에 대해서는 이러한 속성을 인식하지 않습니다.

Lambda 함수 정책 할당

Lambda 함수를 사용하여 엔드포인트를 처리하기 전에 Lambda 함수를 간접 호출하도록 Amazon Pinpoint를 승인해야 합니다. 간접 호출 권한을 부여하려면 함수에 Lambda 함수 정책을 할당합니다. Lambda 함수 정책은 리소스 기반 권한 정책으로, 함수를 사용할 수 있는 개체와 이러한 개체가 실행할 수 있는 작업을 지정합니다.

자세한 내용은 AWS Lambda 개발자 안내서에서 AWS Lambda에 리소스 기반 정책 사용을 참조하세요.

예제 함수 정책

다음 정책은 Amazon Pinpoint 서비스 보안 주체에게 특정 캠페인(campaign-id)에 대한 lambda:InvokeFunction 작업을 사용할 수 있는 권한을 부여합니다.

{ "Sid": "sid", "Effect": "Allow", "Principal": { "Service": "pinpoint.us-east-1.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "{arn:aws:lambda:us-east-1:account-id:function:function-name}", "Condition": { "StringEquals": { "AWS:SourceAccount": "111122223333" }, "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:apps/application-id/campaigns/campaign-id" } } }

함수 정책에는 AWS:SourceArn 키를 포함하는 Condition 블록이 필요합니다. 이 코드는 함수를 간접 호출하도록 허용되는 Amazon Pinpoint 캠페인을 지정합니다. 이 예제에서 정책은 하나의 캠페인에만 권한을 부여합니다. Condition 블록에는 작업을 간접 호출할 수 있는 AWS 계정을 제어하는 AWS:SourceAccount 키도 포함되어야 합니다.

더 일반적인 정책을 작성하려면 다중 문자 매칭 와일드카드(*)를 사용하세요. 예를 들어 다음 Condition 블록을 사용하여 특정 Amazon Pinpoint 프로젝트(application-id)의 모든 캠페인이 함수를 간접 호출하도록 허용할 수 있습니다.

... "Condition": { "StringEquals": { "AWS:SourceAccount": "111122223333" }, "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:account-id:apps/application-id/campaigns/*" } } ...

Lambda 함수가 프로젝트의 모든 캠페인에서 사용하는 기본 함수가 되게 하려면 앞의 방법으로 정책에 대한 Condition 블록을 구성하는 것이 좋습니다. 프로젝트의 모든 캠페인에 대해 Lambda 함수를 기본값으로 설정하는 방법에 대한 자세한 내용은 캠페인에 Lambda 함수 할당 단원을 참조하세요.

Amazon Pinpoint 간접 호출 권한 부여

AWS Command Line Interface(AWS CLI)를 사용하여 Lambda 함수에 할당된 Lambda 함수 정책에 권한을 추가할 수 있습니다. Amazon Pinpoint가 특정 캠페인에 대한 함수를 간접 호출하도록 허용하려면 다음 예제와 같이 Lambda add-permission 명령을 사용합니다.

$ aws lambda add-permission \ > --function-name function-name \ > --statement-id sid \ > --action lambda:InvokeFunction \ > --principal pinpoint.us-east-1.amazonaws.com \ > --source-account 111122223333 > --source-arn arn:aws:mobiletargeting:us-east-1:account-id:apps/application-id/campaigns/campaign-id

AWS CLI에서 get-campaigns 명령을 사용하여 캠페인 ID를 조회할 수 있습니다. get-apps 명령을 사용하여 애플리케이션 ID를 조회할 수도 있습니다.

Lambda add-permission 명령을 실행하면 Lambda에서 다음 출력이 반환됩니다.

{ "Statement": "{\"Sid\":\"sid\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"pinpoint.us-east-1.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:function-name\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:mobiletargeting:us-east-1:111122223333:apps/application-id/campaigns/campaign-id\"}} {\"StringEquals\": {\"AWS:SourceAccount\": \"111122223333\"}}} }

Statement 값은 Lambda 함수 정책에 추가된 문의 JSON 문자열 버전입니다.

캠페인에 Lambda 함수 할당

개별 Amazon Pinpoint 캠페인에 Lambda 함수를 할당할 수 있습니다. 또는 Lambda 함수를 개별적으로 함수를 할당한 캠페인을 제외한 모든 캠페인에서 프로젝트에 대해 사용되는 기본값으로 설정할 수 있습니다.

개별 캠페인에 Lambda 함수를 할당하려면 Amazon Pinpoint API를 사용하여 Campaign 객체를 생성하거나 업데이트하고 CampaignHook 속성을 정의합니다. Lambda 함수를 프로젝트의 모든 캠페인에 대한 기본값으로 설정하려면 프로젝트에 대한 Settings 리소스를 생성하거나 업데이트하고 CampaignHook 객체를 정의합니다.

두 경우 모두 다음 CampaignHook 속성을 설정합니다.

  • LambdaFunctionName - Amazon Pinpoint가 캠페인에 대한 메시지를 보내기 전에 간접 호출하는 Lambda 함수의 이름 또는 ARN입니다.

  • ModeFILTER로 설정합니다. 이 모드에서 Amazon Pinpoint는 함수를 간접 호출하고 수정된 엔드포인트가 반환될 때까지 기다립니다. Amazon Pinpoint는 이를 수신한 후 메시지를 전송합니다. Amazon Pinpoint는 15초까지 기다린 후 메시지 전송을 실패로 처리합니다.

CampaignHook 설정이 캠페인에 대해 정의되면 Amazon Pinpoint는 캠페인 메시지를 보내기 전에 지정된 Lambda 함수를 간접 호출합니다. Amazon Pinpoint는 함수의 수정된 엔드포인트를 수신하기 위해 대기합니다. Amazon Pinpoint는 업데이트된 엔드포인트를 수신하면 업데이트된 엔드포인트 데이터를 사용하여 메시지 전송 작업을 계속 진행합니다.