Saltar al contenido

Instalación de Jitterbit App Builder en AWS (Windows)

Introducción

Este manual cubrirá varios métodos sugeridos para instalar App Builder en AWS usando Windows y SQL Server. Existen muchas formas de configurar la arquitectura subyacente para hospedaje web, redes y seguridad; los aspectos que se presentan a continuación se pueden adaptar según sea necesario.

Esta guía está pensada principalmente para ayudar con una nueva cuenta de AWS en blanco, o una existente que se pueda adaptar para cumplir con los requisitos básicos.

Hay dos métodos generales para usar AWS para alojar App Builder en Windows:

  • PaaS: ElasticBeanstalk - .NET como plataforma (Con y sin alta disponibilidad)
  • IaaS: Instancias de VMs Ec2 - (Similar a instalación local)

Este documento se enfoca en usar ElasticBeanstalk (EB), ya que este es el método más fácil en AWS para la gestión a largo plazo y la facilidad de actualizaciones. Para solo Ec2, consulta nuestra documentación de VM/instalación local. Además, este documento también se enfocará en usar RDS (Relational Database Service) para la base de datos.

Nota

Se puede ahorrar en costos y aumentar la simplicidad colocando todos los objetos en subredes públicas (subredes que están en una tabla de rutas donde la puerta de enlace predeterminada (0.0.0.0/0) es una puerta de enlace de Internet); eliminando la necesidad de una puerta de enlace NAT y un host bastión. Solo ten en cuenta que los grupos de seguridad serán entonces la única barrera contra el acceso externo y no podrás tener una IP de salida confiable desde App Builder para incluir en la lista blanca en sistemas externos. (Las puertas de enlace NAT tienen una eIP estática que será la IP de salida).

Consejo

Para obtener orientación sobre la planificación de una actualización en entornos de desarrollo, control de calidad y producción, incluidas ventanas de mantenimiento y estrategia de reversión, consulta Estrategias de actualización en producción.

Elementos de AWS

  • VPC con 4 o más subredes; dos o más asociadas con una tabla de rutas que contiene una puerta de enlace de Internet como ruta predeterminada (pública) – dos o más asociadas con una tabla de rutas que usa una puerta de enlace NAT como ruta predeterminada (privada). Las zonas de disponibilidad deben reflejarse en las tablas de rutas (por ejemplo: pública: 1a, 1b - privada: 1a, 1b)
  • Certificado – Necesitarás crear o importar un certificado para usar SSL
  • IAM: Usuarios, roles*, políticas* – Otorgando permisos de servicio
  • Grupos de seguridad* – Otorgando permisos de entrada y entre servidores
  • Ec2, host bastión – Servidor de salto para acceso al servidor de aplicaciones y administración de base de datos
  • Bucket de S3* - configurado para permitir acceso de lectura/escritura de App Builder con el propósito de crear y compartir claves de seguridad
  • Base de datos* - Se puede ejecutar usando RDS o instalarse en instancias de Ec2
  • Elastic Beanstalk* - Gestiona instancias de Ec2 de App Builder

*Una por instancia

figure.png

Redes básicas

Ejemplo de VPC:

VPC predeterminada: 172.31.0.0/16

Puerta de enlace NAT (opcional): Subred como pública, conectividad como pública, asignar eIP.

Subredes:

subnets.jpg

Tabla de rutas pública:

publicroutetable.jpg

Tabla de rutas privada:

privateroutetable.jpg

figure.png

Configuración de S3 para claves de cifrado de datos

Crea un bucket de S3 en tu región deseada; se usará para almacenar metadatos de estado de sesión y cifrado de columnas de App Builder:

Nombre de ejemplo: *nombreempresa*-vinyl-encryption-keys-*dev*

*Denegar acceso público

IAM

Políticas

Política de acceso a S3:

Crea una nueva política con este JSON, edita el recurso con el nombre anterior:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource":
        "arn:aws:s3:::companyname-vinyl-encryption-keys-dev/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation",
        "s3:ListBucket"
    ],
    "Resource": "*"
    }
    ]
}

Nombre de ejemplo: *nombreempresa*-vinyl-encryption-keys-s3-*dev*

Descripción de ejemplo: Otorga acceso de Ec2 al bucket de S3

Roles

Crea un nuevo rol: Tipo=Ec2 -> Agregar políticas:

  • <Política de S3 anterior>
  • AWSElasticBeanstalkMulticontainerDocker
  • AWSElasticBeanstalkWebTier
  • AWSElasticBeanstalkWorkerTier

Nombre: *companyname*-eb-*dev*

EC2

Dentro del servicio EC2, ve a cada una de las siguientes secciones y crea lo siguiente:

Grupos de seguridad:

Crea al menos dos grupos, uno para EC2/EB (aplicado en EB) y otro para RDS. El grupo de EB se agregará como origen en el grupo de RDS, como se ve a continuación. Estos otorgan permisos para RDP a la instancia de EC2 y para que la instancia de EC2 acceda a la instancia de RDS:

Configuración del grupo de seguridad
Nombre: EB-DEV (Permite puertos a EC2)
RDP TCP 3389 <VPN Endpoint> Company VPN
RDP TCP 3389 <Yourself> RDP
RDP TCP 3389 sgr-091a912ec59ae4184 Bastion
Nombre: RDS-DEV (Permite puertos a RDS)
MSSQL TCP 1433 <VPN Endpoint> Company VPN
MSSQL TCP 1433 sgr-082d6e34327ee6b9c8 (EB-DEV)
MSSQL TCP 1433 <Yourself> RDS
MSSQL TCP 1433 sgr-091a912ec59ae4184 Bastion
Nombre: Bastion (Opcional) (Se agrega arriba para permitirle acceso a instancias en subredes privadas)
MSSQL TCP 1433 <VPN Endpoint> Company VPN

Pares de claves:
Crea un par de claves -> <companyname-%dev%> -> PEM -> Crear

Instancias: Crea un host Bastion (Opcional)
Lanza una instancia básica de Windows 2019 para usarla como jump-host de RDP si utilizas subredes privadas para instancias de App Builder.

Crear una base de datos usando RDS

  1. Abre el servicio RDS en la consola de AWS
  2. Elige Grupos de subredes > Crear grupo de subredes de BD > Etiqueta como privada o pública, dependiendo de si deseas la capacidad de acceso externo (permitiendo grupos de seguridad) > Elige tu VPC y selecciona el par de zonas de disponibilidad que utilizaste al configurar las subredes para la VPC anterior > Ahora selecciona las dos subredes correctas que sean ambas del conjunto privado o público. > Crear
  3. Elige Crear base de datos > Microsoft SQL Server > Elige licencia:

    • SQL Server Express Edition *(Aceptable para bases de datos pequeñas menores a 10GB e instancias de tamaño 'large' o menor.)
    • SQL Web Edition (Para bases de datos > 10GB; para tamaños de instancia > 'large')
    • SQL Standard Edition (Para Multi-AZ; Muy costoso)
  4. Identificador de instancia de BD: Por ejemplo: companyname-db-dev

  5. Nombre de usuario maestro: App Builder
  6. Contraseña maestra: Genera una contraseña aleatoria fuerte que excluya símbolos (Por ejemplo: zpZvLtLmRmrrE68T)
  7. Tamaño de instancia: T3.Medium o mayor, dependiendo de la carga de trabajo (M5.Large o mayor para CPU sostenida alta.)
  8. Almacenamiento asignado: 20GB para comenzar en dev; se recomienda 200GB o más para Prod debido a mayor asignación de IOPS
  9. Grupo de subredes: Elige el que creaste arriba.

  10. Acceso público: Sí si el grupo anterior utiliza subredes públicas; de lo contrario, no.

  11. Grupos de seguridad de VPC existentes: Elige el grupo de RDS creado anteriormente.

Establece los valores restantes según sea necesario (Mantén 1433 como puerto de BD).

Nota

Si se aloja App Builder con Jitterbit, SQL Server Express no es una opción de base de datos compatible.

Configuración de Elastic Beanstalk (EB)

  • Nombre de la aplicación: App Builder
  • Nombre del entorno: *nombreempresa*-app-*dev*
  • Plataforma: .NET en Windows; IIS 10 Windows 2019, plataforma más reciente
  • Carga el paquete .zip de App Builder con terminación de nombre de archivo '-eb'. Por ejemplo: vinyl-3.3.12345-win-eb.zip
  • Selecciona Configurar más opciones - Desplázate hacia la parte superior de la página Selecciona: Configuración personalizada Para lo siguiente, haz clic en Editar en cada sección y guarda en el siguiente orden:

    Configuración de Elastic Beanstalk
    Capacidad: Con equilibrio de carga; mín 1/máx 1 (Consulta el manual de alta disponibilidad para valores superiores);
    Tipo de instancia: T3.medium o superior (Según la carga);
    ID de AMI: Utiliza el ID de AMI predeterminado
    Red: Selecciona la VPC creada
    Subredes del equilibrador de carga: Selecciona 2 subredes públicas
    Subredes de instancia: Selecciona 2 subredes privadas
    Subredes de base de datos: Sin usar
    Instancias: Tamaño: 150GB; Grupos: Grupo de EB creado en la sección EC2.
    Equilibrador de carga: Tipo: Aplicación -> Procesos; Edita predeterminado;
    Código HTTP: 200; Ruta /ping
    Para SSL: (Consulta Configuración de HTTPS) Agregar escucha - 443/HTTPS - Tu certificado - TLS-1-2-Ext-2018-06
    Seguridad: <Par de claves EC2 de arriba>; Perfil de instancia de IAM según se creó arriba. Deja el rol de servicio tal como está (autogenerado)
  • ¡Crear!

Configuración posterior a EB

El entorno tardará aproximadamente 15 a 20 minutos en estar listo.

Una vez que EB haya terminado de configurar los componentes, es normal que el estado sea rojo en esta fase, ya que es necesario actualizar las propiedades predeterminadas del entorno de EB.

En el entorno de ElasticBeanstalk: Ve a: Configuración -> Software -> Editar:

postconfig1.jpg

postconfig2.jpg

Desplázate hacia abajo hasta las propiedades del entorno:

Nombre de propiedad Predeterminado Ejemplo
ConnectionInfo DatabaseType=SQLServer;HostName=;DatabaseName=App Builder;UserName=vinyl;Password=password DatabaseType=SQLServer;HostName=example-db-dev.cmpgei1x4tzz.us-east-1.rds.amazonaws.com;DatabaseName=App Builder;UserName=vinyl;Password=P@SSW**RD~!!
DataEncryption:S3BucketEndpoint https://{bucket}s3{-aws-region}.amazonaws.com https://companyname-vinyl-encryption-keys-dev
DataEncryption:S3KeyPrefix {elastic-beanstalk-environment-name} Companyname-app-Dev
  1. ConnectionInfo: Edita las porciones de cadena para que coincidan con el nombre de host, usuario y contraseña de tu base de datos.
  2. DataEncryptionKeyS3BucketEndpoint: Establécelo al nombre del bucket creado anteriormente.
  3. DataEncryptionKeyS3KeyPrefix: Establécelo al nombre del entorno de Elastic Beanstalk.

Después de aplicar estos pasos y completar las actualizaciones, ve a la URL del sitio de App Builder en EB. Esto activará una instalación o actualización de base de datos si es necesaria.

Configurar HTTPS

Por defecto, los nuevos entornos de Elastic Beanstalk no están configurados para HTTPS. Como se menciona en la documentación de App Builder, se recomienda ampliamente HTTPS para todos los nuevos entornos de Elastic Beanstalk.

Los entornos de Elastic Beanstalk terminan la conexión HTTPS en el Elastic Load Balancer.

Nota

Para el siguiente proceso, debes haber creado o importado un certificado en el servicio de Certificate Manager.

Configurar Elastic Beanstalk para aceptar solicitudes HTTPS

  1. Inicia sesión en la Consola de Amazon Web Services
  2. En Services, elige Elastic Beanstalk
  3. Selecciona el entorno que estás actualizando
  4. Selecciona Configuration en el menú izquierdo
  5. En Load Balancer elige Edit
  6. Si no está presente, agrega Listener Port 443, HTTPS:

    HTTPS1.jpg

  7. Selecciona el SSL Certificate ID que sea aplicable *Para la 'SSL policy'; En cuanto a Windows 2019, se debe usar TLS 1.2

  8. Haz clic en el botón Save y luego en Apply en la página de Load Balancer:

    HTTPS2.jpg

Forzar redirección de HTTPS y FQDN

Asegúrate de haber creado y probado una entrada DNS CNAME para tu dominio con tu registrador o servidores de nombres actuales antes de configurar lo siguiente. El URI de ElasticBeanstalk será el valor de destino que tu entrada DNS debe usar. También debe coincidir con el certificado SSL que estés utilizando.

Ejemplo

  • Host/Name: demo1.companydomain.com
  • Type: CNAME
  • Target/Value: demo1.us-east-1.elasticbeanstalk.com
  1. Desde App Builder, ve a IDE > Security Providers
  2. Desde el panel Configuration, haz clic en el botón More y selecciona Sites:

    moresites.png

  3. Haz doble clic en la entrada predeterminada

  4. Haz clic en el botón Edit
  5. Ingresa tu FQDN url con https en el campo URL
  6. Marca para habilitar Redirect
  7. En el campo Redirect If Header Exists, ingresa X-Forwarded-For:

    siteredirect.png

  8. Haz clic en Save