開発エンドポイントに関連付けられているノートブックサーバーを作成する - AWS Glue

開発エンドポイントに関連付けられているノートブックサーバーを作成する

ETL コードをテストする 1 つの方法は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで実行されている Apache Zeppelin ノートブックを使用する方法です。AWS Glue を使用して Amazon EC2 インスタンスでノートブックサーバーを作成するときは、環境を安全に設定するためにいくつかのアクションを実行する必要があります。開発エンドポイントは、単一のクライアントからアクセスできるように構築されています。設定を簡素化するために、まず Amazon EC2 のノートブックサーバーから使用される開発エンドポイントを作成します。

以下のセクションでは、行うべきいくつかの選択と、ノートブックサーバーを安全に作成するために行うアクションについて説明します。この手順では、以下のタスクを実行します。

  • 開発エンドポイントを作成します。

  • Amazon EC2 インスタンスでノートブックサーバーをスピンアップします。

  • 開発エンドポイントにノートブックサーバーに安全に接続します。

  • ウェブサーバーをノートブックサーバーに安全に接続します。

AWS Glue コンソールでの選択肢

AWS Glue コンソールを使用して開発エンドポイントを管理する方法の詳細については、「開発エンドポイントのプロパティの表示」を参照してください。

開発エンドポイントとノートブックサーバーを作成するには
  1. AWS Management Console にサインインし、AWS Glue コンソール (https://console.aws.amazon.com/glue/) を開きます。

  2. ナビゲーションペインで [開発エンドポイント] を選択し、[エンドポイントの追加] を選択します。

  3. ウィザードの手順に従って、Amazon EC2 で実行されている 1 つのノートブックサーバーと関連付ける開発エンドポイントを作成します。

    [Add SSH public key (optional) (SSH パブリックキーの追加 (オプション))] ステップで、パブリックキーを空のままにします。後のステップで、パブリックキーを生成して開発エンドポイントにプッシュし、対応するプライベートキーを生成してノートブックサーバーが実行されている Amazon EC2 インスタンスにプッシュします。

  4. 開発エンドポイントがプロビジョニングされたら、手順を続行して Amazon EC2 にノートブックサーバーを作成します。開発エンドポイントリストページで、ここで作成した開発エンドポイントを選択します。[Action]、[Create Zeppelin notebook server] の順に選択し、ノートブックサーバーに関する情報を入力します。(詳細については、開発エンドポイントのプロパティの表示 を参照してください)。

  5. [Finish] (終了) を選択します。ノートブックサーバーが AWS CloudFormation スタックを使用して作成されます。AWS Glue コンソールに、Amazon EC2 インスタンスにアクセスするために必要な情報が表示されます。

    ノートブックサーバーの準備ができたら、Amazon EC2 インスタンスでスクリプトを実行してセットアップを完了する必要があります。

アクセスを設定するための Amazon EC2 インスタンスでのアクション

開発エンドポイントとノートブックサーバーを作成したら、次のアクションを実行し、ノートブックサーバー用の Amazon EC2 インスタンスをセットアップします。

ノートブックサーバーへのアクセスを設定するには
  1. ローカルデスクトップで Windows が実行されている場合は、Amazon EC2 インスタンスを操作するために SSH および SCP コマンドを実行する方法が必要です。接続する手順については、Amazon EC2 ドキュメントを参照してください。詳細については、「PuTTY を使用した Windows から Linux インスタンスへの接続」を参照してください。

  2. HTTPS URL を使用して Zeppelin ノートブックに接続できます。このためには、Amazon EC2 インスタンスに Secure Sockets Layer (SSL) 証明書が必要です。ノートブックサーバーは、その信頼性を検証し、パスワードなどの機密データを暗号化されたトラフィックとして送信できるように、ウェブブラウザに証明書を提供する必要があります。

    認証機関 (CA) が発行した SSL 証明書がある場合、Amazon EC2 インスタンスにある SSL 証明書キーストアを、ec2-user が書き込みアクセス権を持っている /home/ec2-user/ などのパスにコピーします。[Copy certificate] (証明書のコピー) を行う scp コマンドについては、AWS Glue コンソールのノートブックサーバーの詳細を参照してください。たとえば、ターミナルウィンドウを開いて、次のコマンドを入力します。

    scp -i ec2-private-key keystore.jks ec2-user@dns-address-of-ec2-instance:~/keystore.jks

    Amazon EC2 インスタンスにコピーされる信頼ストア keystore.jks は、パスワード付きで作成しておく必要があります。

    ec2-private-key は、Amazon EC2 インスタンスへのアクセスに必要なキーです。ノートブックサーバーの作成時、Amazon EC2 キーペアを指定し、この EC2 プライベートキーをローカルマシンに保存しました。ローカルマシン上のキーファイルをポイントするため、[Copy certificate (証明書のコピー)] コマンドの編集が必要なことがあります。このキーファイル名は、ノートブックサーバーの Amazon EC2 コンソールの詳細で調べることもできます。

    dns-address-of-ec2-instance は、キーストアがコピーされる Amazon EC2 インスタンスのアドレスです。

    注記

    SSL 証明書を生成する方法は複数あります。セキュリティベストプラクティスとして、認証機関 (CA) により生成された証明書を使用してください。証明書を取得するため、組織の管理者にサポートを求める必要が生じることがあります。ノートブックサーバーのキーストアを作成するときは、組織のポリシーに従います。詳細については、Wikipedia の「Certificate authority」を参照してください。

    もう 1 つの方法として、ノートブックサーバー Amazon EC2 インスタンスでスクリプトを使用して自己署名証明書を生成することもできます。ただし、この方法では、ノートブックサーバーに接続する各ローカルマシンが、ノートブックサーバーに接続する前に生成された証明書を信頼するように設定されている必要があります。また、生成された証明書が期限切れになったら、新しい証明書を生成し、その証明書がすべてのローカルマシンで信頼される必要があります。セットアップの詳細については、「自己署名証明書」を参照してください。詳細については、Wikipedia の「Self-signed certificate」を参照してください。

  3. SSH を使用して、ノートブックを実行している Amazon EC2 インスタンスに接続します。例えば、次のとおりです。

    ssh -i ec2-private-key ec2-user@dns-address-of-ec2-instance

    ec2-private-key は、Amazon EC2 インスタンスへのアクセスに必要なキーです。ノートブックサーバーの作成時、Amazon EC2 キーペアを指定し、この EC2 プライベートキーをローカルマシンに保存しました。ローカルマシン上のキーファイルをポイントするため、[Copy certificate (証明書のコピー)] コマンドの編集が必要なことがあります。このキーファイル名は、ノートブックサーバーの Amazon EC2 コンソールの詳細で調べることもできます。

    dns-address-of-ec2-instance は、キーストアがコピーされる Amazon EC2 インスタンスのアドレスです。

  4. ホームディレクトリ /home/ec2-user/ から ./setup_notebook_server.py スクリプトを実行します。AWS Glue により、このスクリプトが作成され、Amazon EC2 インスタンスに配置されました。スクリプトは以下のアクションを実行します。

    • Zeppelin ノートブックパスワードを求める: パスワードは、SHA-256 ハッシュされるのに加えて、制限付きアクセス権を持つ shiro.ini ファイルに保持された 128 ビットソルトでソルトおよび反復されます。これは、Apache Zeppelin が使用する認証パッケージ Apache Shiro で使用できるベストプラクティスです。

    • SSH パブリックキーとプライベートキーを生成する: このスクリプトは、ノートブックサーバーに関連付けられている開発エンドポイントにある既存の SSH パブリックキーを上書きします。その結果、この開発エンドポイントに接続する他のノートブックサーバー、Read-Eval-Print ループ (REPL)、または IDE が接続できなくなります。

    • SSL 証明書を確認または生成する: 認証機関 (CA) によって生成された SSL 証明書を使用するか、このスクリプトを使用して証明書を生成します。証明書をコピーした場合、スクリプトによりキーストアファイルの場所が求められます。Amazon EC2 インスタンスのパス全体を指定します (例: /home/ec2-user/keystore.jks)。SSL 証明書が確認されます。

    setup_notebook_server.py スクリプトの次の出力例では、自己署名 SSL 証明書が生成されます。

    Starting notebook server setup. See AWS Glue documentation for more details. Press Enter to continue... Creating password for Zeppelin user admin Type the password required to access your Zeppelin notebook: Confirm password: Updating user credentials for Zeppelin user admin Zeppelin username and password saved. Setting up SSH tunnel to devEndpoint for notebook connection. Do you want a SSH key pair to be generated on the instance? WARNING this will replace any existing public key on the DevEndpoint [y/n] y Generating SSH key pair /home/ec2-user/dev.pem Generating public/private rsa key pair. Your identification has been saved in /home/ec2-user/dev.pem. Your public key has been saved in /home/ec2-user/dev.pem.pub. The key fingerprint is: 26:d2:71:74:b8:91:48:06:e8:04:55:ee:a8:af:02:22 ec2-user@ip-10-0-0-142 The key's randomart image is: +--[ RSA 2048]----+ |.o.oooo..o. | | o. ...+. | | o . . .o | | .o . o. | | . o o S | |E. . o | |= | |.. | |o.. | +-----------------+ Attempting to reach AWS Glue to update DevEndpoint's public key. This might take a while. Waiting for DevEndpoint update to complete... Waiting for DevEndpoint update to complete... Waiting for DevEndpoint update to complete... DevEndpoint updated to use the public key generated. Configuring Zeppelin server... ******************** We will configure Zeppelin to be a HTTPS server. You can upload a CA signed certificate for the server to consume (recommended). Or you can choose to have a self-signed certificate created. See AWS Glue documentation for additional information on using SSL/TLS certificates. ******************** Do you have a JKS keystore to encrypt HTTPS requests? If not, a self-signed certificate will be generated. [y/n] n Generating self-signed SSL/TLS certificate at /home/ec2-user/ec2-192-0-2-0.compute-1.amazonaws.com.jks Self-signed certificates successfully generated. Exporting the public key certificate to /home/ec2-user/ec2-192-0-2-0.compute-1.amazonaws.com.der Certificate stored in file /home/ec2-user/ec2-192-0-2-0.compute-1.amazonaws.com.der Configuring Zeppelin to use the keystore for SSL connection... Zeppelin server is now configured to use SSL. SHA256 Fingerprint=53:39:12:0A:2B:A5:4A:37:07:A0:33:34:15:B7:2B:6F:ED:35:59:01:B9:43:AF:B9:50:55:E4:A2:8B:3B:59:E6 ********** The public key certificate is exported to /home/ec2-user/ec2-192-0-2-0.compute-1.amazonaws.com.der The SHA-256 fingerprint for the certificate is 53:39:12:0A:2B:A5:4A:37:07:A0:33:34:15:B7:2B:6F:ED:35:59:01:B9:43:AF:B9:50:55:E4:A2:8B:3B:59:E6. You may need it when importing the certificate to the client. See AWS Glue documentation for more details. ********** Press Enter to continue... All settings done! Starting SSH tunnel and Zeppelin... autossh start/running, process 6074 Done. Notebook server setup is complete. Notebook server is ready. See /home/ec2-user/zeppelin/logs/ for Zeppelin log files.
  5. /home/ec2-user/zeppelin/logs/ にあるログファイルで、Zeppelin サーバーの起動のエラーを確認します。

Zeppelin サーバーに接続するためのローカルコンピュータでのアクション

開発エンドポイントとノートブックサーバーを作成したら、Zeppelin ノートブックに接続します。環境のセットアップ方法に応じて、次のいずれかの方法で接続することができます。

  1. 信頼された CA 証明書を使用して接続します。Zeppelin サーバーが Amazon EC2 インスタンスでセットアップされていたときに、認証機関 (CA) から発行された SSL 証明書を指定した場合、この方法を選択します。ポート 443 で HTTPS を使用して接続するには、ウェブブラウザを開き、ノートブックサーバーの URL を入力します。この URL は、ノートブックサーバーの開発ノートブック詳細ページにあります。[HTTPS URL] フィールドに内容を入力します。たとえば、次のとおりです。

    https://public-dns-address-of-ec2-instance:443
  2. 自己署名証明書を使用して接続します。setup_notebook_server.py スクリプトを実行して SSL 証明書を生成した場合、まずウェブブラウザとノートブックサーバーの間の接続を信頼します。このアクションの詳細は、オペレーティングシステムとウェブブラウザによって異なります。一般的なワークフローは次のとおりです。

    1. ローカルコンピュータから SSL 証明書にアクセスします。シナリオによっては、Amazon EC2 インスタンスからローカルコンピュータに SSL 証明書をコピーする必要があります。例えば、次のとおりです。

      scp -i path-to-ec2-private-key ec2-user@notebook-server-dns:/home/ec2-user/notebook-server-dns.der notebook-server-dns.der
    2. オペレーティングシステムとブラウザによって使用されている Certificate Manager に証明書をインポートして表示 (または表示してインポート) します。Amazon EC2 インスタンスで生成された証明書と一致することを確認します。

    Mozilla Firefox ブラウザ:

    Firefox では、[Your connection is not secure (接続が安全ではありません)] などのエラーが発生する可能性があります。接続を設定する一般的な手順は以下のとおりです (ステップは、Firefox のバージョンによって異なることがあります)。

    1. [Options (オプション)] または [Preferences (設定)] ページを見つけ、ページに移動して [View Certificates (証明書の表示)] を選択します。このオプションは、[Privacy (プライバシー)]、[Security (セキュリティ)]、または [Advanced (アドバンスド)] タブに表示されることがあります。

    2. [Certificate Manager (Certificate Manager)] ウィンドウで、[Servers (サーバー)] タブを選択し、[Add Exception (例外の追加)] をクリックします。

    3. Amazon EC2 でノートブックサーバーの HTTPS の [Location] (場所) に入力し、[Get Certificate ] (証明書の取得) を選択します。[View (表示) ] を選択します。

    4. [Common Name (CN)] (共通名 (CN)) がネットワークサーバー Amazon EC2 インスタンスの DNS に一致することを確認します。さらに、[SHA-256 Fingerprint] (SHA-256 フィンガープリント) が Amazon EC2 インスタンスで生成された証明書と一致することを確認します。証明書の SHA-256 フィンガープリントは、ノートブックインスタンスで openssl コマンドを実行することにより setup_notebook_server.py の出力で確認できます。

      openssl x509 -noout -fingerprint -sha256 -inform der -in path-to-certificate.der
    5. 値が一致した場合、証明書を信頼することを確認します。

    6. 証明書の有効期限が切れたら、Amazon EC2 インスタンスで新しい証明書を生成し、ローカルコンピュータ上で信頼します。

    macOS での Google Chrome ブラウザ:

    macOS で Chrome を使用する場合、[Your connection is not private (接続がプライベートではありません)] などのエラーが発生する可能性があります。接続を設定する一般的なステップは以下のとおりです。

    1. SSL 証明書を Amazon EC2; インスタンスからローカルコンピュータにコピーします。

    2. [Preferences (設定)] または [Settings (設定)] を選択し、[Settings (設定)] ページを見つけます。[Advanced (詳細設定)] セクションに移動し、[Privacy and security (プライバシーとセキュリティ)] セクションを見つけます。[Manage certificates (証明書の管理)] を選択します。

    3. [Keychain Access] (キーチェーンアクセス) ウィンドウで、[Certificates] (証明書) に移動して、[File] (ファイル)、[Import items] (項目のインポート) の順に選択し、SSL 証明書をインポートします。

    4. [Common Name (CN)] (共通名 (CN)) がネットワークサーバー Amazon EC2 インスタンスの DNS に一致することを確認します。さらに、[SHA-256 Fingerprint] (SHA-256 フィンガープリント) が Amazon EC2 インスタンスで生成された証明書と一致することを確認します。証明書の SHA-256 フィンガープリントは、ノートブックインスタンスで openssl コマンドを実行することにより setup_notebook_server.py の出力で確認できます。

      openssl x509 -noout -fingerprint -sha256 -inform der -in path-to-certificate.der
    5. [Always Trust (常に信頼する)] に設定して証明書を信頼します。

    6. 証明書の有効期限が切れたら、Amazon EC2 インスタンスで新しい証明書を生成し、ローカルコンピュータ上で信頼します。

    Windows の Chrome ブラウザ:

    Windows で Chrome を使用する場合、[Your connection is not private (接続がプライベートではありません)] などのエラーが発生する可能性があります。接続を設定する一般的なステップは以下のとおりです。

    1. SSL 証明書を Amazon EC2; インスタンスからローカルコンピュータにコピーします。

    2. [Settings (設定)] ページで、[Advanced (詳細設定)] セクションに移動し、[Privacy and security (プライバシーとセキュリティ)] セクションを見つけます。[Manage certificates (証明書の管理)] を選択します。

    3. [Certificates (証明書)] ウィンドウで、[Trusted Root Certification Authorities (信頼されたルート認証機関)] タブに移動し、[Import (インポート)] を選択して SSL 証明書をインポートします。

    4. [Trusted Root Certification Authorities (信頼されたルート認証機関)] の [Certificate store (証明書ストア)] に証明書を置きます。

    5. 証明書をインストールして信頼します。

    6. ブラウザに証明書により表示される [SHA-1 Thumbprint] (SHA-1 サムプリント) が、Amazon EC2 インスタンスで生成された証明書と一致することを確認します。ブラウザで証明書を見つけるには、 [Trusted Root Certification Authorities] (信頼されたルート認証機関) のリストに移動し、証明書の [Issued To] (発行先) として Amazon EC2 インスタンスを選択します。証明書の [View (表示)] を選択して [Details (詳細)] を選択した後、[Thumbprint (サムプリント)] として sha1 を選択します。証明書の対応する SHA-1 フィンガープリントは、Amazon EC2 インスタンスで openssl コマンドを実行することにより確認できます。

      openssl x509 -noout -fingerprint -sha1 -inform der -in path-to-certificate.der
    7. 証明書の有効期限が切れたら、Amazon EC2 インスタンスで新しい証明書を生成し、ローカルコンピュータ上で信頼します。

    Windows の Microsoft Internet Explorer ブラウザ:

    Windows で Internet Explorer を使用する場合、[Your connection is not private (接続がプライベートではありません)] などのエラーが発生する可能性があります。接続を設定する一般的なステップは以下のとおりです。

    1. SSL 証明書を Amazon EC2; インスタンスからローカルコンピュータにコピーします。

    2. [Internet Options (インターネットオプション)] ページで [Content (コンテンツ)] タブに移動し、[Certificates (証明書)] セクションを見つけます。

    3. [Certificates (証明書)] ウィンドウで、[Trusted Root Certification Authorities (信頼されたルート認証機関)] タブに移動し、[Import (インポート)] を選択して SSL 証明書をインポートします。

    4. [Trusted Root Certification Authorities (信頼されたルート認証機関)] の [Certificate store (証明書ストア)] に証明書を置きます。

    5. 証明書をインストールして信頼します。

    6. ブラウザに証明書により表示される [SHA-1 Thumbprint] (SHA-1 サムプリント) が、Amazon EC2 インスタンスで生成された証明書と一致することを確認します。ブラウザで証明書を見つけるには、 [Trusted Root Certification Authorities] (信頼されたルート認証機関) のリストに移動し、証明書の [Issued To] (発行先) として Amazon EC2 インスタンスを選択します。証明書の [View (表示)] を選択して [Details (詳細)] を選択した後、[Thumbprint (サムプリント)] として sha1 を選択します。証明書の対応する SHA-1 フィンガープリントは、Amazon EC2 インスタンスで openssl コマンドを実行することにより確認できます。

      openssl x509 -noout -fingerprint -sha1 -inform der -in path-to-certificate.der
    7. 証明書の有効期限が切れたら、Amazon EC2 インスタンスで新しい証明書を生成し、ローカルコンピュータ上で信頼します。

    証明書を信頼したら、ポート 443 で HTTPS を使用して接続するには、ウェブブラウザを開き、ノートブックサーバーの URL を入力します。この URL は、ノートブックサーバーの開発ノートブック詳細ページにあります。[HTTPS URL] フィールドに内容を入力します。たとえば、次のとおりです。

    https://public-dns-address-of-ec2-instance:443