Amazon Pinpoint에 대한 Lambda 함수를 생성하여 추천자 모델에 대해 간접적으로 호출 - Amazon Pinpoint

지원 종료 공지: 2026년 10월 30일에 AWS 는 Amazon Pinpoint에 대한 지원을 종료합니다. 2026년 10월 30일 이후에는 Amazon Pinpoint 콘솔 또는 Amazon Pinpoint 리소스(엔드포인트, 세그먼트, 캠페인, 여정, 분석)에 더 이상 액세스할 수 없습니다. 자세한 내용은 Amazon Pinpoint 지원 종료를 참조하세요. 참고: SMS, 음성, 모바일 푸시, OTP 및 전화번호 검증과 관련된 APIs는이 변경의 영향을 받지 않으며 AWS 최종 사용자 메시징에서 지원됩니다.

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

Amazon Pinpoint에 대한 Lambda 함수를 생성하여 추천자 모델에 대해 간접적으로 호출

Lambda 함수를 생성하는 방법을 알아보려면 AWS Lambda 개발자 안내서시작하기를 참조하세요. 함수를 설계하고 개발할 때 다음 요구 사항과 지침을 염두에 두십시오.

입력 이벤트 데이터

Amazon Pinpoint는 추천 모델에 대한 Lambda 함수를 간접적으로 호출할 때 메시지를 보내는 캠페인 또는 여정에 대한 구성 및 기타 설정이 포함된 페이로드를 보냅니다. 페이로드에는 메시지 수신자에 대한 엔드포인트 정의와 엔드포인트 ID를 연결하는 맵인 Endpoints 객체가 포함됩니다.

엔드포인트 정의는 Amazon Pinpoint API의 엔드포인트 리소스에서 정의한 구조를 사용합니다. 그러나 여기에는 RecommendationItems라는 동적 추천 속성에 대한 필드도 포함됩니다. RecommendationItems 필드에는 Amazon Personalize 캠페인에서 반환된 엔드포인트에 대한 추천 항목이 하나 이상 포함됩니다. 이 필드의 값은 1~5개 추천 항목(문자열)의 정렬된 배열입니다. 배열의 항목 수는 각 엔드포인트 또는 사용자에 대해 검색하도록 Amazon Pinpoint를 구성한 추천 항목 수에 따라 다릅니다.

예:

"Endpoints": { "endpointIDexample-1":{ "ChannelType":"EMAIL", "Address":"sofiam@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.875Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"SofiaMartínez", "UserAttributes":{ "LastName":[ "Martínez" ], "FirstName":[ "Sofia" ], "Neighborhood":[ "East Bay" ] } }, "RecommendationItems":[ "1815", "2009", "1527" ], "CreationDate":"2020-02-26T18:56:24.875Z" }, "endpointIDexample-2":{ "ChannelType":"EMAIL", "Address":"alejandror@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.897Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"AlejandroRosalez", "UserAttributes":{ "LastName ":[ "Rosalez" ], "FirstName":[ "Alejandro" ], "Neighborhood":[ "West Bay" ] } }, "RecommendationItems":[ "1210", "6542", "4582" ], "CreationDate":"2020-02-26T18:56:24.897Z" } }

앞의 예에서 관련 Amazon Pinpoint 설정은 다음과 같습니다.

  • 추천 모델은 각 엔드포인트 또는 사용자에 대해 세 가지 추천 항목을 검색하도록 구성됩니다. (RecommendationsPerMessage 속성 값은 3으로 설정됩니다.) 이 설정을 사용하면 Amazon Pinpoint에서는 각 엔드포인트 또는 사용자에 대해 첫 번째, 두 번째 및 세 번째 추천 항목만 검색하고 추가합니다.

  • 프로젝트는 각 사용자의 이름, 성 및 거주하는 지역을 저장하는 사용자 지정 사용자 속성을 사용하도록 구성됩니다. (UserAttributes 객체에는 이러한 속성의 값이 포함되어 있습니다.)

  • 프로젝트는 해당 엔드포인트가 프로젝트에서 메시지를 수신하기 위한 사용자의 기본 주소(채널)인지 여부를 나타내는 사용자 지정 엔드포인트 속성(AddressType)을 사용하도록 구성됩니다. (Attributes 객체에는 이 속성의 값이 포함되어 있습니다.)

Amazon Pinpoint에서 Lambda 함수를 간접적으로 호출하고 이 페이로드를 이벤트 데이터로 전송하면 AWS Lambda에서 처리를 위해 Lambda 함수에 데이터를 전달합니다.

각 페이로드는 최대 50개의 엔드포인트에 대한 데이터를 포함할 수 있습니다. 세그먼트에 50개 이상의 엔드포인트가 포함된 경우, Amazon Pinpoint는 함수가 모든 데이터를 처리할 때까지 한 번에 최대 50개의 엔드포인트에 대해 함수를 반복적으로 간접 호출합니다.

응답 데이터 및 요구 사항

Lambda 함수를 설계하고 개발할 경우 기계 학습 모델에 대한 할당량을 염두에 둡니다. 함수가 이러한 할당량에 의해 정의된 조건을 충족하지 않으면 Amazon Pinpoint에서 메시지를 처리하고 보낼 수 없습니다.

또한 다음 요구 사항을 염두에 두십시오.

  • 함수는 입력 이벤트 데이터에 의해 제공된 것과 동일한 형식으로 업데이트된 엔드포인트 정의를 반환해야 합니다.

  • 업데이트된 각 엔드포인트 정의에는 엔드포인트 또는 사용자에 대해 1~10개의 사용자 지정 추천 속성이 포함될 수 있습니다. 이러한 속성의 이름은 Amazon Pinpoint에서 추천 모델을 구성할 때 지정하는 속성 이름과 일치해야 합니다.

  • 모든 사용자 지정 추천 속성은 각 엔드포인트 또는 사용자에 대해 단일 Recommendations 객체로 반환되어야 합니다. 이 요구 사항은 이름 충돌이 발생하지 않도록 하는 데 도움이 됩니다. 엔드포인트 정의의 모든 위치에 Recommendations 객체를 추가할 수 있습니다.

  • 각 사용자 지정 추천 속성의 값은 문자열(단일 값) 또는 문자열 배열(다중 값)이어야 합니다. 값이 문자열 배열인 경우 RecommendationItems 필드에 표시된 대로 Amazon Personalize가 반환한 추천 항목의 순서를 유지하는 것이 좋습니다. 그렇지 않으면 콘텐츠가 엔드포인트 또는 사용자에 대한 모델의 예측을 반영하지 않을 수 있습니다.

  • 함수는 엔드포인트 또는 사용자에 대한 다른 속성 값을 포함하여 이벤트 데이터의 다른 요소를 수정해서는 안 됩니다. 사용자 지정 추천 속성에 대한 값만 추가하고 반환해야 합니다. Amazon Pinpoint는 함수의 응답에 있는 다른 값에 대한 업데이트는 수락하지 않습니다.

  • 함수는 함수를 호출하는 Amazon Pinpoint 프로젝트와 동일한 AWS 리전에서 호스트되어야 합니다. 함수와 프로젝트가 동일한 리전에 있지 않으면 Amazon Pinpoint에서 이벤트 데이터를 함수로 보낼 수 없습니다.

위의 요구 사항 중 하나라도 충족되지 않으면 Amazon Pinpoint에서 메시지를 처리하고 하나 이상의 엔드포인트로 보낼 수 없습니다. 이로 인해 캠페인 또는 여정 활동이 실패할 수 있습니다.

마지막으로 함수에 대해 256개의 동시 실행을 예약하는 것이 좋습니다.

전반적으로 Lambda 함수는 Amazon Pinpoint에서 보낸 이벤트 데이터를 처리하고 수정된 엔드포인트 정의를 반환해야 합니다. Endpoints 객체의 각 엔드포인트를 반복하고 각 엔드포인트에 대해 사용하려는 사용자 지정 추천 속성에 대한 값을 만들고 설정하여 이 작업을 수행할 수 있습니다. Python으로 작성되어 앞의 입력 이벤트 데이터 예제를 계속 진행하는 다음 예제 핸들러가 이를 보여 줍니다.

import json import string def lambda_handler(event, context): print("Received event: " + json.dumps(event)) print("Received context: " + str(context)) segment_endpoints = event["Endpoints"] new_segment = dict() for endpoint_id in segment_endpoints.keys(): endpoint = segment_endpoints[endpoint_id] if supported_endpoint(endpoint): new_segment[endpoint_id] = add_recommendation(endpoint) print("Returning endpoints: " + json.dumps(new_segment)) return new_segment def supported_endpoint(endpoint): return True def add_recommendation(endpoint): endpoint["Recommendations"] = dict() customTitleList = list() customGenreList = list() for i,item in enumerate(endpoint["RecommendationItems"]): item = int(item) if item == 1210: customTitleList.insert(i, "Hanna") customGenreList.insert(i, "Action") elif item == 1527: customTitleList.insert(i, "Catastrophe") customGenreList.insert(i, "Comedy") elif item == 1815: customTitleList.insert(i, "Fleabag") customGenreList.insert(i, "Comedy") elif item == 2009: customTitleList.insert(i, "Late Night") customGenreList.insert(i, "Drama") elif item == 4582: customTitleList.insert(i, "Agatha Christie\'s The ABC Murders") customGenreList.insert(i, "Crime") elif item == 6542: customTitleList.insert(i, "Hunters") customGenreList.insert(i, "Drama") endpoint["Recommendations"]["Title"] = customTitleList endpoint["Recommendations"]["Genre"] = customGenreList return endpoint

앞의 예제에서 AWS Lambda는 이벤트 데이터를 event 파라미터로 핸들러에 전달합니다. 핸들러는 Endpoints 객체의 각 엔드포인트를 반복하고 Recommendations.TitleRecommendations.Genre라는 사용자 지정 추천 속성의 값을 설정합니다. return 문은 업데이트된 각 엔드포인트 정의를 Amazon Pinpoint로 반환합니다.

앞의 입력 이벤트 데이터 예제를 계속 진행하면서 업데이트된 엔드포인트 정의는 다음과 같습니다.

"Endpoints":{ "endpointIDexample-1":{ "ChannelType":"EMAIL", "Address":"sofiam@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.875Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"SofiaMartínez", "UserAttributes":{ "LastName":[ "Martínez" ], "FirstName":[ "Sofia" ], "Neighborhood":[ "East Bay" ] } }, "RecommendationItems":[ "1815", "2009", "1527" ], "CreationDate":"2020-02-26T18:56:24.875Z", "Recommendations":{ "Title":[ "Fleabag", "Late Night", "Catastrophe" ], "Genre":[ "Comedy", "Comedy", "Comedy" ] } }, "endpointIDexample-2":{ "ChannelType":"EMAIL", "Address":"alejandror@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.897Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"AlejandroRosalez", "UserAttributes":{ "LastName ":[ "Rosalez" ], "FirstName":[ "Alejandro" ], "Neighborhood":[ "West Bay" ] } }, "RecommendationItems":[ "1210", "6542", "4582" ], "CreationDate":"2020-02-26T18:56:24.897Z", "Recommendations":{ "Title":[ "Hanna", "Hunters", "Agatha Christie\'s The ABC Murders" ], "Genre":[ "Action", "Drama", "Crime" ] } } }

앞의 예제에서 함수는 결과를 수신하고 반환한 Endpoints 객체를 수정했습니다. 이제 각 엔드포인트의 Endpoint 객체에 RecommendationsTitle 필드가 포함된 새 Genre 객체가 포함됩니다. 이러한 각 필드는 세 개의 정렬된 값 배열(문자열)을 저장합니다. 여기서 각 값은 RecommendationItems 필드의 해당 추천 항목에 대한 개선된 내용을 제공합니다.