教程:在 Amazon MWAA 上自动管理您自己的环境端点
如果您使用 Amazon Organizations 管理共享资源的多个 Amazon Web Services 账户,则可借助 Amazon MWAA 来创建和管理自己的 Amazon VPC 端点。这意味着您可以使用更严格的安全策略,仅允许访问您的环境所需的资源。
在共享 Amazon VPC 中创建环境时,拥有主要 Amazon VPC 的账户(所有者)将与属于同一组织的其他账户(参与者)共享 Amazon MWAA 所需的两个私有子网。然后,共享这些子网的参与者账户可以查看、创建、修改和删除共享 VPC 中的环境。
在共享的存在其他策略限制的 Amazon VPC 中创建环境时,Amazon MWAA 将首先创建服务 VPC 资源,然后进入 PENDING 状态最长 72 小时。
当环境状态从 CREATING 变为 PENDING 时,Amazon MWAA 会发送一条 Amazon EventBridge 状态变更通知。这让所有者账户能够根据端点服务信息,从 Amazon MWAA 控制台或 API 或通过编程方式创建所需的端点。在下例中,我们将使用一个 Lambda 函数和一条侦听 Amazon MWAA 状态变更通知的 EventBridge 规则,创建新的 Amazon VPC 端点。
在此例中,我们将在与环境相同的 Amazon VPC 中创建新的端点。要设置共享 Amazon VPC,请在所有者账户中创建 EventBridge 规则和 Lambda 函数,并在参与者账户中创建 Amazon MWAA 环境。
先决条件
要完成本教程的步骤,您需要做好以下准备:
-
...
创建 Amazon VPC
使用以下 Amazon CloudFormation 模板和 Amazon CLI 命令创建一个新 Amazon VPC。该模板会设置 Amazon VPC 资源并修改端点策略以限制对特定队列的访问。
-
下载 Amazon CloudFormation 模板,然后解压缩
.yml文件。 -
在新的命令提示符窗口中,导航到保存模板的文件夹,然后使用
create-stack创建堆栈。--template-body标志用于指定模板的路径。aws cloudformation create-stack --stack-namestack-name--template-body file://cfn-vpc-private-network.yml
在下一部分中,您将创建 Lambda 函数。
创建 Lambda 函数
使用以下 Python 代码和 IAM JSON 策略创建新的 Lambda 函数和执行角色。该函数将为一个私有 Apache Airflow Web 服务器和 Amazon SQS 队列创建 Amazon VPC 端点。在扩展环境时,Amazon MWAA 会使用 Amazon SQS 在多个 Worker 节点之间进行 Celery 任务排队。
-
下载 Python 函数代码。
-
下载 IAM 权限策略,然后解压缩该文件。
-
打开命令提示符,然后导航到保存 JSON 权限策略的文件夹。使用 IAM
create-role命令创建该新角色。aws iam create-role --role-namefunction-role\ --assume-role-policy-document file://lambda-mwaa-vpce-policy.json记下 Amazon CLI 响应中的角色 ARN。在下一步中,我们将使用新角色的 ARN 将其指定为函数的执行角色。
-
导航到保存函数代码的文件夹,然后使用
create-function命令创建新函数。aws lambda create-function --function-namemwaa-vpce-lambda\ --zip-file file://mwaa-lambda-shared-vpc.zip --runtime python3.8 --role arn:aws:iam::123456789012:role/function-role--handler lambda_handler记下 Amazon CLI 响应中的函数 ARN。在下一步中,我们将指定该 ARN,以将该函数配置为新 EventBridge 规则的目标。
在下一部分中,您将创建 EventBridge 规则,此规则在环境进入 PENDING 状态时调用该函数。
创建 EventBridge 规则
完成以下步骤,创建一条用于侦听 Amazon MWAA 通知并以您的新 Lambda 函数为目标的新规则。
-
使用 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"] } -
使用
put-targets命令将该 Lambda 函数添加为新规则的目标。aws events put-targets --rule "mwaa-lambda-rule" \ --targets "Id"="1","Arn"="arn:aws:lambda:us-east-1:123456789012:function:mwaa-vpce-lambda"
您已准备就绪,可以使用客户管理型 Amazon VPC 端点创建新的 Amazon MWAA 环境。
创建 Amazon MWAA 环境
通过 Amazon MWAA 控制台使用客户管理型 Amazon VPC 端点创建新的 Amazon MWAA 环境。
-
打开 Amazon MWAA
控制台并选择创建环境。 -
对于名称,输入一个唯一名称。
-
对于 Airflow 版本,请选择最新版本。
-
选择要用于该环境的 Amazon S3 存储桶和 DAG 文件夹(例如
dags/),然后选择下一步。 -
在配置高级设置页面上,执行以下操作:
-
对于虚拟私有云,选择您在上一步中创建的 Amazon VPC。
-
对于 Web 服务器访问,请选择公共网络(可访问互联网)。
-
对于安全组,请选择您使用 Amazon CloudFormation 创建的安全组。由于之前步骤中 Amazon PrivateLink 端点的安全组是自引用的,因此必须为您的环境选择同一安全组。
-
对于端点管理,请选择客户管理型端点。
-
-
请保留其余的默认设置,然后选择下一步。
-
检查您的选择,然后选择创建环境。
提示
有关设置新环境的更多信息,请参阅 Amazon MWAA 入门。
环境处于 PENDING 状态时,Amazon MWAA 会发送与为您的规则设置的事件模式相匹配的通知。该规则会调用您的 Lambda 函数。该函数将解析通知事件并获取 Web 服务器和 Amazon SQS 队列所需的端点信息,然后在您的 Amazon VPC 中创建端点。
当端点可用时,Amazon MWAA 会继续创建环境。准备就绪后,环境状态将变为 AVAILABLE,您可以使用 Amazon MWAA 控制台访问 Apache Airflow Web 服务器。