事象
- Glue の Python Shell から Secrets Manager からパスワードなどを取得して Redshift にクエリを発行するジョブを実行するエラーになり、CloudWtach Logs を確認すると以下のメッセージが出力されている。
urllib3.exceptions.ConnectTimeoutError: (<botocore.awsrequest.AWSHTTPSConnection object at 0x7fb31ea5e128>, 'Connection to secretsmanager.us-east-1.amazonaws.com timed out. (connect timeout=60)')
(中略)
botocore.exceptions.ConnectTimeoutError: Connect timeout on endpoint URL: "https://secretsmanager.us-east-1.amazonaws.com/"
解決策
- Secrets Manager の VPCエンドポイントを作成する。
- VPCエンドポイントの Security Groupで Python Shell のジョブの Security Group からのアクセスを許可する。
コード
from redshift_module import pygresql_redshift_common as rs_common
import sys
from awsglue.utils import getResolvedOptions
import boto3
args = getResolvedOptions(sys.argv,['db','db_creds','bucket','file'])
db = args['db']
db_creds = args['db_creds']
bucket = args['bucket']
file = args['file']
s3 = boto3.client('s3')
sqls = s3.get_object(Bucket=bucket, Key=file)['Body'].read().decode('utf-8')
sqls = sqls.split(';')
print('connecting...')
con = rs_common.get_connection(db,db_creds)
print("connected...running query...")
results = []
for sql in sqls[:-1]:
sql = sql + ';'
result = rs_common.query(con, sql)
print(result)
results.append(result)
print(results)