Amazon MWAA (Amazon Managed Workflows for Apache Airflow) のネットワーク構成と通信料金の概算。

記事タイトルとURLをコピーする

こんにちは。
長野県の燕岳に登ったところ、親子の雷鳥に出くわした山本です。とても可愛かったです。

Amazon MWAA (Amazon Managed Workflows for Apache Airflow) のネットワーク構成と通信料金の概算。

Amazon MWAA の検証をしています。
Amazon MWAA のネットワーク構成がいくつかあるように見えたため、整理も兼ねて本記事を執筆しています。 Amazon MWAA の実行環境を作成するところを範囲に、本記事にまとめます。

Amazon MWAA のアーキテクチャ

公式ドキュメントを見ると、Amazon MWAA は以下のアーキテクチャになるようです。

ネットワーク構成

ネットワーク構成に着目すると、VPCが2つあり、左に 「Customer VPC」、右に 「Service VPC」 があります。
両者の相違点は、以下の表の通りになるようです。

VPCの種類 説明
Customer VPC Amazon MWAA を作成するときに利用者が指定するVPCで、利用者が作成・管理します。
Service VPC Amazon管理のVPCで、利用者からは見えません。

ご参考:Amazon MWAA の作成時に Customer VPCを選択する画面

Amazon MWAA のWEB管理画面を参照するための通信経路

Amazon MWAA のWEB管理画面を参照するための通信経路を確認します。
Amazon MWAA のWEB管理画面を参照するには、「Service VPC」にある 「Airflow Web Server」にウェブブラウザから接続します。
図の該当箇所:

Amazon MWAA を作成するときに、「パブリックネットワークアクセスモード」と「プライベートネットワークアクセスモード」を選べます。
図の右側が「パブリックネットワークアクセスモード」、左側が「プライベートネットワークアクセスモード」を選んだ時の通信経路です。
以下にそれぞれの説明を記載します。

ネットワークアクセスモード 説明
パブリックネットワークアクセスモード 「Airflow Web Server」 にインターネットから接続可能な VPC エンドポイントを作成します。特定のパブリックIPアドレスからの接続のみ許可することはできないようです。アイコンがALBになっている理由は今のところ不明です。おそらくドキュメントの誤記で、VPCエンドポイントではなく、ALBなのでしょう。
プライベートネットワークアクセスモード 「Airflow Web Server」 に「Customer VPC」から接続可能な VPC エンドポイントを作成します。

公式ドキュメントの該当箇所を和訳。

パブリックネットワークアクセスモードでは、インターネット経由でアクセス可能な 「Airflow Web Server」のVPCエンドポイントを提供します。
プライベートネットワークアクセスモードは、利用者が管理する「Customer VPC」からアクセス可能な「Airflow Web Server」のVPCエンドポイントを提供します。
どちらの場合も、Apache Airflowユーザーのアクセスは、AWS Identity and Access Management(IAM)で定義したアクセスコントロールポリシーとAWSSSOによって制御されます。

Airflow Web Server の VPCエンドポイント

「パブリックネットワークアクセスモード」で作成してみたところ、以下のVPCエンドポイント?(Airflow UI)が出来ました。おそらく「VPCエンドポイント」というのはドキュメントの誤記で、筆者がDNSの逆引き等を行なって確認したところ、実態はALBだと思われます。

  • xxxxxxxx.c3.ap-northeast-1.airflow.amazonaws.com

マネジメントコンソールでの確認箇所:

「プライベートネットワークアクセスモード」で作成してみたところ、以下のVPCエンドポイント(Airflow UI)が出来ました。 「Customer VPC」内から接続可能になっていました。

  • vpce-yyyyyyyyyy-yyyyyyyyyy.vpce-svc-xxxxxxxxxx.ap-northeast-1.vpce.amazonaws.com

WEBアクセストークンを発行して接続してみると以下のような画面になります。WEBアクセストークンの発行方法は後述します。

「Customer VPC」のネットワーク構成

「Customer VPC」は、Amazon MWAA を作成するときに利用者が指定するVPCで、利用者が作成・管理します。
「Customer VPC」には Amazon MWAA のサービスが、Apache Airflow Schedulers と Airflow Worker(s) の Fargate コンテナを配置します。
利用者からは、これらのFargateコンテナ群は見えません。
図の該当箇所:

Apache Airflow Schedulers と Airflow Worker(s)の Fargate コンテナ群は、以下のAWSサービスと通信します。

  • Amazon CloudWatch
  • Amazon S3
  • Amazon SQS
  • Amazon ECR
  • AWS KMS
  • Amazon MWAA (自身のサービスエンドポイント)

上述のAWSサービスと通信するために、各AWSサービス用のVPCエンドポイント、またはNATゲートウェイをVPC内に作成する必要があります。
また、「Service VPC」にある Meta Database に、「Service VPC」の提供するVPCエンドポイントを使用して通信します。この通信は利用者が意識する必要はありません。
図の該当箇所:

「Customer VPC」を1から自分で作成する際の注意点まとめ

利用者が作成・管理する「Customer VPC」を作成する際には、いくつかの制約があります。
Create the VPC networkには「Customer VPC」作成用のCloudFormationがあります。そのため、この公式ドキュメントにある CloudFormation を流用して作成すると良さそうです。
利用者が自分で作成することも考えられますので、下に制約をまとめます。

「パブリックネットワークアクセスモード」を選ぶ時

  1. VPCの「DNSホスト名」と「DNS」解決が有効になっていること。
  2. プライベートサブネットを2つ、異なるアベイラビリティゾーンに配置していること。
  3. パブリックサブネットを2つ、プライベートサブネットと同じアベイラビリティゾーン構成で作成していること。
  4. パブリックサブネットの「パブリック IPv4 アドレスを自動割り当て」を「はい」にしていること。
  5. プライベートサブネットのルートテーブルにおいて、デフォルトルート(0.0.0.0/0)のターゲットが、同じアベイラビリティゾーンのパブリックサブネットに配置したNAT ゲートウェイになっていること。

「プライベートネットワークアクセスモード」を選ぶ時

上の「パブリックネットワークアクセスモード」を選ぶ時 と同じ構成でも可能です。
ただし、NAT Gateway は VPC エンドポイントよりも データ通信料金が 6倍以上もかかるため、下の構成がお勧めです。

  1. VPCの「DNSホスト名」と「DNS」解決が有効になっていること。
  2. プライベートサブネットを2つ、異なるアベイラビリティゾーンに配置していること。
  3. プライベートサブネットに以下のVPCエンドポイント 10個を作成していること。S3 はゲートウェイ型のVPCエンドポイントです。参考
    • com.amazonaws.YOUR_REGION.s3
    • com.amazonaws.YOUR_REGION.monitoring
    • com.amazonaws.YOUR_REGION.ecr.dkr
    • com.amazonaws.YOUR_REGION.ecr.api
    • com.amazonaws.YOUR_REGION.logs
    • com.amazonaws.YOUR_REGION.sqs
    • com.amazonaws.YOUR_REGION.kms
    • com.amazonaws.YOUR_REGION.airflow.api
    • com.amazonaws.YOUR_REGION.airflow.env
    • com.amazonaws.YOUR_REGION.airflow.ops

Amazon MWAA のWEB管理画面をカスタムドメインで参照する

Amazon MWAA のWEB管理画面に自身の管理するドメインを用いて接続する方法です。
質問集(FAQ)にある「Amazon MWAA はカスタムドメインをサポートしていますか?」を参照すると、以下の方法があります。

ネットワークモード 方法
パブリックネットワークアクセスモード カスタムドメインへの接続をAmazon MWAA のWEB管理画面に転送するように、CloudFront を構成します。CloudFront には AWS Lambda@Edge を関連付けします。Lambda@Edge はユーザーリクエストを Amazon Cognito に転送し、ユーザー認証を行わせてから CloudFront に転送します。 サンプルコード
プライベートネットワークアクセスモード カスタムドメインへの接続をAmazon MWAA のWEB管理画面に転送するように、Application Load Balancer (ALB) を構成します。ドキュメント

プライベートネットワークアクセスモードを使用している時に、Amazon MWAA のWEB管理画面をカスタムドメインで参照する

Application Load Balancer (ALB) を使って、手軽にできそうなので、やってみました。
Application Load Balancer (ALB) を使うと、セキュリティグループで特定のパブリックIPアドレスからの接続のみ許可できます。
Using a Load Balancer (advanced)」を参考にやってみました。
構成イメージ:
前提としまして、Customer VPC に パブリックサブネット(緑のサブネット)を 2つ作成し、Application Load Balancer (ALB)を配置することにしました。

さて、作成していきましょう。
まず、Amazon MWAA のサービス画面から、Airflow UI をメモします。

この UI の URL を nslookup コマンド等で参照すると、Airflow Web Server のIPアドレスを2つ得ることができます。
※ドキュメントでは3つほど手順を踏んで、同じ結果を得ているようでした(理由は不明)。
以下のように結果を得ることができます。

Address: 10.192.20.95
Address: 10.192.21.131

EC2 サービスの画面でターゲットグループを作成します。

  • ターゲットの種類:IP
  • プロトコル : ポート:HTTPS: 443
  • プロトコルバージョン:HTTP1

Airflow Web Server のIPアドレス2つをターゲットに登録します。

ヘルスチェックの「成功コード」に 302 を追加します。(200,302 という形。カンマ区切り。)

Application Load Balancer (ALB) を作成し、ポート番号:443のリスナールールの転送先を先ほど作成したターゲットグループにします。

Application Load Balancer (ALB) に付けたセキュリティグループのインバウンドルールに 利用者のパブリックIPアドレスからの HTTPS 接続を許可します。

EC2 サービスの画面にある「ネットワークインターフェイス」の画面に行きます。
Airflow Web Server のIPアドレス 2つに紐づくネットワークインターフェイスを探します。
そして、ネットワークインターフェイスについているセキュリティグループ を確認します。

Application Load Balancer (ALB) に上のセキュリティグループを追加します。
このセキュリティグループのインバウンドルールには、同セキュリティグループからの全てのトラフィックを許可するルールがあります。これにより、ALBとターゲットグループ内のAirflow Web Server のIPアドレス 2つとの疎通を可能にします。

最後に、Application Load Balancer (ALB) に証明書を登録し、DNSレコードを設定すると、独自ドメインでアクセスできます。
筆者は Route 53 に適当なホストゾーンを作成しました。
Aレコードのエイリアス機能で ALB をレコードに登録しました。
証明書は AWS Certificate Manager (ACM)の無料証明書を使用しました。

カスタムドメインでアクセスできました。

DAGファイル配置用 S3 バケット

上記のネットワーク構成に加えて、Amazon MWAA の環境を作成するには、以下のS3バケットが必要です。
事前にご準備ください。

  • すべてのパブリックアクセスをブロック
  • バージョニングが有効

Amazon MWAA のWEB管理画面へのログイン

Amazon MWAA のWEB管理画面にログインするには、IAMユーザーにAmazon MWAAの操作権限が必要です。
必要なIAMポリシーの詳細については、Amazon MWAA 環境へのアクセスをご参照ください。
Amazon MWAAの操作権限を持つ IAMユーザーで、AWS CLI を実行して、WEB管理画面へのログイントークンを発行し、ログインできます。
筆者は「Apache Airflow ウェブログイントークンの作成」を参考に以下のシェルスクリプトを作成し、ログインURL を発行しました。

#!/bin/bash
ENVNAME="MyAirflowEnvironment001" #Amazon MWAAの環境名
HOST="mwaa.karukozaka46.click" #Airflow UI のカスタムドメイン名
YOUR_URL=https://$HOST/aws_mwaa/aws-console-sso?login=true#
WEB_TOKEN=$(aws mwaa create-web-login-token --name $ENVNAME --query WebToken --output text)
echo $YOUR_URL$WEB_TOKEN #ログインURL

料金

執筆中に時間切れになりました。筆者は明日から夏季休暇です。 2022年8月8日以降に追記予定です。

山本 哲也 (記事一覧)

クラウドインテグレーション部 技術課

好きなサービス:ALB,ECS,API Gateway,Lambda

登山(春夏秋冬) サウナ(施設/テント) 乃木坂46ファン(筒井あやめ推し)