Exportación de puntos de conexión de Amazon Pinpoint - Amazon Pinpoint

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Exportación de puntos de conexión de Amazon Pinpoint

Para obtener toda la información que Amazon Pinpoint tiene acerca del público, puede exportar las definiciones de punto de conexión que pertenecen a un proyecto. Al exportar, Amazon Pinpoint coloca las definiciones de punto de conexión en un bucket de Amazon S3 que especifique. La exportación de puntos de enlace resulta útil cuando desea:

  • Consulte los datos más recientes sobre puntos de conexión nuevos y existentes que la aplicación cliente registró con Amazon Pinpoint.

  • Sincronizar los datos de puntos de conexión en Amazon Pinpoint con el propio sistema de administración de las relaciones con el cliente (CRM).

  • Analizar o crear informes sobre datos de los clientes.

Antes de empezar

Para poder exportar los puntos de enlace, son precisos los siguientes recursos en su cuenta de AWS :

Ejemplos

Los siguientes ejemplos muestran cómo exportar puntos de conexión desde un proyecto de Amazon Pinpoint y, a continuación, descargar esos puntos de conexión desde el bucket de Amazon S3.

AWS CLI

Puede utilizar Amazon Pinpoint ejecutando comandos con la AWS CLI.

ejemplo Comando Create Export Job

Para exportar los puntos de conexión en el proyecto de Amazon Pinpoint, utilice el comando create-export-job:

$ aws pinpoint create-export-job \ > --application-id application-id \ > --export-job-request \ > S3UrlPrefix=s3://bucket-name/prefix/,\ > RoleArn=iam-export-role-arn

Donde:

  • application-id es el ID del proyecto de Amazon Pinpoint que contiene los puntos de conexión.

  • bucket-name/prefix/ es el nombre del bucket de Amazon S3 y, opcionalmente, un prefijo que le ayuda a organizar los objetos en el bucket de forma jerárquica. Por ejemplo, un prefijo útil puede ser pinpoint/exports/endpoints/.

  • iam-export-role-arn es el nombre de recurso de Amazon (ARN) de un rol de IAM que concede a Amazon Pinpoint acceso de escritura al bucket.

La respuesta a este comando ofrece información detallada sobre el trabajo de exportación:

{ "ExportJobResponse": { "CreationDate": "2018-06-04T22:04:20.585Z", "Definition": { "RoleArn": "iam-export-role-arn", "S3UrlPrefix": "s3://s3-bucket-name/prefix/" }, "Id": "7390e0de8e0b462380603c5a4df90bc4", "JobStatus": "CREATED", "Type": "EXPORT" } }

La respuesta proporciona el ID de trabajo con el atributo Id. Puede utilizar este ID para comprobar el estado actual del trabajo de exportación.

ejemplo Comando Get Export Job

Para comprobar el estado actual de un trabajo de exportación, utilice el comando get-export-job:

$ aws pinpoint get-export-job \ > --application-id application-id \ > --job-id job-id

Donde:

  • application-id es el ID del proyecto de Amazon Pinpoint desde el que exportó los puntos de conexión.

  • job-id es el ID del trabajo que está comprobando.

La respuesta a este comando ofrece el estado actual del trabajo de exportación:

{ "ExportJobResponse": { "ApplicationId": "application-id", "CompletedPieces": 1, "CompletionDate": "2018-05-08T22:16:48.228Z", "CreationDate": "2018-05-08T22:16:44.812Z", "Definition": {}, "FailedPieces": 0, "Id": "6c99c463f14f49caa87fa27a5798bef9", "JobStatus": "COMPLETED", "TotalFailures": 0, "TotalPieces": 1, "TotalProcessed": 215, "Type": "EXPORT" } }

La respuesta proporciona el estado de trabajo con el atributo JobStatus. Cuando el valor de estado del trabajo es COMPLETED, puede obtener los puntos de conexión exportados desde el bucket de Amazon S3.

ejemplo Comando CP de S3

Para descargar los puntos de conexión exportados, utilice el comando cp de Amazon S3:

$ aws s3 cp s3://bucket-name/prefix/key.gz /local/directory/

Donde:

  • bucket-name/prefix/key es la ubicación del archivo .gz que Amazon Pinpoint agregó al bucket cuando exportó los puntos de conexión. Este archivo contiene las definiciones de punto de enlace exportadas. Por ejemplo, en la URL https://PINPOINT-EXAMPLE-BUCKET.s3.us-west-2.amazonaws.com/Exports/example.csv, PINPOINT-EXAMPLE-BUCKET es el nombre del bucket y Exports/example.csv es la clave. Para obtener más información sobre claves, consulte Claves en la Guía del usuario de Amazon S3.

  • /local/directory/ es la ruta del archivo al directorio local donde desea descargar los puntos de enlace.

AWS SDK for Java

Puede usar la API de Amazon Pinpoint en las aplicaciones Java mediante el cliente que proporciona AWS SDK for Java.

ejemplo Código

Para exportar puntos de conexión desde un proyecto de Amazon Pinpoint, inicialice un objeto CreateExportJobRequest. A continuación, pase este objeto al método createExportJob del cliente AmazonPinpoint.

Para descargar los puntos de conexión exportados desde Amazon Pinpoint, utilice el método getObject del cliente AmazonS3.

import software.amazon.awssdk.core.ResponseBytes; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.pinpoint.PinpointClient; import software.amazon.awssdk.services.pinpoint.model.ExportJobRequest; import software.amazon.awssdk.services.pinpoint.model.PinpointException; import software.amazon.awssdk.services.pinpoint.model.CreateExportJobRequest; import software.amazon.awssdk.services.pinpoint.model.CreateExportJobResponse; import software.amazon.awssdk.services.pinpoint.model.GetExportJobResponse; import software.amazon.awssdk.services.pinpoint.model.GetExportJobRequest; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; import software.amazon.awssdk.services.s3.model.S3Object; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors;
import software.amazon.awssdk.core.ResponseBytes; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.pinpoint.PinpointClient; import software.amazon.awssdk.services.pinpoint.model.ExportJobRequest; import software.amazon.awssdk.services.pinpoint.model.PinpointException; import software.amazon.awssdk.services.pinpoint.model.CreateExportJobRequest; import software.amazon.awssdk.services.pinpoint.model.CreateExportJobResponse; import software.amazon.awssdk.services.pinpoint.model.GetExportJobResponse; import software.amazon.awssdk.services.pinpoint.model.GetExportJobRequest; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.ListObjectsV2Request; import software.amazon.awssdk.services.s3.model.ListObjectsV2Response; import software.amazon.awssdk.services.s3.model.S3Object; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.S3Exception; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** * To run this code example, you need to create an AWS Identity and Access * Management (IAM) role with the correct policy as described in this * documentation: * https://docs.aws.amazon.com/pinpoint/latest/developerguide/audience-data-export.html * * Also, set up your development environment, including your credentials. * * For information, see this documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class ExportEndpoints { public static void main(String[] args) { final String usage = """ This program performs the following steps: 1. Exports the endpoints to an Amazon S3 bucket. 2. Downloads the exported endpoints files from Amazon S3. 3. Parses the endpoints files to obtain the endpoint IDs and prints them. Usage: ExportEndpoints <applicationId> <s3BucketName> <iamExportRoleArn> <path> Where: applicationId - The ID of the Amazon Pinpoint application that has the endpoint. s3BucketName - The name of the Amazon S3 bucket to export the JSON file to.\s iamExportRoleArn - The ARN of an IAM role that grants Amazon Pinpoint write permissions to the S3 bucket. path - The path where the files downloaded from the Amazon S3 bucket are written (for example, C:/AWS/). """; if (args.length != 4) { System.out.println(usage); System.exit(1); } String applicationId = args[0]; String s3BucketName = args[1]; String iamExportRoleArn = args[2]; String path = args[3]; System.out.println("Deleting an application with ID: " + applicationId); Region region = Region.US_EAST_1; PinpointClient pinpoint = PinpointClient.builder() .region(region) .build(); S3Client s3Client = S3Client.builder() .region(region) .build(); exportAllEndpoints(pinpoint, s3Client, applicationId, s3BucketName, path, iamExportRoleArn); pinpoint.close(); s3Client.close(); } public static void exportAllEndpoints(PinpointClient pinpoint, S3Client s3Client, String applicationId, String s3BucketName, String path, String iamExportRoleArn) { try { List<String> objectKeys = exportEndpointsToS3(pinpoint, s3Client, s3BucketName, iamExportRoleArn, applicationId); List<String> endpointFileKeys = objectKeys.stream().filter(o -> o.endsWith(".gz")) .collect(Collectors.toList()); downloadFromS3(s3Client, path, s3BucketName, endpointFileKeys); } catch (PinpointException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } public static List<String> exportEndpointsToS3(PinpointClient pinpoint, S3Client s3Client, String s3BucketName, String iamExportRoleArn, String applicationId) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH_mm:ss.SSS_z"); String endpointsKeyPrefix = "exports/" + applicationId + "_" + dateFormat.format(new Date()); String s3UrlPrefix = "s3://" + s3BucketName + "/" + endpointsKeyPrefix + "/"; List<String> objectKeys = new ArrayList<>(); String key; try { // Defines the export job that Amazon Pinpoint runs. ExportJobRequest jobRequest = ExportJobRequest.builder() .roleArn(iamExportRoleArn) .s3UrlPrefix(s3UrlPrefix) .build(); CreateExportJobRequest exportJobRequest = CreateExportJobRequest.builder() .applicationId(applicationId) .exportJobRequest(jobRequest) .build(); System.out.format("Exporting endpoints from Amazon Pinpoint application %s to Amazon S3 " + "bucket %s . . .\n", applicationId, s3BucketName); CreateExportJobResponse exportResult = pinpoint.createExportJob(exportJobRequest); String jobId = exportResult.exportJobResponse().id(); System.out.println(jobId); printExportJobStatus(pinpoint, applicationId, jobId); ListObjectsV2Request v2Request = ListObjectsV2Request.builder() .bucket(s3BucketName) .prefix(endpointsKeyPrefix) .build(); // Create a list of object keys. ListObjectsV2Response v2Response = s3Client.listObjectsV2(v2Request); List<S3Object> objects = v2Response.contents(); for (S3Object object : objects) { key = object.key(); objectKeys.add(key); } return objectKeys; } catch (PinpointException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return null; } private static void printExportJobStatus(PinpointClient pinpointClient, String applicationId, String jobId) { GetExportJobResponse getExportJobResult; String status; try { // Checks the job status until the job completes or fails. GetExportJobRequest exportJobRequest = GetExportJobRequest.builder() .jobId(jobId) .applicationId(applicationId) .build(); do { getExportJobResult = pinpointClient.getExportJob(exportJobRequest); status = getExportJobResult.exportJobResponse().jobStatus().toString().toUpperCase(); System.out.format("Export job %s . . .\n", status); TimeUnit.SECONDS.sleep(3); } while (!status.equals("COMPLETED") && !status.equals("FAILED")); if (status.equals("COMPLETED")) { System.out.println("Finished exporting endpoints."); } else { System.err.println("Failed to export endpoints."); System.exit(1); } } catch (PinpointException | InterruptedException e) { System.err.println(e.getMessage()); System.exit(1); } } // Download files from an Amazon S3 bucket and write them to the path location. public static void downloadFromS3(S3Client s3Client, String path, String s3BucketName, List<String> objectKeys) { String newPath; try { for (String key : objectKeys) { GetObjectRequest objectRequest = GetObjectRequest.builder() .bucket(s3BucketName) .key(key) .build(); ResponseBytes<GetObjectResponse> objectBytes = s3Client.getObjectAsBytes(objectRequest); byte[] data = objectBytes.asByteArray(); // Write the data to a local file. String fileSuffix = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); newPath = path + fileSuffix + ".gz"; File myFile = new File(newPath); OutputStream os = new FileOutputStream(myFile); os.write(data); } System.out.println("Download finished."); } catch (S3Exception | NullPointerException | IOException e) { System.err.println(e.getMessage()); System.exit(1); } } }

Para ver el ejemplo completo del SDK, consulte ExportEndpoints.java en. GitHub

HTTP

Puede utilizar Amazon Pinpoint realizando solicitudes HTTP directamente a la API de REST.

ejemplo Solicitud POST de trabajo de exportación

Para exportar los puntos de conexión en el proyecto de Amazon Pinpoint, emita una solicitud POST al recurso Trabajos de exportación:

POST /v1/apps/application_id/jobs/export HTTP/1.1 Content-Type: application/json Accept: application/json Host: pinpoint.us-east-1.amazonaws.com X-Amz-Date: 20180606T001238Z Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20180606/us-east-1/mobiletargeting/aws4_request, SignedHeaders=accept;cache-control;content-length;content-type;host;postman-token;x-amz-date, Signature=c25cbd6bf61bd3b3667c571ae764b9bf2d8af61b875cacced95d1e68d91b4170 Cache-Control: no-cache { "S3UrlPrefix": "s3://bucket-name/prefix", "RoleArn": "iam-export-role-arn" }

Donde:

  • application-id es el ID del proyecto de Amazon Pinpoint que contiene los puntos de conexión.

  • bucket-name/prefix es el nombre del bucket de Amazon S3 y, opcionalmente, un prefijo que le ayuda a organizar los objetos en el bucket de forma jerárquica. Por ejemplo, un prefijo útil puede ser pinpoint/exports/endpoints/.

  • iam-export-role-arn es el nombre de recurso de Amazon (ARN) de un rol de IAM que concede a Amazon Pinpoint acceso de escritura al bucket.

La respuesta a esta solicitud ofrece información detallada sobre el trabajo de exportación:

{ "Id": "611bdc54c75244bfa51fe7001ddb2e36", "JobStatus": "CREATED", "CreationDate": "2018-06-06T00:12:43.271Z", "Type": "EXPORT", "Definition": { "S3UrlPrefix": "s3://bucket-name/prefix", "RoleArn": "iam-export-role-arn" } }

La respuesta proporciona el ID de trabajo con el atributo Id. Puede utilizar este ID para comprobar el estado actual del trabajo de exportación.

ejemplo Solicitud GET de trabajo de exportación

Para comprobar el estado actual de un trabajo de exportación, emita una solicitud GET al recurso Trabajo de exportación:

GET /v1/apps/application_id/jobs/export/job_id HTTP/1.1 Content-Type: application/json Accept: application/json Host: pinpoint.us-east-1.amazonaws.com X-Amz-Date: 20180606T002443Z Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20180606/us-east-1/mobiletargeting/aws4_request, SignedHeaders=accept;cache-control;content-type;host;postman-token;x-amz-date, Signature=c25cbd6bf61bd3b3667c571ae764b9bf2d8af61b875cacced95d1e68d91b4170 Cache-Control: no-cache

Donde:

  • application-id es el ID del proyecto de Amazon Pinpoint desde el que exportó los puntos de conexión.

  • job-id es el ID del trabajo que está comprobando.

La respuesta a esta solicitud ofrece el estado actual del trabajo de exportación:

{ "ApplicationId": "application_id", "Id": "job_id", "JobStatus": "COMPLETED", "CompletedPieces": 1, "FailedPieces": 0, "TotalPieces": 1, "CreationDate": "2018-06-06T00:12:43.271Z", "CompletionDate": "2018-06-06T00:13:01.141Z", "Type": "EXPORT", "TotalFailures": 0, "TotalProcessed": 217, "Definition": {} }

La respuesta proporciona el estado de trabajo con el atributo JobStatus. Cuando el valor de estado del trabajo es COMPLETED, puede obtener los puntos de conexión exportados desde el bucket de Amazon S3.

Para obtener más información acerca del recurso Trabajos de exportación en la API de Amazon Pinpoint, incluidos los métodos HTTP compatibles y los parámetros de solicitud, consulte Trabajos de exportación en la Referencia de la API de Amazon Pinpoint.