

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チュートリアル: Amazon MWAA での独自の環境エンドポイントの管理を自動化する
<a name="tutorials-customer-managed-endpoints"></a>

[AWS Organizations](https://docs.aws.amazon.com/) を使用してリソースを共有する複数の AWS アカウント を管理する場合、Amazon MWAA では独自の Amazon VPC エンドポイントを作成および管理できます。つまり、環境に必要なリソースのみへのアクセスを許可する、より厳格なセキュリティポリシーを使用できます。

共有 Amazon VPC に環境を作成すると、メインの Amazon VPC を所有するアカウント (*所有者*) は、Amazon MWAA に必要な 2 つのプライベートサブネットを、同じ組織に属する他のアカウント (*参加者*) と共有します。サブネットを共有する参加者アカウントは、共有 VPC 内の環境を表示、作成、変更、削除できます。

共有またはその他のポリシーによって制限されている Amazon VPC に環境を作成すると、Amazon MWAA はまずサービス VPC リソースを作成し、次に最大 72 時間、[https://docs.aws.amazon.com/mwaa/latest/API/API_Environment.html#mwaa-Type-Environment-Status](https://docs.aws.amazon.com/mwaa/latest/API/API_Environment.html#mwaa-Type-Environment-Status) の状態に入ります。

環境のステータスが `CREATING` から `PENDING` に変わると、Amazon MWAA は状態の変更に関する Amazon EventBridge 通知を送信します。これにより、所有者アカウントは Amazon MWAA コンソールまたは API からのエンドポイントサービス情報に基づいて、プログラムによって、参加者に代わって必要なエンドポイントを作成できます。以下では Amazon MWAA の状態変更通知をリッスンする Lambda 関数と EventBridge ルールを使用して、新しい Amazon VPC エンドポイントを作成します。

ここでは、環境と同じ Amazon VPC に新しいエンドポイントを作成します。共有 Amazon VPC を設定するには、所有者アカウントに EventBridge ルールと Lambda 関数を作成し、参加者アカウントに Amazon MWAA 環境を作成します。

**Topics**
+ [前提条件](#tutorials-customer-managed-endpoints-prerequisites)
+ [Amazon VPC を作成する](#tutorials-customer-managed-endpoints-create-vpc)
+ [Lambda 関数を作成する](#tutorials-customer-managed-endpoints-create-lambda-function)
+ [EventBridge ルールを作成するには](#tutorials-customer-managed-endpoints-create-eb-rule)
+ [Amazon MWAA 環境を作成する](#tutorials-customer-managed-endpoints-create-mwaa)

## 前提条件
<a name="tutorials-customer-managed-endpoints-prerequisites"></a>

このチュートリアルのステップを完了するには、以下のものが必要です。
+ ...

## Amazon VPC を作成する
<a name="tutorials-customer-managed-endpoints-create-vpc"></a>

次の CloudFormation テンプレートと AWS CLI コマンドを使用して、新しい Amazon VPC を作成します。テンプレートは Amazon VPC リソースをセットアップし、エンドポイントポリシーを変更して、特定のキューへのアクセスを制限します。

1. CloudFormation [テンプレート](samples/cfn-vpc-private-network.zip) をダウンロードし、`.yml` ファイルを解凍します。

1. 新しいコマンドプロンプトウィンドウで、テンプレートを保存したフォルダに移動し、[https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html) を使用してスタックを作成します。`--template-body` フラグは、テンプレートへのパスを指定します。

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

次のステップでは、Lambda 関数を作成します。

## Lambda 関数を作成する
<a name="tutorials-customer-managed-endpoints-create-lambda-function"></a>

次の Python コードと IAM JSON ポリシーを使用して、新しい Lambda 関数と実行ロールを作成します。この関数は、プライベート Apache Airflow ウェブサーバーと Amazon SQS キューの Amazon VPC エンドポイントを作成します。Amazon MWAA は Amazon SQS を使用して、環境のスケーリング時に複数のワーカー間で Celery を使用してタスクをキューに入れます。

1. Python [関数コード](./samples/mwaa-lambda-shared-vpc.zip) をダウンロードします。

1. IAM [アクセス許可ポリシー](./samples/lambda-mwaa-shared-vpce-policy.zip) をダウンロードし、ファイルを解凍します。

1. コマンドプロンプトを開き、JSON アクセス許可ポリシーを保存したフォルダに移動します。IAM [https://docs.aws.amazon.com/](https://docs.aws.amazon.com/) コマンドを使用して新しいロールを作成します。

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

   AWS CLI レスポンスからロール ARN を書き留めます。次のステップでは、ARN を使用して、この新しいロールを関数の実行ロールとして指定します。

1. 関数コードを保存したフォルダに移動し、[https://docs.aws.amazon.com/](https://docs.aws.amazon.com/) コマンドを使用して新しい関数を作成します。

   ```
   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
   ```

   AWS CLI レスポンスから関数 ARN を書き留めます。次のステップでは、新しい EventBridge ルールのターゲットとして関数を設定する ARN を指定します。

次のセクションでは、環境が `PENDING` 状態になったときにこの関数を呼び出す EventBridge ルールを作成します。

## EventBridge ルールを作成するには
<a name="tutorials-customer-managed-endpoints-create-eb-rule"></a>

Amazon MWAA 通知をリッスンし、新しい Lambda 関数をターゲットとする新しいルールを作成するには、以下を実行します。

1. 新しい EventBridge ルールを作成するには、EventBridge `put-rule` コマンドを使用します。

   ```
   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"]
   					}
   ```

1. `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 環境を作成する
<a name="tutorials-customer-managed-endpoints-create-mwaa"></a>

Amazon MWAA コンソールを使用して、カスタマーマネージドの Amazon VPC エンドポイントを使用して新しい環境を作成します。

1. [Amazon MWAA](https://console.aws.amazon.com/mwaa/home/) コンソールを開いて、**環境を作成** を選択します。

1. **名前** に一意の名前を入力します。

1. **Airflow バージョン** で、最新バージョンを選択します。

1. 環境で使用する `dags/` などの **Amazon S3 バケット** と **DAGs フォルダ** を選択し、**次へ** を選択します。

1. **詳細設定の構成** ページで、次の操作を行います。

   1. **仮想プライベートクラウド** では、[前のステップ](#tutorials-customer-managed-endpoints-create-vpc) で作成した Amazon VPC を選択します。

   1. **ウェブサーバーアクセス** では、**パブリックネットワーク (インターネットにアクセス可能)** を選択します。

   1. **セキュリティグループ** については、CloudFormation で作成したセキュリティグループを選択します。前のステップの AWS PrivateLink エンドポイントのセキュリティグループは自己参照であるため、環境に同じセキュリティグループを選択する必要があります。

   1. **エンドポイント管理** で、**カスタマーマネージドエンドポイント** を選択します。

1. 残りはデフォルト設定のままにして、**次へ** を選択します。

1. 場所を確認して **環境の作成** を選択します。

**ヒント**  
新しい環境のセットアップの詳細については、[Amazon MWAA の使用開始](get-started.md) を参照してください。

環境が `PENDING` の場合、Amazon MWAA はルールに設定したイベントパターンに一致する通知を送信します。このルールは Lambda 関数を呼び出します。関数は通知イベントを解析し、ウェブサーバーと Amazon SQS キューに必要なエンドポイント情報を取得します。次に、Amazon VPC にエンドポイントを作成します。

エンドポイントが利用可能になると、Amazon MWAA は環境の作成を再開します。準備ができたら、環境ステータスは `AVAILABLE` に変わり、Amazon MWAA コンソールを使用して Apache Airflow ウェブサーバーにアクセスできます。