in

Nuevo para App Runner: compatibilidad con VPC | Servicios web de Amazon

Con AWS App Runner, puede implementar rápidamente aplicaciones web y API a cualquier escala. Puede comenzar con su código fuente o una imagen de contenedor, y App Runner administrará por completo toda la infraestructura, incluidos los servidores, las redes y el equilibrio de carga para su aplicación. Si lo desea, App Runner también puede configurar una canalización de implementación para usted.

A partir de hoy, App Runner permite que sus servicios se comuniquen con bases de datos y otras aplicaciones alojadas en una nube privada virtual (VPC) de Amazon. Por ejemplo, ahora puede conectar los servicios de App Runner a bases de datos en Amazon Relational Database Service (RDS), cachés de Redis o Memcached en Amazon ElastiCache, o sus propias aplicaciones que se ejecutan en Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (EKS ), Amazon Elastic Compute Cloud (Amazon EC2), o en las instalaciones y conectado a través de AWS Direct Connect.

Anteriormente, para que su aplicación App Runner se conectara a estos recursos, debían ser de acceso público a través de Internet. Con esta característica, las aplicaciones de App Runner pueden conectarse a puntos finales privados en su VPC y puede habilitar un entorno más seguro y compatible eliminando el acceso público a estos recursos.

Dentro de App Runner, ahora puede crear conectores VPC que especifican qué VPC, subredes y grupos de seguridad usar para redes privadas. Una vez configurado, puede usar un conector de VPC con uno o más servicios de App Runner.

Cuando se conecta a una VPC, todo el tráfico saliente de su servicio AppRunner se enrutará según las reglas de enrutamiento de la VPC. Los servicios no tendrán acceso a la Internet pública (incluidas las API de AWS) a menos que lo permita una ruta a una puerta de enlace NAT. También puede configurar puntos de enlace de la VPC para conectarse a las API de AWS, como Amazon Simple Storage Service (Amazon S3) y Amazon DynamoDB, para evitar el tráfico NAT.

Los conectores de VPC en App Runner funcionan de manera similar a las redes de VPC en AWS Lambda y se basan en Hiperplano de AWSel sistema de virtualización de funciones de red interno de Amazon detrás de los servicios y recursos de AWS, como Network Load Balancer, NAT Gateway y AWS PrivateLink.

Veamos cómo funciona esto en la práctica con una aplicación web conectada a una base de datos RDS.

Preparación de la base de datos de Amazon RDS
Comienzo configurando una base de datos para mi aplicación. Para simplificar la administración de la capacidad de esta base de datos, utilizo Amazon Aurora Serverless. En la consola RDS, creo una base de datos compatible con Amazon Aurora MySQL. Para el Tipo de capacidadYo elijo sin servidor. Para las redes, uso mi VPC predeterminada y el grupo de seguridad predeterminado. No necesito hacer que la base de datos sea de acceso público porque me voy a conectar mediante una red de VPC privada. Para simplificar la conexión posterior, habilito la autenticación de la base de datos de AWS Identity and Access Management (IAM).

Comienzo una instancia EC2 de Amazon Linux en la misma VPC. Para conectarme desde la instancia EC2 a la base de datos, necesito un cliente MySQL. yo instalo MariaDBuna rama de MySQL desarrollada por la comunidad:

Luego, me conecto a la base de datos usando el admin usuario.

mysql -h <DATABASE_HOST> -u admin -P

entro en el admin contraseña de usuario para iniciar sesión. Luego, creo un nuevo usuario (bookuser) que está configurado para utilizar la autenticación de IAM.

CREATE USER bookuser IDENTIFIED WITH AWSAuthenticationPlugin AS 'RDS'; 

yo creo el bookcase base de datos y dar permisos a la bookuser usuario para consultar el bookcase base de datos.

CREATE DATABASE bookcase;
GRANT SELECT ON bookcase.* TO 'bookuser'@'%’;

Para almacenar información sobre algunos de mis libros, creo el authors y books mesas.

CREATE TABLE authors (
  authorId INT,
  name varchar(255)
 );

CREATE TABLE books (
  bookId INT,
  authorId INT,
  title varchar(255),
  year INT
);

Luego, inserto algunos valores en las dos tablas:

INSERT INTO authors VALUES (1, "Issac Asimov");
INSERT INTO authors VALUES (2, "Robert A. Heinlein");
INSERT INTO books VALUES (1, 1, "Foundation", 1951);
INSERT INTO books VALUES (2, 1, "Foundation and Empire", 1952);
INSERT INTO books VALUES (3, 1, "Second Foundation", 1953);
INSERT INTO books VALUES (4, 2, "Stranger in a Strange Land", 1961);

Preparación del repositorio de código fuente de la aplicación
Con App Runner, puedo implementar un nuevo servicio desde un código alojado en un repositorio de código fuente o usando una imagen de contenedor. En este ejemplo, uso un proyecto privado que tengo en GitHub.

Es una aplicación web de Python muy simple que se conecta a la base de datos que acabo de crear. Este es el código fuente de la aplicación (server.py):

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
import os
import boto3
import mysql.connector

import os

DATABASE_REGION = 'us-east-1'
DATABASE_CERT = 'cert/us-east-1-bundle.pem'
DATABASE_HOST = os.environ['DATABASE_HOST']
DATABASE_PORT = os.environ['DATABASE_PORT']
DATABASE_USER = os.environ['DATABASE_USER']
DATABASE_NAME = os.environ['DATABASE_NAME']

os.environ['LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN'] = '1'

PORT = int(os.environ.get('PORT'))

rds = boto3.client('rds')

try:
    token = rds.generate_db_auth_token(
        DBHostname=DATABASE_HOST,
        Port=DATABASE_PORT,
        DBUsername=DATABASE_USER,
        Region=DATABASE_REGION
    )
    mydb =  mysql.connector.connect(
        host=DATABASE_HOST,
        user=DATABASE_USER,
        passwd=token,
        port=DATABASE_PORT,
        database=DATABASE_NAME,
        ssl_ca=DATABASE_CERT
    )
except Exception as e:
    print('Database connection failed due to {}'.format(e))          

def all_books(request):
    mycursor = mydb.cursor()
    mycursor.execute('SELECT name, title, year FROM authors, books WHERE authors.authorId = books.authorId ORDER BY year')
    title="Books"
    message="<html><head><title>" + title + '</title></head><body>'
    message += '<h1>' + title + '</h1>'
    message += '<ul>'
    for (name, title, year) in mycursor:
        message += '<li>' + name + ' - ' + title + ' (' + str(year) + ')</li>'
    message += '</ul>'
    message += '</body></html>'
    return Response(message)

if __name__ == '__main__':

    with Configurator() as config:
        config.add_route('all_books', '/')
        config.add_view(all_books, route_name="all_books")
        app = config.make_wsgi_app()
    server = make_server('0.0.0.0', PORT, app)
    server.serve_forever()

La aplicación utiliza el SDK de AWS para Python (boto3) para la autenticación de la base de datos de IAM, el Marco web piramidaly el Conector MySQL para Python. El requirements.txt El archivo describe las dependencias de la aplicación:

boto3
pyramid==2.0
mysql-connector-python

Para usar el cifrado SSL/TLS al conectarme a la base de datos, descargo un paquete de certificados y lo agrego a mi repositorio de código fuente.

Uso de la compatibilidad con VPC en AWS App Runner
En la consola de App Runner, selecciono Repositorio de código fuente y la rama a utilizar.

Captura de pantalla de la consola.

Para la configuración de implementación, elijo Manual. Opcionalmente, podría haber seleccionado el Automático Desencadenador de implementación para que cada impulso a esta rama implemente una nueva versión de mi servicio.

Captura de pantalla de la consola.

Luego, configuro el build. Esta es una aplicación muy simple, así que paso los comandos de compilación e inicio en la consola:

Comando de compilaciónpip install -r requirements.txt
Comando de iniciopython server.py

Para casos de uso más avanzados, agregaría un apprunner.yaml archivo de configuración a mi repositorio como en esta aplicación de muestra.

Captura de pantalla de la consola.

En la configuración del servicio, agrego las variables de entorno que usa la aplicación para conectarse a la base de datos. No necesito pasar una contraseña de base de datos aquí porque estoy usando la autenticación IAM.

Captura de pantalla de la consola.

En el Seguridad sección, selecciono un rol de IAM que otorga permisos para conectarme a la base de datos mediante la autenticación de la base de datos de IAM como se describe en Creación y uso de una política de IAM para el acceso a la base de datos de IAM.

Captura de pantalla de la consola.

Esta es la sintaxis del rol de IAM. encuentro la base de datos ID de recurso en el Configuración pestaña de la consola RDS.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds-db:connect"
            ],
            "Resource": [
                "arn:aws:rds-db:<REGION>:<ACCOUNT>:dbuser:<DB_RESOURCE_ID>/<DB_USER>"
            ]
        }
    ]
}

para el papel política de confianzasigo las instrucciones para los roles de instancia en Cómo funciona App Runner con IAM.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "tasks.apprunner.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Para Redesselecciono la nueva opción para usar un VPC personalizado para el tráfico de red saliente y, a continuación, agregue un nuevo conector de VPC.

Captura de pantalla de la consola.

Para agregar un nuevo conector de VPC, escribo un nombre y luego selecciono la VPC, las subredes y los grupos de seguridad para usar. Aquí, selecciono todas las subredes de mi VPC predeterminada y el grupo de seguridad predeterminado. De esta forma, el servicio App Runner podrá conectarse a la base de datos RDS.

Captura de pantalla de la consola.

La próxima vez, al configurar otra aplicación con los mismos requisitos de red de VPC, solo puedo seleccionar el conector de VPC que creé antes.

Captura de pantalla de la consola. Reviso todas las configuraciones y luego creo e implemento el servicio.

Después de unos minutos, el servicio se está ejecutando y elijo el dominio predeterminado para abrir una nueva pestaña en mi navegador. La aplicación está conectada a la base de datos mediante redes VPC y realiza una consulta SQL para unirse a la books y authors tablas y proporcionar algunas sugerencias de lectura. ¡Funciona!

Captura de pantalla del navegador.

Disponibilidad y precios
Los conectores de VPC están disponibles en todas las regiones de AWS donde se ofrece AWS App Runner. Para obtener más información, consulte la Lista de servicios regionales. No hay ningún costo adicional por usar esta función, pero paga el precio estándar por la transmisión de datos o cualquier puerta de enlace NAT o punto final de la VPC que configure. Puede configurar conectores de VPC con la consola de administración de AWS, la interfaz de línea de comandos (CLI) de AWS, los SDK de AWS y AWS CloudFormation.

Con los conectores de VPC, puede implementar sus aplicaciones mediante App Runner y conectarlas a sus bases de datos privadas, cachés y aplicaciones que se ejecutan en una VPC o en las instalaciones y conectadas a través de AWS Direct Connect.

Cree y ejecute aplicaciones web a cualquier escala y conéctese a sus recursos privados de VPC con AWS App Runner.

Danilo



Fuente

Lista de verificación de Destiny 2 Witch Queen: qué se va y qué hacer ahora

Lista de verificación de Destiny 2 Witch Queen: qué se va y qué hacer ahora

Windows PowerToys: una hoja de trucos

Windows PowerToys: una hoja de trucos