教程:在 Amazon MWAA 上自动管理您自己的环境终端节点 - Amazon Managed Workflows for Apache Airflow
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:在 Amazon MWAA 上自动管理您自己的环境终端节点

如果您使用Amazon Organizations管理多个共享资源的Amazon账户,Amazon MWAA 允许您创建和管理自己的亚马逊 VPC 终端节点。这意味着您可以使用更严格的安全策略,仅允许访问您的环境所需的资源。

当您在共享的 Amazon VPC 中创建环境时,拥有主 Amazon VPC 的账户(所有者)将与属于同一组织的其他账户(参与者)共享 Amazon MWAA 所需的两个私有子网。然后,共享这些子网的参与者账户可以查看、创建、修改和删除共享 VPC 中的环境。

当您在共享或受其他策略限制的 Amazon VPC 中创建环境时,Amazon MWAA 将首先创建服务 VPC 资源,然后进入最长 7 PENDING2 小时的状态。

当环境状态从变CREATING为时PENDING,Amazon MWAA 会向亚马逊发送状态变更 EventBridge 通知。这样,所有者账户就可以根据来自 Amazon MWAA 控制台或 API 的终端节点服务信息,或者以编程方式代表参与者创建所需的终端节点。在下文中,我们使用 Lambda 函数和监听 Amazon MWAA 状态变更通知的规则创建新的亚马逊 VPC 终端节点。 EventBridge

在这里,我们在与环境相同的 Amazon VPC 中创建新的终端节点。要设置共享的 Amazon VPC,请在所有者账户中创建 EventBridge 规则和 Lambda 函数,在参与者账户中创建 Amazon MWAA 环境。

先决条件

要完成本教程中的步骤,您将需要以下内容:

  • ...

创建亚马逊 VPC

使用以下Amazon CloudFormation模板和Amazon CLI命令创建新的 Amazon VPC。该模板设置 Amazon VPC 资源并修改终端节点策略以限制对特定队列的访问。

  1. 下载Amazon CloudFormation模板,然后解压缩.yml文件。

  2. 在新的命令提示符窗口中,导航到保存模板的文件夹,然后使用create-stack创建堆栈。该--template-body标志指定模板的路径。

    $ aws cloudformation create-stack --stack-name stack-name --template-body file://cfn-vpc-private-network.yml

在下一节中,您将创建 Lambda 函数。

创建 Lambda 函数

使用以下 Python 代码和 IAM JSON 策略创建新的 Lambda 函数和执行角色。此函数为私有 Apache Airflow Web 服务器和亚马逊 SQS 队列创建亚马逊 VPC 终端节点。在扩展您的环境时,Amazon MWAA 使用 Amazon SQS 将使用 Celery 的任务排队给多个工作人员。

  1. 下载 Python 函数代码

  2. 下载 IAM 权限策略,然后解压缩文件。

  3. 打开命令提示符,然后导航到保存 JSON 权限策略的文件夹。使用 IAM create-role命令创建新角色。

    $ aws iam create-role --role-name function-role \ --assume-role-policy-document file://lambda-mwaa-vpce-policy.json

    记下响应中的角色 ARN。Amazon CLI在下一步中,我们将使用函数的 ARN 将这个新角色指定为函数的执行角色。

  4. 导航到保存函数代码的文件夹,然后使用create-function命令创建新函数。

    $ aws lambda create-function --function-name mwaa-vpce-lambda \ --zip-file file://mwaa-lambda-shared-vpc.zip --runtime python3.8 --role arn:aws:iam::123456789012:role/function-role --handler lambda_handler

    请注意响应中的函数 ARN。Amazon CLI在下一步中,我们将指定 ARN 以将该函数配置为新 EventBridge 规则的目标。

在下一节中,您将创建在环境进入状态时调用此函数的 EventBridge 规则。PENDING

创建 EventBridge 规则

执行以下操作来创建一条新规则,该规则用于监听 Amazon MWAA 通知并针对您的新 Lambda 函数。

  1. 使用 EventBridge put-rule命令创建新 EventBridge 规则。

    $ aws events put-rule --name "mwaa-lambda-rule" \ --event-pattern "{\"source\":[\"aws.airflow\"],\"detail-type\":[\"MWAA Environment Status Change\"]}"

    事件模式用于监听 Amazon MWAA 在环境状态发生变化时发送的通知。

    { "source": ["aws.airflow"], "detail-type": ["MWAA Environment Status Change"] }
  2. 使用put-targets命令将 Lambda 函数添加为新规则的目标。

    $ aws events put-targets --rule "mwaa-lambda-rule" \ --targets "Id"="1","Arn"="arn:aws::lambda:region:123456789012:function:mwaa-vpce-lambda"

您已准备好使用客户管理的 Amazon VPC 终端节点创建新的 Amazon MWAA 环境。

创建 Amazon MWAA 环境

使用 Amazon MWAA 控制台创建具有客户管理的 Amazon VPC 终端节点的新环境。

  1. 打开 Amazon MWAA 控制台,然后选择创建环境。

  2. 在 “名称” 中输入一个唯一的名称。

  3. 对于 Airflow 版本,请选择最新版本。

  4. 选择用于环境的 A mazon S3 存储桶和 DA dags/G 文件夹,然后选择 “下一步”。

  5. 在 “配置高级设置” 页面上,执行以下操作:

    1. 对于虚拟私有云,请选择您在上一步中创建的 Amazon VPC。

    2. 访问 Web 服务器,请选择公共网络(可访问互联网)

    3. 对于安全组,请选择您创建的安全组Amazon CloudFormation。由于前面步骤中Amazon PrivateLink终端节点的安全组是自引用的,因此您必须为您的环境选择相同的安全组。

    4. 对于端点管理,请选择客户管理的端点

  6. 保留其余的默认设置,然后选择 “下一步”。

  7. 查看您的选择,然后选择创建环境

提示

有关设置新环境的更多信息,请参阅 Amazon MWAA 入门

当环境处于状态时PENDING,Amazon MWAA 会发送与您为规则设置的事件模式相匹配的通知。该规则会调用您的 Lambda 函数。该函数解析通知事件并获取 Web 服务器和 Amazon SQS 队列所需的终端节点信息。然后,它会在您的 Amazon VPC 中创建终端节点。

当终端节点可用时,Amazon MWAA 会恢复创建您的环境。准备就绪后,环境状态将更改为,您可以使用 Amazon MWAA 控制台访问 Apache Airflow Web 服务器。AVAILABLE