

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

# Amazon Managed Workflows for Apache Airflow のチュートリアル
<a name="tutorials"></a>

このガイドには、Amazon Managed Workflows for Apache Airflow 環境の使用と設定に関するステップバイステップのチュートリアルが含まれています。

**Topics**
+ [チュートリアル: AWS Client VPN を使用したプライベートネットワークアクセスの設定](tutorials-private-network-vpn-client.md)
+ [チュートリアル: Linux 踏み台ホストを使用したプライベートネットワークアクセスの設定](tutorials-private-network-bastion.md)
+ [チュートリアル: Amazon MWAA ユーザーのアクセスを DAG のサブセットに制限する](limit-access-to-dags.md)
+ [チュートリアル: Amazon MWAA での独自の環境エンドポイントの管理を自動化する](tutorials-customer-managed-endpoints.md)

# チュートリアル: AWS Client VPN を使用したプライベートネットワークアクセスの設定
<a name="tutorials-private-network-vpn-client"></a>

このチュートリアルでは、Amazon Managed Workflows for Apache Airflow 環境用に、コンピュータから Apache Airflow ウェブサーバーへの VPN トンネルを作成する手順を説明します。VPN トンネルを介してインターネットに接続するには、まず AWS Client VPN エンドポイントを作成する必要があります。設定が完了すると、クライアント VPN エンドポイントは VPN サーバーとして機能し、コンピューターから VPC 内のリソースへの安全な接続を可能にします。次に、[AWS Client VPN デスクトップ用](https://aws.amazon.com/vpn/client-vpn-download/) を使用して、コンピューターから Client VPN に接続します。

**Topics**
+ [プライベートネットワーク](#private-network-vpn-onconsole)
+ [ユースケース](#private-network-vpn-usecases)
+ [開始する前に](#private-network-vpn-prereqs)
+ [目的](#private-network-vpn-objectives)
+ [(オプション) ステップ 1: VPC、CIDR ルール、VPC セキュリティを特定する](#private-network-vpn-optional)
+ [ステップ 2: サーバーとクライアントの証明書を作成する](#private-network-vpn-certs)
+ [ステップ 3: CloudFormation テンプレートをローカルに保存する](#private-network-vpn-template)
+ [ステップ 4: クライアント VPN CloudFormation スタックを作成する](#private-network-vpn-create)
+ [ステップ 5: サブネットをクライアント VPN に関連付ける](#private-network-vpn-associate)
+ [ステップ 6: クライアント VPN に認可進入ルールを追加する](#private-network-vpn-autho)
+ [ステップ 7：クライアント VPN のエンドポイント設定ファイルをダウンロードします](#private-network-vpn-download)
+ [ステップ 8: AWS Client VPN に接続する](#private-network-vpn-connect)
+ [次のステップ](#create-vpc-vpn-next-up)

## プライベートネットワーク
<a name="private-network-vpn-onconsole"></a>

このチュートリアルでは、Apache Airflow ウェブサーバーの **プライベートネットワーク** アクセスモードを選択していることを前提としています。

![\[この画像は、プライベートウェブサーバーを備えた Amazon MWAA 環境のアーキテクチャを示しています。\]](http://docs.aws.amazon.com/ja_jp/mwaa/latest/userguide/images/mwaa-private-web-server.png)


プライベートネットワークアクセスモードは、Apache Airflow UI へのアクセスを、[お使いの環境の IAM ポリシー](access-policies.md) へのアクセスが許可されている *Amazon VPC 内* のユーザーに制限します。

プライベートなウェブサーバーアクセスを持つ環境を作成する場合、すべての依存関係を Python Wheel アーカイブ (`.whl`) にパッケージ化し、その後、`requirements.txt` で `.whl` を参照する必要があります。wheel を使用して依存関係をパッケージ化およびインストールする手順については、[Python wheel を使用した依存関係の管理](best-practices-dependencies.md#best-practices-dependencies-python-wheels) を参照してください。

以下の画像は、Amazon MWAA コンソールの **プライベートネットワーク** オプションの場所を示しています。

![\[この画像は、Amazon MWAA コンソールの プライベートネットワーク オプションが表示される場所を示しています。\]](http://docs.aws.amazon.com/ja_jp/mwaa/latest/userguide/images/mwaa-console-private-network.png)


## ユースケース
<a name="private-network-vpn-usecases"></a>

このチュートリアルは、Amazon MWAA 環境を作成する前でも後でも使用できます。環境と同じ Amazon VPC、VPC セキュリティグループ、プライベートサブネットを使用する必要があります。Amazon MWAA 環境を作成した後にこのチュートリアルを使用する場合、手順を完了したら Amazon MWAA コンソールに戻り、Apache Airflow ウェブサーバーのアクセスモードを **プライベートネットワーク** に変更できます。

## 開始する前に
<a name="private-network-vpn-prereqs"></a>

1. ユーザー許可を確認してください。AWS Identity and Access Management (IAM) のアカウントに VPC リソースを作成および管理するための十分な権限があることを確認してください。

1. Amazon MWAA VPC を使用してください。このチュートリアルでは、クライアント VPN を既存の VPC に関連付けることを前提としています。Amazon VPC は、Amazon MWAA 環境と同じ AWS リージョン にある必要があり、かつ 2 つのプライベートサブネットを持っている必要があります。Amazon VPC を作成していない場合、[オプション 3: インターネットにアクセス *せずに* Amazon VPC ネットワークを作成する](vpc-create.md#vpc-create-template-private-only) で CloudFormation テンプレートを使用してください。

## 目的
<a name="private-network-vpn-objectives"></a>

このチュートリアルでは、以下の作業を行います。

1. 既存の Amazon VPC に対して、CloudFormation テンプレートを使用して AWS Client VPN エンドポイントを作成します。

1. サーバーおよびクライアントの証明書とキーを生成し、その後、Amazon MWAA 環境と同じ AWS リージョン にある AWS Certificate Manager にサーバー証明書とキーをアップロードします。

1. クライアント VPN のクライアント VPN エンドポイント設定ファイルをダウンロードして変更し、このファイルを使用して、デスクトップ用クライアント VPN を用いて接続するための VPN プロファイルを作成します。

## (オプション) ステップ 1: VPC、CIDR ルール、VPC セキュリティを特定する
<a name="private-network-vpn-optional"></a>

次のセクションでは、Amazon VPC、VPC セキュリティグループの ID を検索する方法と、以降のステップでクライアント VPN を作成するために必要な CIDR ルールを特定する方法について説明します。

### CIDR ルールを特定してください。
<a name="private-network-vpn-cidr"></a>

次のセクションでは、クライアント VPN を作成するために必要な CIDR ルールを特定する方法を説明します。

**クライアント VPN の CIDR を識別するには**

1. Amazon VPC コンソールの [Amazon VPC ページ](https://console.aws.amazon.com/vpc/home#/vpcs:) を開きます。

1. ナビゲーションバーのリージョンセレクターを使用して、Amazon MWAA 環境と同じ AWS リージョン を選択します。

1. Amazon VPC を選択してください。

1. プライベートサブネットの CIDR が以下のようになっていると仮定します。
   + プライベートサブネット 1: 10.192.10.0`/24`
   + プライベートサブネット 2: 10.192.11.0`/24`

   Amazon VPC の CIDR が 10.192.0.0`/16` の場合、クライアント VPN に指定する**クライアント IPv4 CIDR** は 10.192.0.0`/22` になります。

1. この CIDR 値と VPC ID の値を後続のステップのために保存してください。

### VPC とセキュリティグループを特定する
<a name="private-network-vpn-sec"></a>

次のセクションでは、クライアント VPN を作成するために必要な Amazon VPC とセキュリティグループの ID を確認する方法を説明します。

**注記**  
複数のセキュリティグループを使用している可能性があります。後続のステップでは、VPC のセキュリティグループをすべて指定する必要があります。

**セキュリティグループを特定するには**

1. Amazon VPC コンソールの [セキュリティグループページ](https://console.aws.amazon.com/vpc/home#/securityGroups:) を開きます。

1. ナビゲーションバーのリージョンセレクターを使って、AWS リージョン を選択します。

1. **VPC ID** で Amazon VPC を検索し、その VPC に関連付けられているセキュリティグループを特定します。

1. セキュリティグループと VPC の ID を後続のステップのために保存します。

## ステップ 2: サーバーとクライアントの証明書を作成する
<a name="private-network-vpn-certs"></a>

クライアント VPN エンドポイントは、1024 ビットおよび 2048 ビットの RSA キーサイズのみサポートしています。以下のセクションでは、OpenVPN easy-rsa を使ってサーバーとクライアントの証明書と鍵を生成し、AWS Command Line Interface (AWS CLI) を使って証明書を ACM にアップロードする方法を説明します。

**クライアント証明書を作成するには**

1. 以下の簡単な手順に従って、[クライアントの認証と認可:相互認証](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/client-authentication.html#mutual) の AWS CLI から証明書を作成し、ACM にアップロードします。

1. これらの手順では、サーバーおよびクライアント証明書をアップロードする際に、AWS CLI コマンドで Amazon MWAA 環境と同じ AWS リージョン を指定する **必要があります**。ここでは、これらのコマンドでリージョンを指定する方法を例で示します。

   1.   
**Example サーバー証明書のリージョン**  

      ```
      aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region us-west-2
      ```

   1.   
**Example クライアント証明書のリージョン**  

      ```
      aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt --region us-west-2
      ```

   1. これらの手順の後、サーバー証明書およびクライアント証明書の ARN に関する AWS CLI のレスポンスで返された値を保存してください。これらの ARN を使用して、クライアント VPN を作成するための CloudFormation テンプレートに ARN を指定します。

1. この手順では、クライアント証明書とプライベートキーがコンピューターに保存されます。ここでは、これらの認証情報の確認場所の例。

   1.   
**Example macOS 上**  

      macOS では、内容は `/Users/your-user/custom_folder` に保存されます。このディレクトリのすべての (`ls -a`) 内容を一覧表示すると、次のような内容が表示されます。

      ```
      .
      ..
      ca.crt
      client1.domain.tld.crt
      client1.domain.tld.key
      server.crt
      server.key
      ```

   1. これらの手順の後、クライアント証明書の内容または場所を `client1.domain.tld.crt` に保存し、プライベートキーの場所を `client1.domain.tld.key` にメモしてください。これらの値をクライアント VPN の設定ファイルに追加します。

## ステップ 3: CloudFormation テンプレートをローカルに保存する
<a name="private-network-vpn-template"></a>

次のセクションには、クライアント VPN を作成するための CloudFormation テンプレートが含まれています。Amazon MWAA 環境と同じ Amazon VPC、VPC セキュリティグループ、およびプライベートサブネットを指定する必要があります。
+ 次のテンプレートの内容をコピーし、`mwaa_vpn_client.yaml` としてローカルに保存します。[テンプレートをダウンロードする](./samples/mwaa_vpn_client.zip)こともできます。

  以下の値を置き換えます。
  + **YOUR\$1CLIENT\$1ROOT\$1CERTIFICATE\$1ARN** — `ClientRootCertificateChainArn` の **client1.domain.tld** 証明書のARN。
  + **YOUR\$1SERVER\$1CERTIFICATE\$1ARN** — `ServerCertificateArn` 内の **サーバー** 証明書の ARN。
  + `ClientCidrBlock` のクライアント IPv4 CIDR ルール。`10.192.0.0/22` の CIDR ルールが提供されています。
  + `VpcId` の Amazon VPC ID 。`vpc-010101010101` の VPC が提供されています。
  + `SecurityGroupIds` 内の VPC セキュリティグループ ID。`sg-0101010101` のセキュリティグループが提供されています。

  ```
  AWSTemplateFormatVersion: 2010-09-09
  Description: This template deploys a VPN Client Endpoint.
  Resources:
    ClientVpnEndpoint:
      Type: 'AWS::EC2::ClientVpnEndpoint'
      Properties:
        AuthenticationOptions:
          - Type: "certificate-authentication"
            MutualAuthentication:
              ClientRootCertificateChainArn: "YOUR_CLIENT_ROOT_CERTIFICATE_ARN"
        ClientCidrBlock: 10.192.0.0/22
        ClientConnectOptions:
          Enabled: false
        ConnectionLogOptions:
          Enabled: false
        Description: "MWAA Client VPN"
        DnsServers: []
        SecurityGroupIds:
          - sg-0101010101
        SelfServicePortal: ''
        ServerCertificateArn: "YOUR_SERVER_CERTIFICATE_ARN"
        SplitTunnel: true
        TagSpecifications:
          - ResourceType: "client-vpn-endpoint"
            Tags:
            - Key: Name
              Value: MWAA-Client-VPN
        TransportProtocol: udp
        VpcId: vpc-010101010101
        VpnPort: 443
  ```

**注記**  
ご使用の環境で複数のセキュリティグループを使用している場合は、次の形式で複数のセキュリティグループを指定できます。  

```
SecurityGroupIds:
 - sg-0112233445566778b
 - sg-0223344556677889f
```

## ステップ 4: クライアント VPN CloudFormation スタックを作成する
<a name="private-network-vpn-create"></a>

**AWS Client VPN を作成するには**

1. [AWS CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/home#) を開きます。

1. **テンプレートは準備できている**、**テンプレートファイルをアップロードする** を選択します。

1. **ファイルのを選択** を選択し、`mwaa_vpn_client.yaml` ファイルを選択します。

1. **次へ**、**次へ** を選択します。

1. アクノレッジメントを選択し、**スタックを作成** を選択します。

## ステップ 5: サブネットをクライアント VPN に関連付ける
<a name="private-network-vpn-associate"></a>

**プライベートサブネットを AWS Client VPN に関連付けるには**

1. [Amazon VPC コンソール](https://console.aws.amazon.com/vpc/home#) を開きます。

1. **クライアント VPN エンドポイント** ページを選択します。

1. クライアント VPN を選択し、次に **アソシエーション** タブの **アソシエイト** を選択します。

1. ドロップダウンリストから次の項目を選択します。
   + **VPC** 内の Amazon VPC。
   + **関連付けるサブネットを選択** にあるプライベートサブネットの 1 つ。

1. **関連付ける** を選択してください。

**注記**  
VPC とサブネットがクライアント VPN に関連付けられるまでに数分かかります。

## ステップ 6: クライアント VPN に認可進入ルールを追加する
<a name="private-network-vpn-autho"></a>

VPC の CIDR ルールを使用する認可進入ルールをクライアント VPN に追加する必要があります。Active Directory グループまたは SAML ベースのアイデンティティプロバイダー (IdP) から特定のユーザーまたはグループを承認する場合は、*Client VPN ガイド* の [承認ルール](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-rules.html) を参照してください。

**CIDR を AWS Client VPN に追加するには**

1. [Amazon VPC コンソール](https://console.aws.amazon.com/vpc/home#) を開きます。

1. **クライアント VPN エンドポイント** ページを選択します。

1. クライアント VPN を選択し、**承認** タブの **進入を許可** を選択します。

1. 次を指定します:
   + **有効化する送信先ネットワーク** にある Amazon VPC の CIDR ルール。例:

     ```
     10.192.0.0/16
     ```
   + **アクセスを付与する対象** で、**すべてのユーザーにアクセスを許可する** を選択します。
   + **説明** で、分かりやすい名前を入力します。

1. **認可ルールを追加する** を選択します。

**注記**  
Amazon VPC のネットワークコンポーネントによっては、ネットワークアクセスコントロールリスト (NACL) へのこの承認進入ルールが必要な場合もあります。

## ステップ 7：クライアント VPN のエンドポイント設定ファイルをダウンロードします
<a name="private-network-vpn-download"></a>

**設定ファイルをダウンロードするには**

1. [Client VPN エンドポイント設定ファイルのダウンロード](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-getting-started.html#cvpn-getting-started-config) にある Client VPN 設定ファイルをダウンロードするには、以下の簡単な手順に従ってください。

1. このステップでは、クライアント VPN エンドポイントの DNS 名の前に文字列を追加するように求められます。例を示します。

   1.   
**Example エンドポイント DNS 名**  

     クライアント VPN エンドポイントの DNS 名が次の場合:

     ```
     remote cvpn-endpoint-0909091212aaee1.prod.clientvpn.us-west-1.amazonaws.com 443
     ```

     クライアント VPN エンドポイントを識別する文字列を次のように追加できます。

     ```
     remote mwaavpn.cvpn-endpoint-0909091212aaee1.prod.clientvpn.us-west-1.amazonaws.com 443
     ```

1. これらの手順では、クライアント証明書の内容を新しい `<cert></cert>` のタグの間に追加し、プライベートキーの内容を新しい `<key></key>` のタグの間に追加するように求められます。例を示します。

   1. コマンドプロンプトを開き、ディレクトリをクライアント証明書とプライベートキーの場所に変更します。

   1.   
**Example macOS client1.domain.tld.crt**  

      macOS で `client1.domain.tld.crt` ファイルの内容を表示するには、`cat client1.domain.tld.crt` を使用できます。

      ターミナルから値をコピーし、`downloaded-client-config.ovpn` に貼り付けます。以下のようになります。

      ```
      ZZZ1111dddaBBB
      -----END CERTIFICATE-----
      </ca>
      <cert>
      -----BEGIN CERTIFICATE-----
      YOUR client1.domain.tld.crt
      -----END CERTIFICATE-----                
      </cert>
      ```

   1.   
**Example macOS client1.domain.tld.key**  

      `client1.domain.tld.key` の内容を表示するには、`cat client1.domain.tld.key` を使用できます。

      ターミナルから値をコピーし、`downloaded-client-config.ovpn` に貼り付けます。以下のようになります。

      ```
      ZZZ1111dddaBBB
      -----END CERTIFICATE-----
      </ca>
      <cert>
      -----BEGIN CERTIFICATE-----
      YOUR client1.domain.tld.crt
      -----END CERTIFICATE-----                
      </cert>
      <key>
      -----BEGIN CERTIFICATE-----
      YOUR client1.domain.tld.key
      -----END CERTIFICATE-----                
      </key>
      ```

## ステップ 8: AWS Client VPN に接続する
<a name="private-network-vpn-connect"></a>

AWS Client VPN のクライアントは無料で提供されています。コンピュータを AWS Client VPN に直接接続して、エンドツーエンドの VPN 体験をすることができます。

**クライアント VPN に接続するには**

1. [AWS Client VPN for Desktop](https://aws.amazon.com/vpn/client-vpn-download/) をダウンロードしてインストールします。

1. AWS Client VPN を開きます。

1. VPN クライアントメニューで **ファイル**、**管理対象プロファイル** を選択します。

1. **プロファイルを追加** を選択し、`downloaded-client-config.ovpn` を選択します。

1. **表示名** にわかりやすい名前を入力します。

1. **プロフィールを追加** を選択し、**完了** を選択します。

1. **接続** を選択します。

クライアント VPN に接続したら、Amazon VPC 内のすべてのリソースにアクセスするには、他の VPN との接続を切断する必要があります。

**注記**  
接続する前に、クライアントを終了して再起動する必要がある場合があります。

## 次のステップ
<a name="create-vpc-vpn-next-up"></a>
+ [Amazon Managed Workflows for Apache Airflow を使い始める](get-started.md) で Amazon MWAA 環境を作成する方法を学びます。クライアント VPN と同じ AWS リージョン に、クライアント VPN と同じ VPC、プライベートサブネット、セキュリティグループを使用して環境を作成する必要があります。

# チュートリアル: Linux 踏み台ホストを使用したプライベートネットワークアクセスの設定
<a name="tutorials-private-network-bastion"></a>

このチュートリアルでは、Amazon Managed Workflows for Apache Airflow 環境用に、コンピュータから Apache Airflow ウェブサーバーへの SSH トンネルを作成する手順を説明します。Amazon MWAA 環境が既に作成されていることを前提としています。セットアップが完了すると、Linux 踏み台ホストはジャンプサーバーとして機能し、コンピュータから VPC 内のリソースに安全に接続できるようになります。次に、SOCKS プロキシ管理アドオンを使用してブラウザのプロキシ設定を制御し、Apache Airflow UI にアクセスします。

**Topics**
+ [プライベートネットワーク](#private-network-lb-onconsole)
+ [ユースケース](#private-network-lb-usecases)
+ [開始する前に](#private-network-lb-prereqs)
+ [目的](#private-network-lb-objectives)
+ [ステップ 1:踏み台インスタンスを作成する](#private-network-lb-create-bastion)
+ [ステップ 2: ssh トンネルを作成する](#private-network-lb-create-test)
+ [ステップ 3: 踏み台セキュリティグループをインバウンドルールとして設定する](#private-network-lb-create-sgsource)
+ [ステップ 4: Apache Airflow URL をコピーします。](#private-network-lb-view-env)
+ [ステップ 5: プロキシ設定を行う](#private-network-lb-browser-extension)
+ [ステップ 6: Apache Airflow UI を開きます。](#private-network-lb-open)
+ [次のステップ](#bastion-next-up)

## プライベートネットワーク
<a name="private-network-lb-onconsole"></a>

このチュートリアルでは、Apache Airflow ウェブサーバーの **プライベートネットワーク**　アクセスモードを選択していることを前提としています。

![\[この画像は、プライベートウェブサーバーを備えた Amazon MWAA 環境のアーキテクチャを示しています。\]](http://docs.aws.amazon.com/ja_jp/mwaa/latest/userguide/images/mwaa-private-web-server.png)


プライベートネットワークアクセスモードは、Apache Airflow UI へのアクセスを、[お使いの環境の IAM ポリシー](access-policies.md) へのアクセスが許可されている *Amazon VPC 内* のユーザーに制限します。

プライベートなウェブサーバーアクセスを持つ環境を作成する場合、すべての依存関係を Python Wheel アーカイブ (`.whl`) にパッケージ化し、その後、`requirements.txt` で `.whl` を参照する必要があります。wheel を使用して依存関係をパッケージ化およびインストールする手順については、[Python wheel を使用した依存関係の管理](best-practices-dependencies.md#best-practices-dependencies-python-wheels) を参照してください。

以下の画像は、Amazon MWAA コンソールの **プライベートネットワーク** オプションの場所を示しています。

![\[この画像は、Amazon MWAA コンソールの プライベートネットワーク オプションが表示される場所を示しています。\]](http://docs.aws.amazon.com/ja_jp/mwaa/latest/userguide/images/mwaa-console-private-network.png)


## ユースケース
<a name="private-network-lb-usecases"></a>

このチュートリアルは、Amazon MWAA 環境を作成した後でも使用できます。環境と同じ Amazon VPC、VPC セキュリティグループ、パブリックサブネットを使用する必要があります。

## 開始する前に
<a name="private-network-lb-prereqs"></a>

1. ユーザー許可を確認してください。AWS Identity and Access Management (IAM) のアカウントに VPC リソースを作成および管理するための十分な権限があることを確認してください。

1. Amazon MWAA VPC を使用してください。このチュートリアルでは、踏み台ホストを既存の VPC に関連付けることを想定としています。Amazon VPC は Amazon MWAA 環境と同じリージョンにあり、[VPC ネットワークを作成する](vpc-create.md) で定義されているように 2 つのプライベートサブネットを備えている必要があります。

1. SSH キーを作成します。仮想サーバーに接続するには、Amazon MWAA 環境と同じリージョンに Amazon EC2 SSH キー (**[.pem]**) を作成する必要があります。SSH キーがない場合は、*Amazon EC2 ユーザーガイド* の [キーペアの作成またはインポート](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#prepare-key-pair) を参照してください。

## 目的
<a name="private-network-lb-objectives"></a>

このチュートリアルでは、以下の作業を行います。

1. [既存の VPC CloudFormation のテンプレート](https://fwd.aws/vWMxm)を使用して Linux 踏み台ホストインスタンスを作成します。

1. ポート `22` の進入ルールを使用して、踏み台インスタンスのセキュリティグループへのインバウンドトラフィックを承認します。

1. Amazon MWAA 環境のセキュリティグループから踏み台インスタンスのセキュリティグループへのインバウンドトラフィックを承認します。

1. 踏み台インスタンスへの SSH トンネルを作成します。

1. Firefox ブラウザ用の FoxyProxy アドオンをインストールして設定し、Apache Airflow UI にアクセスします。

## ステップ 1:踏み台インスタンスを作成する
<a name="private-network-lb-create-bastion"></a>

以下のセクションでは、CloudFormation コンソール上で [既存の VPC 用の CloudFormation テンプレート](https://fwd.aws/vWMxm)を使用して Linux 踏み台インスタンスを作成する手順を説明します。

**Linux 踏み台ホストを作成するには**

1. CloudFormation コンソールで [クイックスタートをデプロイ](https://fwd.aws/Jwzqv) ページを開きます。

1. ナビゲーションバーのリージョンセレクターを使用して、Amazon MWAA 環境と同じ AWS リージョン を選択します。

1. **次へ** を選択します。

1. **スタック名** テキストフィールドに、`mwaa-linux-bastion` などの名前を入力します。

1. **パラメーター**、**ネットワーク設定** ペインで、以下のオプションを選択します。

   1. Amazon MWAA 環境の **VPC ID**を選択してください。

   1. Amazon MWAA 環境の **パブリックサブネット 1 ID** を選択します。

   1. Amazon MWAA 環境の **パブリックサブネット 2 ID** を選択します。

   1. **許可された踏み台外部アクセス CIDR** に、可能な限り狭いアドレス範囲 (内部 CIDR 範囲など) を入力します。
**注記**  
範囲を特定する最も簡単な方法は、パブリックサブネットと同じ CIDR 範囲を使用することです。例えば、[VPC ネットワークを作成する](vpc-create.md) ページの CloudFormation テンプレートのパブリックサブネットは `10.192.10.0/24` と `10.192.11.0/24` です。

1. **Amazon EC2 設定** ペインで、以下を選択します。

   1. **キーペア名** のドロップダウンリストで SSH キーを選択します。

   1. **踏み台ホスト名** に名前を入力します。

   1. **TCP フォワーディング** には **true** を選択します。
**警告**  
このステップでは TCP 転送を **true** に設定する必要があります。そうしないと、次のステップで SSH トンネルを作成できません。

1. **次へ**、**次へ** を選択します。

1. 確認を選択し、**スタックを作成** を選択します。

Linux 踏み台ホストのアーキテクチャについて詳しく知りたい場合は、[AWS クラウド上の Linux 要塞ホスト: アーキテクチャ](https://docs.aws.amazon.com/quickstart/latest/linux-bastion/architecture.html) を参照してください。

## ステップ 2: ssh トンネルを作成する
<a name="private-network-lb-create-test"></a>

Linux の踏み台への ssh トンネルを作成する方法については、以下のステップで示します。SSH トンネルは、ローカル IP アドレスから Linux 踏み台へのリクエストを受信するため、Linux 踏み台の TCP フォワーディングは前のステップで `true` に設定されました。

------
#### [ macOS/Linux ]

**コマンドラインを使用してトンネルを作成するには**

1. Amazon EC2 のコンソールで、[インスタンス](https://console.aws.amazon.com/ec2/v2/home#/Instances:) ページを開きます。

1. インスタンスを選択してください。

1. **Public IPv4 DNS** のアドレスをコピーします。例えば、`ec2-4-82-142-1.compute-1.amazonaws.com` です。

1. コマンドプロンプトで、SSH キーが保存されているディレクトリに移動します。

1. 次のコマンドを実行して、踏み台インスタンスに ssh を使用して接続します。サンプル値を `mykeypair.pem` の SSH キー名に置き換えてください。

   ```
   ssh -i mykeypair.pem -N -D 8157 ec2-user@YOUR_PUBLIC_IPV4_DNS
   ```

------
#### [ Windows (PuTTY) ]

**PuTTY を使用してトンネルを作成するには**

1. Amazon EC2 のコンソールで、[インスタンス](https://console.aws.amazon.com/ec2/v2/home#/Instances:)ページを開きます。

1. インスタンスを選択してください。

1. **Public IPv4 DNS** のアドレスをコピーします。例えば、`ec2-4-82-142-1.compute-1.amazonaws.com` です。

1. [PuTTY](https://www.putty.org/) を開き、**セッション** を選択します。

1. **ホスト名** にホスト名を ec2-user@ *YOUR\$1PUBLIC\$1IPV4\$1DNS* と入力し、**ポート** を `22` と入力します。

1. **SSH** タブを展開し、**認証** を選択します。**認証用のプライベートキーファイル** で、ローカルの「ppk」ファイルを選択します。

1. SSH で **トンネル** タブを選択し、*動的* オプションと *自動* オプションを選択します。

1. **送信元ポート** に `8157` ポート (またはその他の未使用のポート) を追加し、**送信先** ポートは空白のままにします。**追加** を選択します。

1. **セッション** タブを選択し、セッション名を入力します。例えば、`SSH Tunnel` です。

1. **保存**、**開く** を選択します。
**注記**  
パブリックキーのパスフレーズの入力が必要な場合があります。

------

**注記**  
`Permission denied (publickey)` のエラーが発生した場合は、[AWSSupport-TroublesshsSH](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-awssupport-troubleshootssh.html) ツールを使用し、**[この自動化を実行 (コンソール)]** を選択して SSH セットアップのトラブルシューティングを行うことをお勧めします。

## ステップ 3: 踏み台セキュリティグループをインバウンドルールとして設定する
<a name="private-network-lb-create-sgsource"></a>

サーバーへのアクセスとサーバーからの通常のインターネットアクセスは、それらのサーバーにアタッチされた特別なメンテナンスセキュリティグループで許可されています。以下の手順では、踏み台セキュリティグループを環境の VPC セキュリティグループへのインバウンドトラフィックソースとして設定する方法について説明します。

1. Amazon MWAA コンソールで、[環境ページ](https://console.aws.amazon.com/mwaa/home#/environments) を開きます。

1. 環境を選択します。

1. **ネットワーク** ペインで **VPC セキュリティグループ** を選択します。

1. **インバウンドのルールを編集** を選択します。

1. **ルールを追加** を選択してください。

1. **ソース** ドロップダウンリストから VPC セキュリティグループ ID を選択します。

1. 残りのオプションは空白のままにするか、デフォルト値に設定します。

1. **ルールの保存** を選択してください。

## ステップ 4: Apache Airflow URL をコピーします。
<a name="private-network-lb-view-env"></a>

次のステップでは、Amazon MWAA コンソールを開いて URL を Apache Airflow UI にコピーする方法について説明します。

1. Amazon MWAA コンソールで、[環境ページ](https://console.aws.amazon.com/mwaa/home#/environments) を開きます。

1. 環境を選択します。

1. **Airflow UI** の URL をコピーして、以降のステップで使用できるようにします。

## ステップ 5: プロキシ設定を行う
<a name="private-network-lb-browser-extension"></a>

ダイナミックポートフォワーディングによる SSH トンネルを使用する場合、SOCKS プロキシ管理アドオンを用いてブラウザでプロキシ設定を管理する必要があります。たとえば、Chromium の `--proxy-server` 機能を使用してブラウザセッションを開始したり、Mozilla FireFox ブラウザの FoxyProxy 拡張機能を使用したりできます。

### オプション 1： ローカルポート転送を使用して SSH トンネルをセットアップします。
<a name="private-network-lb-browser-extension-portforwarding"></a>

SOCKS プロキシを使いたくない場合は、ローカルポート転送を使って SSH トンネルをセットアップすることができます。以下のコマンド例は、ローカルポート 8157 でトラフィックを転送して Amazon EC2 *ResourceManager* ウェブインターフェイスにアクセスします。

1. 新しいコマンドプロンプトウィンドウを開きます。

1. 以下のコマンドを入力し、SSH トンネルを開きます。

   ```
   ssh -i mykeypair.pem -N -L 8157:YOUR_VPC_ENDPOINT_ID-vpce.us-east-1.airflow.amazonaws.com:443 ubuntu@YOUR_PUBLIC_IPV4_DNS.us-east-1.compute.amazonaws.com
   ```

   `-L` はローカルポート転送の使用を意味し、ノードのローカルウェブサーバーの特定リモートポートへのデータ転送に使用するローカルポートを指定できます。

1. ブラウザに `http://localhost:8157/` と入力します。
**注記**  
`https://localhost:8157/` を使用する必要がある場合があります。

### オプション 2: コマンドラインを使用したプロキシ
<a name="private-network-lb-browser-extension-foxyp"></a>

ほとんどのウェブブラウザでは、コマンドラインまたは設定パラメータを使用してプロキシを設定できます。たとえば、Chromium では、次のコマンドを使用してブラウザを起動できます。

```
chromium --proxy-server="socks5://localhost:8157"
```

これにより、前のステップで作成した SSH トンネルを使用してリクエストをプロキシするブラウザセッションが開始されます。プライベート Amazon MWAA 環境 URL (*https://* を使用) は、次のように開くことができます。

```
https://YOUR_VPC_ENDPOINT_ID-vpce.us-east-1.airflow.amazonaws.com/home.
```

### オプション 3: Mozilla Firefox 用 FoxyProxy を使用するプロキシ
<a name="private-network-lb-browser-extension-foxyp"></a>

Mozilla Firefox の FoxyProxy Standard (バージョン 7.5.1) の設定を次の例に示します。FoxyProxy は、プロキシ管理ツールのセットを提供します。これにより、Apache Airflow UI で使用されるドメインに対応するパターンと一致する URL についてプロキシサーバーを使用できます。

1. FireFox では、[FoxyProxy スタンダード](https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/) エクステンションページを開きます。

1. **Firefox に追加** を選択します。

1. **追加** を選択します。

1. ブラウザのツールバーで FoxyProxy アイコンを選択し、**オプション** を選択します。

1. 次のコードをコピーし、`mwaa-proxy.json` という名前でローカルに保存します。*YOUR\$1HOST\$1NAME* のサンプル値を **Apache Airflow URL** に置き換えてください。

   ```
   {
     "e0b7kh1606694837384": {
       "type": 3,
       "color": "#66cc66",
       "title": "airflow",
       "active": true,
       "address": "localhost",
       "port": 8157,
       "proxyDNS": false,
       "username": "",
       "password": "",
       "whitePatterns": [
         {
           "title": "airflow-ui",
           "pattern": "YOUR_HOST_NAME",
           "type": 1,
           "protocols": 1,
           "active": true
         }
       ],
       "blackPatterns": [],
       "pacURL": "",
       "index": -1
     },
     "k20d21508277536715": {
       "active": true,
       "title": "Default",
       "notes": "These are the settings that are used when no patterns match a URL.",
       "color": "#0055E5",
       "type": 5,
       "whitePatterns": [
         {
           "title": "all URLs",
           "active": true,
           "pattern": "*",
           "type": 1,
           "protocols": 1
         }
       ],
       "blackPatterns": [],
         "index": 9007199254740991
     },
     "logging": {
       "active": true,
       "maxSize": 500
     },
     "mode": "patterns",
     "browserVersion": "82.0.3",
     "foxyProxyVersion": "7.5.1",
     "foxyProxyEdition": "standard"
   }
   ```

1. **FoxyProxy 6.0\$1 から設定をインポート** ペインで、**設定をインポート** を選択し、`mwaa-proxy.json` ファイルを選択します。

1. **OK** を選択してください。

## ステップ 6: Apache Airflow UI を開きます。
<a name="private-network-lb-open"></a>

Apache Airflow UI を開く方法については、以下のステップで示します。

1. Amazon MWAA コンソールで、[環境ページ](https://console.aws.amazon.com/mwaa/home#/environments) を開きます。

1. **Airflow UI を開く** を選択します。

## 次のステップ
<a name="bastion-next-up"></a>
+ [Apache Airflow CLI コマンドリファレンス](airflow-cli-command-reference.md) の踏み台ホストへの SSH トンネルで Airflow CLI コマンドを実行する方法について説明します。
+ DAG コードを Amazon S3 バケットにアップロードする方法については、[DAG の追加と更新](configuring-dag-folder.md) で示します。

# チュートリアル: Amazon MWAA ユーザーのアクセスを DAG のサブセットに制限する
<a name="limit-access-to-dags"></a>

Amazon MWAA は IAM プリンシパルを 1 つ以上の Apache Airflow の [デフォルトロール](https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html#default-roles) にマッピングすることで、環境へのアクセスを管理します。次のチュートリアルを使用して、個々の Amazon MWAA ユーザーが特定の DAG または DAG セットのみにアクセスして操作できるように制限します。

**注記**  
このチュートリアルのステップは、IAM ロールを想定できる限り、フェデレーションアクセスを使用して完了できます。

**Topics**
+ [前提条件](#limit-access-to-dags-prerequisites)
+ [ステップ 1:デフォルトの `Public` Apache Airflow ロールを使用して、IAM プリンシパルに Amazon MWAA ウェブサーバーへのアクセス権を付与します。](#limit-access-to-dags-apply-public-access)
+ [ステップ 2:新しい Apache Airflow カスタムロールを作成する](#limit-access-to-dags-create-new-airflow-role)
+ [ステップ 3:作成したロールを Amazon MWAA ユーザーに割り当てます。](#limit-access-to-dags-assign-role)
+ [次の手順](#limit-access-to-dags-next-up)
+ [関連リソース](#limit-access-to-dags-related-resources)

## 前提条件
<a name="limit-access-to-dags-prerequisites"></a>

このチュートリアルのステップを完了するには、以下のものが必要です。
+ [複数の DAG を使用する Amazon MWAA 環境](get-started.md)
+ IAM プリンシパル `Admin` は [AdministratorAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AdministratorAccess$jsonEditor) 権限を持ち、IAM ユーザー `MWAAUser` は DAG アクセスを制限できるプリンシパルです。管理者ロールの詳細については、*IAM ユーザーガイド* の [管理者ジョブ機能](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) を参照してください。
**注記**  
アクセス許可ポリシーを IAM ユーザーに直接アタッチしないでください。Amazon MWAA リソースに一時的にアクセスするために引き受けることができる IAM ロールの設定をお勧めします。
+ [AWS Command Line Interface バージョン 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install) がインストールされました。

## ステップ 1:デフォルトの `Public` Apache Airflow ロールを使用して、IAM プリンシパルに Amazon MWAA ウェブサーバーへのアクセス権を付与します。
<a name="limit-access-to-dags-apply-public-access"></a>

**を使用してアクセス許可を付与するには AWS マネジメントコンソール**

1. `Admin` ロール AWS アカウント を使用して にサインインし、[IAM コンソール](https://console.aws.amazon.com/iam/)を開きます。

1. 左側のナビゲーションペインで **ユーザー** を選択し、ユーザーテーブルから Amazon MWAA IAM ユーザーを選択します。

1. ユーザー詳細ページの **概要** で **アクセス許可** タブを選択し、**アクセス許可ポリシー** を選択してカードを展開し、**アクセス許可の追加** を選択します。

1. **アクセス許可の付与** セクションで、**既存のポリシーの直接添付** を選択し、**ポリシーの作成** を選択して、独自のカスタム権限ポリシーを作成して添付します。

1. **ポリシーの作成** ページで **JSON** を選択し、次の JSON アクセス許可ポリシーをコピーしてポリシーエディターに貼り付けます。このポリシーは、デフォルトの `Public` Apache Airflow ロールを持つユーザーにウェブサーバーアクセスを許可します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "airflow:CreateWebLoginToken",
               "Resource": [
               "arn:aws:airflow:us-east-1:111122223333:role/YOUR_ENVIRONMENT_NAME/Public"
               ]
           }
       ]
   }
   ```

------

## ステップ 2:新しい Apache Airflow カスタムロールを作成する
<a name="limit-access-to-dags-create-new-airflow-role"></a>

**Apache Airflow UI を使用して新しいロールを作成するには**

1. 管理者の IAM ロールを使用して、[Amazon MWAA コンソール](https://console.aws.amazon.com/mwaa/home) を開き、環境の Apache Airflow UI を起動します。

1. 上部のナビゲーションペインで **セキュリティ** にカーソルを合わせてドロップダウンリストを開き、**ロールを一覧表示** を選択してデフォルトの Apache Airflow ロールにアクセスします。

1. ロールリストから **ユーザー** を選択し、ページの先頭で **アクション** を選択してドロップダウンを開きます。**ロールをコピー** を選択し、**OK** を確認します。
**注記**  
**[Ops]** ロールまたは **[ビューワー]** ロールをコピーして、それぞれ許可するアクセス権を増やしたり減らしたりします。

1. テーブルで作成した新しいロールを探し、**レコードを編集** を選択します。

1. **ロールを編集** ページで以下を実行します。
   + **名前** には、テキストフィールドにロールの新しい名前を入力します。例えば、**Restricted** です。
   + **アクセス許可** のリストから `can read on DAGs` と `can edit on DAGs` を削除し、アクセスを提供したい DAG のセットに対して読み取りおよび書き込みのアクセス許可を追加してください。たとえば、DAG である `example_dag.py` の場合、**`can read on DAG:example_dag`** と **`can edit on DAG:example_dag`** を追加してください。

   **保存** を選択します。これで、Amazon MWAA 環境で使用可能な DAG のサブセットへのアクセスを制限する新しいロールが作成されました。既存の Apache Airflow ユーザーにこのロールを割り当てることができます。

## ステップ 3:作成したロールを Amazon MWAA ユーザーに割り当てます。
<a name="limit-access-to-dags-assign-role"></a>

**新しいロールを割り当てるには**

1. `MWAAUser` の アクセス資格情報を使用して、以下の CLI コマンドを実行して環境のウェブサーバー URL を取得してください。

   ```
   aws mwaa get-environment --name YOUR_ENVIRONMENT_NAME | jq '.Environment.WebserverUrl'
   ```

   成功すると、次の出力が表示されます。

   ```
   "ab1b2345-678a-90a1-a2aa-34a567a8a901.c13.us-west-2.airflow.amazonaws.com"
   ```

1. に`MWAAUser`サインインしたら AWS マネジメントコンソール、新しいブラウザウィンドウを開き、次の URl にアクセスします。`Webserver-URL` を自分の情報に置き換えます。

   ```
   https://<Webserver-URL>/home
   ```

   成功した場合、まだ `MWAAUser` が Apache Airflow UI へのアクセス許可を得ていないため、`Forbidden` のエラーページが表示されます。

1. に`Admin`サインインしたら AWS マネジメントコンソール、Amazon MWAA コンソールを再度開き、環境の Apache Airflow UI を起動します。

1. UI ダッシュボードから **[セキュリティ]** ドロップダウンを展開し、今度は **ユーザーを一覧表示** を選択します。

1. ユーザーテーブルで新しい Apache Airflow ユーザーを探し、**レコードを編集** を選択します。ユーザーの名前は、次のパターンで IAM ユーザーの名前と一致します：`user/mwaa-user`。

1. **ユーザーの編集** ページの **ロール** セクションで、作成した新しいカスタムロールを追加し、**保存** を選択します。
**注記**  
**姓** フィールドは必須ですが、スペースがあれば十分です。

   IAM `Public` プリンシパルは Apache Airflow UI にアクセスする `MWAAUser` 権限を付与し、新しいロールは DAG を確認するために必要な追加の権限を付与します。

**重要**  
Apache Airflow UI を使用して追加された IAM によって承認されていない 5 つのデフォルトロール (`Admin` など) は、次回のユーザーログイン時に削除されます。

## 次の手順
<a name="limit-access-to-dags-next-up"></a>
+ Amazon MWAA 環境へのアクセス管理の詳細と、環境ユーザーに使用できる JSON IAM ポリシーのサンプルを確認するには、[Amazon MWAA 環境へのアクセス](access-policies.md) を参照してください。

## 関連リソース
<a name="limit-access-to-dags-related-resources"></a>
+ [アクセスコントロール](https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html) (Apache Airflow ドキュメント) — デフォルトの Apache Airflow ロールの詳細については、Apache Airflow ドキュメンテーションウェブサイトをご覧ください。

# チュートリアル: 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 ウェブサーバーにアクセスできます。