Como gerenciar seus próprios endpoints da Amazon VPC no Amazon MWAA - Amazon Managed Workflows for Apache Airflow

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Como gerenciar seus próprios endpoints da Amazon VPC no Amazon MWAA

O Amazon MWAA usa endpoints Amazon VPC para se integrar a vários AWS serviços necessários para configurar um ambiente Apache Airflow. O gerenciamento de seus próprios endpoints tem dois casos de uso principais:

  1. Isso significa que você pode criar ambientes Apache Airflow em um Amazon VPC compartilhado ao usar um AWS Organizationspara gerenciar várias AWS contas e compartilhar recursos.

  2. Ele permite usar políticas de acesso mais restritivas, limitando suas permissões aos recursos específicos que usam seus endpoints.

Caso opte por gerenciar seus próprios endpoints da VPC, você será responsável por criar seus próprios endpoints para o ambiente RDS do banco de dados PostgreSQL e para o servidor Web do ambiente.

Para obter mais informações sobre como o Amazon MWAA implanta o Apache Airflow na nuvem, consulte o diagrama de arquitetura do Amazon MWAA.

Como criar um ambiente em uma Amazon VPC compartilhada

Se você usa AWS Organizationspara gerenciar várias AWS contas que compartilham recursos, você pode usar VPC endpoints gerenciados pelo cliente com o Amazon MWAA para compartilhar recursos ambientais com outra conta em sua organização.

Ao configurar o acesso compartilhado à VPC, a conta proprietária da Amazon VPC central (proprietário) compartilha as duas sub-redes privadas exigidas pelo Amazon MWAA com outras contas (participantes) que pertencem à mesma organização. As contas participantes que compartilham essas sub-redes podem exibir, criar, modificar e excluir ambientes na Amazon VPC compartilhada.

Suponha que você tenha uma conta, Owner, que atua como a conta Root na organização e possui os recursos da Amazon VPC, e uma conta participante, Participant, um membro da mesma organização. Quando Participant criar um Amazon MWAA na Amazon VPC que compartilha com Owner, o Amazon MWAA primeiro criará os recursos de VPC do serviço e, em seguida, entrará em um estado PENDING por até 72 horas.

Depois que o status do ambiente muda de CREATING para PENDING, uma entidade principal agindo em nome de Owner cria os endpoints necessários. Para fazer isso, o Amazon MWAA lista o endpoint do banco de dados e do servidor Web no console do Amazon MWAA. Você também pode chamar a ação da API GetEnvironment para obter os endpoints do serviço.

nota

Se a Amazon VPC que você usa para compartilhar recursos for uma Amazon VPC privada, ainda será necessário concluir as etapas descritas em Como gerenciar o acesso a endpoints da Amazon VPC específicos do serviço no Amazon MWAA. O tópico aborda a configuração de um conjunto diferente de endpoints do Amazon VPC relacionados a outros AWS serviços que AWS se integram, como Amazon ECR, Amazon ECS e Amazon SQS. Esses serviços são essenciais para operar e gerenciar o ambiente do Apache Airflow na nuvem.

Pré-requisitos

Antes de criar um ambiente do Amazon MWAA em uma VPC compartilhada, você precisa dos seguintes recursos:

  • Uma AWS conta, Owner para ser usada como a conta proprietária da Amazon VPC.

  • Uma unidade organizacional do AWS Organizations, um MyOrganization criado como raiz.

  • Uma segunda AWS conta,Participant, abaixo MyOrganization para servir à conta do participante que cria o novo ambiente.

Além disso, recomendamos se familiarizar com as responsabilidades e permissões dos proprietários e participantes ao compartilhar recursos na Amazon VPC.

Criar a Amazon VPC

Primeiro, crie uma Amazon VPC que as contas proprietária e participante compartilharão:

  1. Entre no console usando eOwner, em seguida, abra o AWS CloudFormation console. Use o modelo a seguir para criar uma pilha. Essa pilha provisiona vários recursos de rede, incluindo uma Amazon VPC, e as sub-redes que as duas contas compartilharão nesse cenário.

    AWSTemplateFormatVersion: "2010-09-09" Description: >- This template deploys a VPC, with a pair of public and private subnets spread across two Availability Zones. It deploys an internet gateway, with a default route on the public subnets. It deploys a pair of NAT gateways (one in each AZ), and default routes for them in the private subnets. Parameters: EnvironmentName: Description: An environment name that is prefixed to resource names Type: String Default: mwaa- VpcCIDR: Description: Please enter the IP range (CIDR notation) for this VPC Type: String Default: 10.192.0.0/16 PublicSubnet1CIDR: Description: >- Please enter the IP range (CIDR notation) for the public subnet in the first Availability Zone Type: String Default: 10.192.10.0/24 PublicSubnet2CIDR: Description: >- Please enter the IP range (CIDR notation) for the public subnet in the second Availability Zone Type: String Default: 10.192.11.0/24 PrivateSubnet1CIDR: Description: >- Please enter the IP range (CIDR notation) for the private subnet in the first Availability Zone Type: String Default: 10.192.20.0/24 PrivateSubnet2CIDR: Description: >- Please enter the IP range (CIDR notation) for the private subnet in the second Availability Zone Type: String Default: 10.192.21.0/24 Resources: VPC: Type: 'AWS::EC2::VPC' Properties: CidrBlock: !Ref VpcCIDR EnableDnsSupport: true EnableDnsHostnames: true Tags: - Key: Name Value: !Ref EnvironmentName InternetGateway: Type: 'AWS::EC2::InternetGateway' Properties: Tags: - Key: Name Value: !Ref EnvironmentName InternetGatewayAttachment: Type: 'AWS::EC2::VPCGatewayAttachment' Properties: InternetGatewayId: !Ref InternetGateway VpcId: !Ref VPC PublicSubnet1: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref VPC AvailabilityZone: !Select - 0 - !GetAZs '' CidrBlock: !Ref PublicSubnet1CIDR MapPublicIpOnLaunch: true Tags: - Key: Name Value: !Sub '${EnvironmentName} Public Subnet (AZ1)' PublicSubnet2: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref VPC AvailabilityZone: !Select - 1 - !GetAZs '' CidrBlock: !Ref PublicSubnet2CIDR MapPublicIpOnLaunch: true Tags: - Key: Name Value: !Sub '${EnvironmentName} Public Subnet (AZ2)' PrivateSubnet1: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref VPC AvailabilityZone: !Select - 0 - !GetAZs '' CidrBlock: !Ref PrivateSubnet1CIDR MapPublicIpOnLaunch: false Tags: - Key: Name Value: !Sub '${EnvironmentName} Private Subnet (AZ1)' PrivateSubnet2: Type: 'AWS::EC2::Subnet' Properties: VpcId: !Ref VPC AvailabilityZone: !Select - 1 - !GetAZs '' CidrBlock: !Ref PrivateSubnet2CIDR MapPublicIpOnLaunch: false Tags: - Key: Name Value: !Sub '${EnvironmentName} Private Subnet (AZ2)' NatGateway1EIP: Type: 'AWS::EC2::EIP' DependsOn: InternetGatewayAttachment Properties: Domain: vpc NatGateway2EIP: Type: 'AWS::EC2::EIP' DependsOn: InternetGatewayAttachment Properties: Domain: vpc NatGateway1: Type: 'AWS::EC2::NatGateway' Properties: AllocationId: !GetAtt NatGateway1EIP.AllocationId SubnetId: !Ref PublicSubnet1 NatGateway2: Type: 'AWS::EC2::NatGateway' Properties: AllocationId: !GetAtt NatGateway2EIP.AllocationId SubnetId: !Ref PublicSubnet2 PublicRouteTable: Type: 'AWS::EC2::RouteTable' Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub '${EnvironmentName} Public Routes' DefaultPublicRoute: Type: 'AWS::EC2::Route' DependsOn: InternetGatewayAttachment Properties: RouteTableId: !Ref PublicRouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway PublicSubnet1RouteTableAssociation: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: RouteTableId: !Ref PublicRouteTable SubnetId: !Ref PublicSubnet1 PublicSubnet2RouteTableAssociation: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: RouteTableId: !Ref PublicRouteTable SubnetId: !Ref PublicSubnet2 PrivateRouteTable1: Type: 'AWS::EC2::RouteTable' Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub '${EnvironmentName} Private Routes (AZ1)' DefaultPrivateRoute1: Type: 'AWS::EC2::Route' Properties: RouteTableId: !Ref PrivateRouteTable1 DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: !Ref NatGateway1 PrivateSubnet1RouteTableAssociation: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: RouteTableId: !Ref PrivateRouteTable1 SubnetId: !Ref PrivateSubnet1 PrivateRouteTable2: Type: 'AWS::EC2::RouteTable' Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub '${EnvironmentName} Private Routes (AZ2)' DefaultPrivateRoute2: Type: 'AWS::EC2::Route' Properties: RouteTableId: !Ref PrivateRouteTable2 DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: !Ref NatGateway2 PrivateSubnet2RouteTableAssociation: Type: 'AWS::EC2::SubnetRouteTableAssociation' Properties: RouteTableId: !Ref PrivateRouteTable2 SubnetId: !Ref PrivateSubnet2 SecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupName: mwaa-security-group GroupDescription: Security group with a self-referencing inbound rule. VpcId: !Ref VPC SecurityGroupIngress: Type: 'AWS::EC2::SecurityGroupIngress' Properties: GroupId: !Ref SecurityGroup IpProtocol: '-1' SourceSecurityGroupId: !Ref SecurityGroup Outputs: VPC: Description: A reference to the created VPC Value: !Ref VPC PublicSubnets: Description: A list of the public subnets Value: !Join - ',' - - !Ref PublicSubnet1 - !Ref PublicSubnet2 PrivateSubnets: Description: A list of the private subnets Value: !Join - ',' - - !Ref PrivateSubnet1 - !Ref PrivateSubnet2 PublicSubnet1: Description: A reference to the public subnet in the 1st Availability Zone Value: !Ref PublicSubnet1 PublicSubnet2: Description: A reference to the public subnet in the 2nd Availability Zone Value: !Ref PublicSubnet2 PrivateSubnet1: Description: A reference to the private subnet in the 1st Availability Zone Value: !Ref PrivateSubnet1 PrivateSubnet2: Description: A reference to the private subnet in the 2nd Availability Zone Value: !Ref PrivateSubnet2 SecurityGroupIngress: Description: Security group with self-referencing inbound rule Value: !Ref SecurityGroupIngress
  2. Depois que os novos recursos da Amazon VPC tiverem sido provisionados, navegue até o AWS Resource Access Manager console e escolha Criar compartilhamento de recursos.

  3. Escolha as sub-redes criadas na primeira etapa na lista de sub-redes disponíveis que você pode compartilhar com Participant.

Criar o ambiente do

Conclua as etapas a seguir para criar um ambiente do Amazon MWAA com endpoints da Amazon VPC gerenciados pelo cliente.

  1. Faça login usando Participant e abra o console do Amazon RDS. Conclua Etapa um: especificar detalhes para especificar um bucket do Amazon S3, uma pasta DAG e dependências para o novo ambiente. Para obter mais informações, consulte Conceitos básicos.

  2. Na página Definir configurações avançadas, em Rede, escolha as sub-redes da Amazon VPC compartilhada.

  3. Em Gerenciamento de endpoints, escolha CLIENTE na lista suspensa.

  4. Mantenha o padrão para as opções restantes na página e escolha Criar ambiente na página Revisar e criar.

O ambiente começa em um estado CREATING e depois muda para PENDING. Quando o ambiente estiver PENDING, anote o nome do serviço do endpoint do banco de dados e o nome do serviço do endpoint do servidor Web (caso configure um servidor Web privado) usando o console.

Ao criar um ambiente usando o console do Amazon MWAA. O Amazon MWAA cria um grupo de segurança com as regras de entrada e saída necessárias. Anote o ID do security group.

Na próxima seção, Owner usará os endpoints de serviço e o ID do grupo de segurança para criar endpoints da Amazon VPC na Amazon VPC compartilhada.

Criar os endpoints da Amazon VPC

Conclua as etapas a seguir para criar os endpoints da Amazon VPC necessários para o ambiente.

  1. Faça login no AWS Management Console usandoOwner, o aberto https://console.aws.amazon.com/vpc/.

  2. Escolha Grupos de segurança no painel de navegação esquerdo e crie um grupo de segurança na Amazon VPC compartilhada usando as seguintes regras de entrada e saída:

    Tipo Protocolo Tipo de origem Origem

    Entrada

    Todo o tráfego Tudo Todos

    O grupo de segurança do seu ambiente

    Saída

    Todo o tráfego Tudo Todos 0.0.0.0/0
    Atenção

    A conta Owner deve configurar um grupo de segurança na conta Owner para permitir o tráfego do novo ambiente para a Amazon VPC compartilhada. Você pode fazer isso criando um grupo de segurança em Owner ou editando um existente.

  3. Escolha Endpoints e crie endpoints para o banco de dados do ambiente e o servidor Web (se estiver no modo privado) usando os nomes dos serviços de endpoint das etapas anteriores. Escolha a Amazon VPC compartilhada, as sub-redes usadas no ambiente e o grupo de segurança do ambiente.

Se bem-sucedido, o ambiente mudará de PENDING para CREATING e, por fim, para AVAILABLE. Quando estiver AVAILABLE, você poderá entrar no console do Apache Airflow.

Solução de problemas da Amazon VPC compartilhada

Use a referência a seguir para resolver problemas encontrados ao criar ambientes em uma Amazon VPC compartilhada.

Ambiente em CREATE_FAILED após o status PENDING
  • Verifique se Owner está compartilhando as sub-redes com Participant usando AWS Resource Access Manager.

  • Verifique se os endpoints da Amazon VPC para o banco de dados e o servidor Web foram criados nas mesmas sub-redes associadas ao ambiente.

  • Verifique se o grupo de segurança usado com seus endpoints permite o tráfego dos grupos de segurança usados para o ambiente. A conta Owner cria regras que fazem referência ao grupo de segurança em Participant comoaccount-number/security-group-id:.

    Tipo Protocolo Tipo de origem Origem
    Todo o tráfego Tudo Todos 123456789012/sg-0909e8e81919

    Para obter mais informações, consulte Responsabilidades e permissões para proprietários e participantes

Ambiente preso no status PENDING

Verifique o status de cada endpoint da VPC para garantir que esteja Available. Caso configure um ambiente com um servidor Web privado, também deverá criar um endpoint para o servidor Web. Se o ambiente estiver preso em PENDING, isso pode indicar que o endpoint do servidor Web privado está ausente.

Erro The Vpc Endpoint Service 'vpce-service-name' does not exist recebido

Caso receba o seguinte erro, verifique se a conta que cria os endpoints está na conta Owner que possui a VPC compartilhada:

ClientError: An error occurred (InvalidServiceName) when calling the CreateVpcEndpoint operation: 

The Vpc Endpoint Service 'vpce-service-name' does not exist