■ はじめに
https://dk521123.hatenablog.com/entry/2021/08/30/104237
で、AWS Glue から RDS接続した際に、 Timeoutエラーになったことについて触れたが、 今回は、RDS接続ではなく(っというかRDS使ってない) Timeoutエラーになったので、その際のトラブルシューティングについてメモ。
目次
【0】Glue Job に関するTimeoutエラー時の原因調査例 調査手順例 【1】Case1: "https://glue.us-west-2.amazonaws.com/" へのアクセス 1)トラブル概要 2)エラー内容 3)確認した点 4)原因 5)解決案 【2】Case2: "https://email.us-west-2.amazonaws.com/" へのアクセス 1)トラブル概要 2)エラー内容 3)原因 4)解決案
【0】Glue Job に関するTimeoutエラー時の原因調査例
前回のTimeoutエラー
https://dk521123.hatenablog.com/entry/2021/08/30/104237
や今回の現象およびそれ以外に経験したTimeoutエラーを踏まえて、 もし、Glue Job で Timeout エラーになったら、 以下の手順で原因を探った方がいいと思った。
調査手順例
1)Glue Jobに紐づいているGlue connectionの確認 ⇒ EMRを起動しようとした際のTimeoutエラーで Glue connectionがアタッチされていなかった ⇒ Glue connectionがなければ作成・アタッチ 2)Glue connectionに設定されている、 VPC/Subnet/Security Group を確認し 接続先(今回の場合 "https://glue.us-west-2.amazonaws.com/")へ アクセス可能か確認する (今回の場合「Security GroupのInbound/Outbound」)
【1】Case1: "https://glue.us-west-2.amazonaws.com/" へのアクセス
1)現象
Glue Job内において、以下の boto3 API を実行した際に Timeoutエラー(詳細は、後述「【2】エラー内容」参照)になった。 ~~~~~~~ [1] get_workflow_run_properties() [2] put_workflow_run_properties() ~~~~~~~
エラーが発生したJobスクリプト
https://dk521123.hatenablog.com/entry/2019/10/15/221931
import sys import boto3 from awsglue.utils import getResolvedOptions # ★意図したregion 'us-west-2' を指定 # (以下「【3】確認」の「[1] region の指定の確認」を参照) glue_client = boto3.client("glue", region='us-west-2') args = getResolvedOptions(sys.argv, ['WORKFLOW_NAME', 'WORKFLOW_RUN_ID']) workflow_name = args['WORKFLOW_NAME'] workflow_run_id = args['WORKFLOW_RUN_ID'] # ★ここで例外★ workflow_params = glue_client.get_workflow_run_properties( Name=workflow_name, RunId=workflow_run_id)["RunProperties"]
2)エラー内容
ConnectTimeoutError: Connect timeout on endpoint URL: "https://glue.us-west-2.amazonaws.com/"
補足:"https://glue.us-west-2.amazonaws.com/"について
"https://glue.us-west-2.amazonaws.com/" は、 AWS Glue の AWS サービスエンドポイント(※) に接続にいっている。
https://docs.aws.amazon.com/ja_jp/general/latest/gr/glue.html
より抜粋
リージョン名 | リージョン | エンドポイント | プロトコル |
---|---|---|---|
米国西部 (オレゴン) | us-west-2 | glue.us-west-2.amazonaws.com | HTTPS |
※ AWS サービスエンドポイント について
https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html
より抜粋 ~~~~~~~ AWS のサービスにプログラムで接続するには、エンドポイントを使用します。 エンドポイントは、AWS ウェブサービスのエントリポイントの URL です。 ~~~~~~~
3)確認した点
[1] region の指定の確認
glue_client = boto3.client("glue", region='us-west-2')
https://dev.classmethod.jp/articles/tsnote-awscli-couldnotconnect-001/
で指摘されている「--regionの設定に誤りがないか」についてだが 本事例では、あてはまらないことを確認。
[2] IAMロールについて
* Glue jobに指定したIAMロールは、以下のAPIで実行許可があることも確認。 => そもそも実行権限がなければ、 Timeoutエラーではなく実行権限エラーになるし、、、 ~~~~~~~ [1] get_workflow_run_properties() [2] put_workflow_run_properties() ~~~~~~~
4)原因
AWS サービスエンドポイント "https://glue.us-west-2.amazonaws.com/" に接続しようと思ったが、Glue jobに指定されているGlue connectionから アクセスできなかったため => 今回の場合、 Glue connection に紐づけられている Security group の Inbound/Outbound で AWS サービスエンドポイント "https://glue.us-west-2.amazonaws.com/"への アクセスが許可されていなかったことが原因。
確認の仕方
* 以下の公式サイトに記載されている
https://aws.amazon.com/jp/premiumsupport/knowledge-center/connection-timeout-glue-redshift-rds/
より抜粋 ~~~~~~~~~ 接続がジョブにアタッチされていることを確認するには、次を実行します。 1. AWS Glue コンソールを開きます。 2. ジョブを選択し、[Details] タブをクリックします。 3. [Connections] パラメータを確認します。 接続が表示されていない場合は、ジョブを編集して接続を追加します。 AWS Glue では、ジョブまたは開発エンドポイントごとに 1 つの接続をサポートしています。 ジョブで複数の接続を指定した場合、 AWS Glue は最初の接続のみを使用します。 ~~~~~~~~~
5)解決案
* 今回の場合、Security GroupのInbound/Outbound に対して、 AWS サービスエンドポイント "https://glue.us-west-2.amazonaws.com/" へのアクセスが許可するように修正。
【2】Case2: "https://email.us-west-2.amazonaws.com/" へのアクセス
1)トラブル概要
Glue Job から boto3 API / send_email() で Emailを送信したら 以下の「エラー内容」が表示されてしまった
2)エラー内容
ConnectTimeoutError: Connect timeout on endpoint URL: "https://email.us-west-2.amazonaws.com/"
3)原因
Security group の Outbound で防止されていたため
https://docs.aws.amazon.com/ja_jp/general/latest/gr/ses.html
エンドポイント「email.us-west-2.amazonaws.com」
他のエンドポイントと違って 「email.us-west-2.amazonaws.com」は、 AWS管理コンソール上からエンドポイントを作成できなかった (ってゆーかー選択肢に出てこない)
4)解決案
Security group の Outbound で「0.0.0.0/0 (Port:443)」を許可
関連記事
AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ Workflows / パラメータ渡し ~
https://dk521123.hatenablog.com/entry/2019/10/15/221931
AWS Glue Job で DB timeout が発生する
https://dk521123.hatenablog.com/entry/2021/08/30/104237
Amazon VPC ~ 基本編 / VPCエンドポイント ~
https://dk521123.hatenablog.com/entry/2022/03/20/000000
Amazon VPC ~ Reachability Analyzer ~
https://dk521123.hatenablog.com/entry/2022/04/24/211107