Logotipo de Zephyrnet

Cómo migró AWS Payments de Redash a Amazon Redshift Query Editor v2

Fecha:

AWS Payments es parte de la organización AWS Commerce Platform (CP) que es propietaria de la experiencia del cliente en el pago de las facturas de AWS. Ayuda a los clientes de AWS a administrar sus métodos de pago y preferencias de pago, y ayuda a los clientes a realizar pagos de autoservicio a AWS.

El equipo de aprendizaje automático, datos y análisis (MLDA) de AWS Payments permite la toma de decisiones basada en datos en los procesos de pago y los socios mediante la entrega de datos, conocimientos empresariales e inferencias causales y de aprendizaje automático a través de un conjunto escalable de datos, conocimientos e inferencias de aprendizaje automático. servicios.

En esta publicación, discutimos cómo democratizar el acceso a los datos para Desplazamiento al rojo de Amazon usando el Editor de consultas Amazon Redshift V2 .

Antecedentes

En AWS Payments, habíamos estado usando Redash para permitir que nuestros usuarios creen y ejecuten consultas SQL en nuestro almacén de datos de Amazon Redshift. Redash es una aplicación de cliente SQL basada en web que se puede usar para crear y ejecutar consultas, visualizar resultados de consultas con gráficos y colaborar con equipos.

Con el tiempo, comenzamos a notar incompatibilidades entre las operaciones de Redash y las necesidades de nuestra carga de trabajo.

Teníamos en mente los siguientes requisitos al buscar una herramienta alternativa:

  • Autenticacion y autorizacion
    • Proporcione acceso a datos sin crear un usuario y contraseña de base de datos
    • Permitir listar a los usuarios que usan grupos de permisos (POSIX/LDAP) para acceder a la herramienta
    • Limite el acceso de los usuarios a los objetos de la base de datos
  • La experiencia del usuario
    • Ejecutar consultas SQL en la base de datos seleccionada
    • Guardar una consulta y volver a ejecutarla más tarde
    • Escriba una consulta SQL dinámica y ejecute la consulta en función de los parámetros de entrada
    • Exportar un resultado de consulta a CSV
    • Buscar consultas guardadas
    • Comparta una consulta con otros usuarios como una URL

Después de una evaluación de los servicios alternativos, elegimos el Editor de consultas Amazon Redshift V2.

Editor de consultas Amazon Redshift V2

Amazon Redshift Query Editor V2 tiene los siguientes beneficios:

  • Hace que los datos a través de análisis y científicos de datos sean más accesibles con un banco de trabajo de analista basado en la web unificado para que los analistas de datos exploren, compartan y colaboren en datos a través de una interfaz SQL.
  • Proporciona un servicio administrado que le permite concentrarse en explorar sus datos sin administrar su infraestructura
  • Los usuarios pueden iniciar sesión en el Editor de consultas mediante el inicio de sesión único (SSO)
  • Los usuarios pueden conectarse a Amazon Redshift mediante el acceso federado sin proporcionar un nombre de usuario y una contraseña.
  • Le permite colaborar con los miembros del equipo al brindar la capacidad de compartir consultas guardadas de forma segura
  • Puede beneficiarse de las nuevas características tan pronto como las publique el equipo del editor de consultas de Amazon Redshift.
  • Puede realizar un seguimiento de los cambios realizados en las consultas guardadas mediante la función Historial de consultas
  • Puede escribir consultas SQL parametrizadas, lo que le permite reutilizar una consulta con diferentes valores
  • Puede activar la función Gráfico para mostrar una visualización gráfica de la página actual de resultados
  • Puede usar cuadernos para organizar, anotar y compartir múltiples consultas SQL en un solo documento
  • Puede ejecutar varias consultas en paralelo ejecutando cada consulta en una pestaña separada

Sin embargo, presentó los siguientes desafíos:

  • Para restringir el acceso de los usuarios a otros servicios de AWS dentro de nuestra cuenta de AWS, adjuntamos el Gestión de identidades y accesos de AWS (IAM) (consulte el apéndice al final de esta publicación) para el rol de IAM de SAML. Las políticas promueven lo siguiente:
    • El usuario solo puede acceder al servicio Query Editor V2.
    • El usuario federado se asigna a un grupo de base de datos con acceso limitado.
  • Actualmente, Query Editor V2 no admite conexiones de Amazon Redshift entre cuentas. Sin embargo, configuramos el uso compartido de datos de Amazon Redshift para acceder al clúster de Amazon Redshift desde otras cuentas de AWS. Para obtener más detalles, consulte Compartir datos entre clústeres en Amazon Redshift.

Descripción de la arquitectura

El siguiente diagrama ilustra nuestra arquitectura.
El diagrama ilustra nuestra arquitectura.
En las siguientes secciones, lo guiaremos a través de los pasos para configurar el editor de consultas y migrar las consultas de Redash.

Requisitos previos

Para implementar esta solución, debe configurar el acceso federado a Amazon Redshift Query Editor V2 mediante los servicios de su proveedor de identidad (IdP).

Puedes encontrar más información en las siguientes publicaciones:

Configurar Amazon Redshift Query Editor V2

Para configurar el editor de consultas, complete los siguientes pasos:

  1. Cree un grupo de base de datos de Amazon Redshift con acceso de solo lectura.
  2. Cree un rol de IAM para acceder a Query Editor V2 en una cuenta de AWS y adjunte las políticas de IAM requeridas según su caso de uso. Para obtener más información, consulte Configuración de su cuenta de AWS.
  3. Cree una relación de confianza entre su IdP y AWS.
    relación de confianza entre su IdP y AWS
  4. Agregar la etiqueta principal sqlworkbench-team al rol de IAM para compartir consultas. Para obtener más información, consulte Compartir una consulta.
    Agregue la etiqueta principal sqlworkbench-team al rol de IAM

Migre las consultas de Redash a Amazon Redshift Query Editor V2

En esta sección, lo guiaremos a través de diferentes formas de migrar sus consultas de Redash a Amazon Redshift Query Editor V2.

Consulta sin parámetros

Consultar sin parámetros es bastante sencillo, simplemente copie su consulta de Redash e ingrésela en el editor de consultas.

  1. En Redash, navegue hasta la consulta guardada y elija Editar fuente.
  2. Copie la consulta de origen.
  3. En Amazon RedShift Query Editor V2, ingrese la consulta en el editor, elija el Guardar y asigne un título a su consulta.

Consulta con parámetros

En Redash, una cadena entre {{ }} se tratará como un parámetro, pero Amazon RedShift Query Editor V2 usa ${ } para identificar un parámetro. Para migrar consultas con parámetros, siga los mismos pasos pero reemplace {{ con ${ y }} con }.

La siguiente captura de pantalla muestra una consulta de ejemplo en Redash.

la captura de pantalla muestra una consulta de ejemplo en RedashLa siguiente captura de pantalla muestra la misma consulta en Amazon RedShift Query Editor V2.

la captura de pantalla muestra la misma consulta en Query Editor V2

Consulta de varias partes a un cuaderno de Query Editor V2

Para una consulta de varias partes, copie la consulta de cada sección de un tablero de Redash y agréguela a un cuaderno. El cuaderno en Amazon Redshift Query Editor V2 ejecuta consultas sucesivamente. También puede agregar una descripción para su consulta.

La siguiente captura de pantalla muestra una consulta de ejemplo en el tablero de Redash.
la captura de pantalla muestra una consulta de ejemplo en el panel de Redash
La siguiente captura de pantalla muestra la consulta en un cuaderno Amazon Redshift Query Editor V2.
captura de pantalla que muestra la consulta en un cuaderno Amazon Redshift Query Editor V2

Resumen

En esta publicación, demostramos cómo configuramos Amazon Redshift Query Editor V2 con SSO y acceso federado de Amazon Redshift, y migramos a nuestros clientes de Redash a Amazon Redshift Query Editor V2. Esta solución redujo nuestro costo operativo de mantener una aplicación de terceros y su infraestructura.

Si tiene casos de uso similares y necesita proporcionar una herramienta basada en la web a sus clientes para explorar datos en su clúster de Amazon Redshift, considere usar Amazon Redshift Query Editor V2.

Apéndice: Políticas de IAM del cliente

En esta sección, proporcionamos el código para las políticas de IAM que adjuntamos al rol de IAM de SAML para restringir el acceso de los usuarios a otros servicios de AWS dentro de nuestra cuenta de AWS:

  • política de credenciales del editor de consultas – En el siguiente código, proporcione sus parámetros de región, cuenta y clúster para otorgar acceso a Amazon Redshift para obtener credenciales de clúster, crear usuarios y permitir que los usuarios se unan a grupos:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "redshift:GetClusterCredentials",
            "Resource": [
                "arn:aws:redshift:<region>:<account>:cluster:<cluster>",
                "arn:aws:redshift:<region>:<account>:dbname:<cluster>/payments_beta",
                "arn:aws:redshift:<region>:<account>:dbuser:<cluster>/${redshift:DbUser}"
            ],
            "Effect": "Allow"
        },
        {
            "Action": "redshift:JoinGroup",
            "Resource": "arn:aws:redshift:<region>:<account>:dbgroup:<cluster>/payments_ro_users",
            "Effect": "Allow"
        },
        {
            "Action": "redshift:DescribeClusters",
            "Resource": "arn:aws:redshift:<region>:<account>:cluster:<cluster>",
            "Effect": "Allow"
        },
        {
            "Action": "redshift:CreateClusterUser",
            "Resource": "arn:aws:redshift:<region>:<account>:dbuser:<cluster>/${redshift:DbUser}",
            "Effect": "Allow"
        }
    ]
}

  • política-de-acceso-del-editor-de-consultas – Ver el siguiente código:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "redshift:DescribeClusters",
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "RedshiftPermissions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "secretsmanager:ResourceTag/sqlworkbench-resource-owner": "${aws:userid}"
                }
            },
            "Action": [
                "secretsmanager:CreateSecret",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DeleteSecret",
                "secretsmanager:TagResource"
            ],
            "Resource": "arn:aws:secretsmanager:::sqlworkbench!",
            "Effect": "Allow",
            "Sid": "SecretsManagerPermissions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:CalledViaLast": "sqlworkbench.amazonaws.com"
                }
            },
            "Action": "tag:GetResources",
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "ResourceGroupsTaggingPermissions"
        },
        {
            "Action": [
                "sqlworkbench:CreateFolder",
                "sqlworkbench:PutTab",
                "sqlworkbench:BatchDeleteFolder",
                "sqlworkbench:DeleteTab",
                "sqlworkbench:GenerateSession",
                "sqlworkbench:GetAccountInfo",
                "sqlworkbench:GetAccountSettings",
                "sqlworkbench:GetUserInfo",
                "sqlworkbench:GetUserWorkspaceSettings",
                "sqlworkbench:PutUserWorkspaceSettings",
                "sqlworkbench:ListConnections",
                "sqlworkbench:ListFiles",
                "sqlworkbench:ListTabs",
                "sqlworkbench:UpdateFolder",
                "sqlworkbench:ListRedshiftClusters",
                "sqlworkbench:DriverExecute",
                "sqlworkbench:ListTaggedResources"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "AmazonRedshiftQueryEditorV2NonResourceLevelPermissions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/sqlworkbench-resource-owner": "${aws:userid}"
                }
            },
            "Action": [
                "sqlworkbench:CreateConnection",
                "sqlworkbench:CreateSavedQuery",
                "sqlworkbench:CreateChart"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "AmazonRedshiftQueryEditorV2CreateOwnedResourcePermissions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sqlworkbench-resource-owner": "${aws:userid}"
                }
            },
            "Action": [
                "sqlworkbench:DeleteChart",
                "sqlworkbench:DeleteConnection",
                "sqlworkbench:DeleteSavedQuery",
                "sqlworkbench:GetChart",
                "sqlworkbench:GetConnection",
                "sqlworkbench:GetSavedQuery",
                "sqlworkbench:ListSavedQueryVersions",
                "sqlworkbench:UpdateChart",
                "sqlworkbench:UpdateConnection",
                "sqlworkbench:UpdateSavedQuery",
                "sqlworkbench:AssociateConnectionWithTab",
                "sqlworkbench:AssociateQueryWithTab",
                "sqlworkbench:AssociateConnectionWithChart",
                "sqlworkbench:UpdateFileFolder",
                "sqlworkbench:ListTagsForResource"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "AmazonRedshiftQueryEditorV2OwnerSpecificPermissions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sqlworkbench-resource-owner": "${aws:userid}",
                    "aws:RequestTag/sqlworkbench-resource-owner": "${aws:userid}"
                },
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": "sqlworkbench-resource-owner"
                }
            },
            "Action": "sqlworkbench:TagResource",
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "AmazonRedshiftQueryEditorV2TagOnlyUserIdPermissions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sqlworkbench-team": "${aws:PrincipalTag/sqlworkbench-team}"
                }
            },
            "Action": [
                "sqlworkbench:GetChart",
                "sqlworkbench:GetConnection",
                "sqlworkbench:GetSavedQuery",
                "sqlworkbench:ListSavedQueryVersions",
                "sqlworkbench:ListTagsForResource",
                "sqlworkbench:AssociateQueryWithTab"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "AmazonRedshiftQueryEditorV2TeamReadAccessPermissions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sqlworkbench-resource-owner": "${aws:userid}",
                    "aws:RequestTag/sqlworkbench-team": "${aws:PrincipalTag/sqlworkbench-team}"
                }
            },
            "Action": "sqlworkbench:TagResource",
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "AmazonRedshiftQueryEditorV2TagOnlyTeamPermissions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sqlworkbench-resource-owner": "${aws:userid}"
                },
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": "sqlworkbench-team"
                }
            },
            "Action": "sqlworkbench:UntagResource",
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "AmazonRedshiftQueryEditorV2UntagOnlyTeamPermissions"
        }
    ]
}

  • política del cuaderno del editor de consultas – Ver el siguiente código:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "sqlworkbench:ListNotebooks",
                "sqlworkbench:ListNotebookVersions",
                "sqlworkbench:ListQueryExecutionHistory"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/sqlworkbench-resource-owner": "${aws:userid}"
                }
            },
            "Action": [
                "sqlworkbench:CreateNotebook",
                "sqlworkbench:ImportNotebook",
                "sqlworkbench:DuplicateNotebook"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sqlworkbench-resource-owner": "${aws:userid}"
                }
            },
            "Action": [
                "sqlworkbench:GetNotebook",
                "sqlworkbench:UpdateNotebook",
                "sqlworkbench:DeleteNotebook",
                "sqlworkbench:CreateNotebookCell",
                "sqlworkbench:DeleteNotebookCell",
                "sqlworkbench:UpdateNotebookCellContent",
                "sqlworkbench:UpdateNotebookCellLayout",
                "sqlworkbench:BatchGetNotebookCell",
                "sqlworkbench:AssociateNotebookWithTab",
                "sqlworkbench:ExportNotebook",
                "sqlworkbench:CreateNotebookVersion",
                "sqlworkbench:GetNotebookVersion",
                "sqlworkbench:CreateNotebookFromVersion",
                "sqlworkbench:DeleteNotebookVersion",
                "sqlworkbench:RestoreNotebookVersion"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/sqlworkbench-team": "${aws:PrincipalTag/sqlworkbench-team}"
                }
            },
            "Action": [
                "sqlworkbench:GetNotebook",
                "sqlworkbench:BatchGetNotebookCell",
                "sqlworkbench:AssociateNotebookWithTab"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}


Acerca de los autores

Mohammad Nejad

Mohammad Nejad dirige el equipo de la plataforma de datos de pagos de AWS. Tiene experiencia liderando equipos, diseñando diseños, implementando soluciones y lanzando productos. Actualmente, su equipo se enfoca en construir una plataforma de datos moderna en AWS para brindar una solución completa para procesar, analizar y presentar datos.

Erol MurtezaogluErol Murtezaoglu, gerente técnico de productos en AWS, es un pensador inquisitivo y entusiasta con un impulso por la superación personal y el aprendizaje. Tiene una formación técnica sólida y comprobada en desarrollo y arquitectura de software, equilibrada con un impulso para ofrecer productos comercialmente exitosos. Erol valora mucho el proceso de comprensión de las necesidades y problemas de los clientes, con el fin de entregar soluciones que superen las expectativas.

mohamed shaabanmohamed shaaban es ingeniero de software sénior en Amazon Redshift y tiene su sede en Berlín, Alemania. Tiene más de 12 años de experiencia en la ingeniería de software. Le apasionan los servicios en la nube y crear soluciones que deleiten a los clientes. Fuera del trabajo, es un fotógrafo aficionado al que le encanta explorar y capturar momentos únicos.

punto_img

Información más reciente

punto_img