在 Amazon 上管理您自己的 Amazon VPC端點 MWAA - Amazon Managed Workflows for Apache Airflow

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 Amazon 上管理您自己的 Amazon VPC端點 MWAA

Amazon MWAA使用 Amazon VPC端點與設定 Apache Airflow 環境所需的各種 AWS 服務整合。管理您自己的端點有兩個主要使用案例:

  1. 這表示當您使用 AWS Organizations管理多個 AWS 帳戶和共用資源VPC時,可以在共用的 Amazon 中建立 Apache Airflow 環境。

  2. 它可讓您將許可縮減至使用端點的特定資源,藉此使用更嚴格的存取政策。

如果您選擇管理自己的VPC端點,您有責任為 RDS PostgreSQL 資料庫和環境 Web 伺服器的環境建立自己的端點。

如需有關 Amazon MWAA 如何在雲端部署 Apache Airflow 的詳細資訊,請參閱 Amazon MWAA架構圖

在共用 Amazon 中建立環境 VPC

如果您使用 AWS Organizations 來管理共用資源的多個 AWS 帳戶,則可以使用客戶受管VPC端點與 AmazonMWAA,與您組織中的其他帳戶共用環境資源。

當您設定共用VPC存取權時,擁有主要 Amazon VPC(擁有者 ) 的帳戶會MWAA與屬於相同組織的其他帳戶 (參與者 ) 共用 Amazon 所需的兩個私有子網路。共用這些子網路的參與者帳戶可以在共用的 Amazon 中檢視、建立、修改和刪除環境VPC。

假設您有一個帳戶 Owner,該帳戶在組織中擔任 Root帳戶,並擁有 Amazon VPC 資源,以及參與者帳戶 Participant,即同一組織的成員。在 Amazon MWAA中Participant建立新的 Amazon 與 VPC共用時Owner,Amazon MWAA會先建立服務VPC資源,然後輸入PENDING狀態長達 72 小時。

環境狀態從 變更為 CREATINGPENDING,代表 的委託人會Owner建立所需的端點。若要這麼做,Amazon 會在 Amazon MWAA主控台中MWAA列出資料庫和 Web 伺服器端點。您也可以呼叫 GetEnvironmentAPI動作來取得服務端點。

注意

如果您VPC用來共用資源的 Amazon 是私有的 Amazon VPC,您仍然必須完成 中所述的步驟在 Amazon MWAA 上管理服務特定 Amazon VPC 端點的存取。本主題涵蓋設定與 AWS 整合之其他 AWS 服務相關的不同 Amazon VPC端點集,例如 Amazon ECR、Amazon ECS和 Amazon SQS。這些服務對於在雲端中操作和管理 Apache Airflow 環境至關重要。

必要條件

在共用 中建立 Amazon MWAA環境之前VPC,您需要下列資源:

  • AWS 帳戶,Owner用作擁有 Amazon 的帳戶VPC。

  • AWS Organizations 組織單位,MyOrganization建立為

  • 下的第二個 AWS 帳戶 ParticipantMyOrganization,用於為建立新環境的參與者帳戶提供服務。

此外,我們建議您在 Amazon 中共用資源時,熟悉擁有者和參與者的責任和許可VPC。

建立 Amazon VPC

首先,建立VPC擁有者和參與者帳戶將共用的新 Amazon:

  1. 使用 登入主控台,Owner然後開啟 AWS CloudFormation 主控台。使用下列範本建立堆疊。此堆疊會佈建許多聯網資源VPC,包括 Amazon ,以及這兩個帳戶在此案例中將共用的子網路。

    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. 佈建新的 Amazon VPC 資源後,導覽至 AWS Resource Access Manager 主控台,然後選擇建立資源共用

  3. 從可與 共用的可用子網路清單中,選擇您在第一個步驟中建立的子網路Participant

建立 環境

完成下列步驟,以使用客戶管理的 Amazon VPC端點建立 Amazon MWAA環境。

  1. 使用 登入Participant,然後開啟 Amazon MWAA主控台。完成步驟一:指定詳細資訊,以指定新環境的 Amazon S3 儲存貯體、DAG資料夾和相依性。如需詳細資訊,請參閱 入門

  2. 設定進階設定頁面的網路下,從共用的 Amazon 選擇子網路VPC。

  3. 端點管理下,CUSTOMER從下拉式清單中選擇 。

  4. 保留頁面上其餘選項的預設值,然後在檢閱和建立頁面上選擇建立環境

環境以 CREATING 狀態開始,然後變更為 PENDING。當環境為 時PENDING,請使用主控台寫下資料庫端點服務名稱Web 伺服器端點服務名稱 (如果您設定私有 Web 伺服器)。

當您使用 Amazon MWAA主控台建立新環境時。Amazon 會MWAA建立新的安全群組,其中包含必要的傳入和傳出規則。記下該安全群組 ID。

在下一節中, Owner將使用服務端點和安全群組 ID,在共用的 Amazon 中建立新的 Amazon VPC端點VPC。

建立 Amazon VPC端點

完成下列步驟,為您的環境建立所需的 Amazon VPC端點。

  1. AWS Management Console 使用 登入 Owner,開啟 https://console.aws.amazon.com/vpc/

  2. 從左側導覽面板中選擇安全群組,然後使用VPC下列傳入和傳出規則在共用 Amazon 中建立新的安全群組:

    Type 通訊協定 來源類型 來源

    傳入

    所有流量 全部 全部

    您的環境安全群組

    傳出

    所有流量 全部 全部 0.0.0.0/0
    警告

    Owner 帳戶必須在 Owner 帳戶中設定安全群組,以允許從新環境到共用 Amazon 的流量VPC。您可以在 中建立新的安全群組Owner,或編輯現有的安全群組。

  3. 選擇端點 ,然後使用先前步驟中的端點服務名稱,為環境資料庫和 Web 伺服器建立新的端點 (如果處於私有模式)。選擇共用的 Amazon VPC、您用於環境的子網路,以及環境的安全群組。

如果成功,環境將從PENDING返回 變更為 CREATING,最後變更為 AVAILABLE。當它是 時AVAILABLE,您可以登入 Apache Airflow 主控台。

共用 Amazon VPC疑難排解

使用下列參考來解決在共用 Amazon 中建立環境時遇到的問題VPC。

PENDING 狀態CREATE_FAILED後 中的環境
  • 驗證 Owner 是否Participant使用 與 共用子網路AWS Resource Access Manager

  • 確認資料庫和 Web 伺服器的 Amazon VPC端點是在與環境相關聯的相同子網路中建立。

  • 確認與端點搭配使用的安全群組允許來自用於環境的安全群組的流量。Owner 帳戶會建立參考 中安全群組Participantaccount-number/security-group-id: 的規則。

    Type 通訊協定 來源類型 來源
    所有流量 全部 全部 123456789012/sg-0909e8e81919

    如需詳細資訊,請參閱擁有者和參與者的責任和許可

環境卡在 PENDING 狀態

驗證每個VPC端點狀態,以確保其為 Available。如果您使用私有 Web 伺服器設定環境,也必須為 Web 伺服器建立端點。如果環境卡在 中PENDING,這可能表示私有 Web 伺服器端點遺失。

收到The Vpc Endpoint Service 'vpce-service-name' does not exist錯誤

如果您看到下列錯誤,請確認在擁有共用 Owner的帳戶中建立端點的帳戶VPC:

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

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