【AWS Glue】Python Shellで環境変数にプロキシを設定したらboto3使用時NoCredentialsErrorが発生
やりたかったこと
Glue Python Shellから外部APIをコールしてレスポンスをS3にファイル出力する
プロキシを超える必要がある
エラー発生時のコード
os.environ()を使ってプロキシの設定をしました
結果は『NoCredentialsError: Unable to locate credentials』
botocore.exceptions.NoCredentialsError: Unable to locate credentials
import urllib.request
import os
import boto3
ENCODING='utf-8'
OUTPUT_BUCKET_NAME='s3-output-bucket'
OUTPUT_FILE_PATH='response.json'
os.environ['http_proxy'] = 'http://{USERNAME}:{PASSWORD}@{PROXY_HOST}:{PROXY_PORT}'
os.environ['https_proxy'] = 'https://{USERNAME}:{PASSWORD}@{PROXY_HOST}:{PROXY_PORT}'
url = 'https://xxxx'
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as res:
body = res.read().decode(ENCODING)
print(body)
s3 = boto3.resource('s3')
output_object = s3.Object(OUTPUT_BUCKET_NAME, OUTPUT_FILE_PATH)
output_object.put(Body = body)
対応後のコード
os.environ()でプロキシの設定を行わなければboto3を使ってもエラーが起こらないことは確認できていたので、APIの処理が終わったらdelを使って環境設定を削除することで対応しました
import urllib.request
import os
import boto3
ENCODING='utf-8'
OUTPUT_BUCKET_NAME='s3-output-bucket'
OUTPUT_FILE_PATH='response.json'
os.environ['http_proxy'] = 'http://{USERNAME}:{PASSWORD}@{PROXY_HOST}:{PROXY_PORT}'
os.environ['https_proxy'] = 'https://{USERNAME}:{PASSWORD}@{PROXY_HOST}:{PROXY_PORT}'
url = 'https://xxxx'
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as res:
body = res.read().decode(ENCODING)
print(body)
del os.environ['http_proxy']
del os.environ['https_proxy']
s3 = boto3.resource('s3')
output_object = s3.Object(OUTPUT_BUCKET_NAME, OUTPUT_FILE_PATH)
output_object.put(Body = body)
この記事が気に入ったらサポートをしてみませんか?