Proactively specify aws region for s3 operations

This commit is contained in:
Ryan Ahearn
2022-09-26 10:25:03 -04:00
parent d9823de61d
commit 5f1a1f083a
13 changed files with 47 additions and 23 deletions

View File

@@ -6,11 +6,18 @@ from flask import current_app
default_access_key = os.environ.get('AWS_ACCESS_KEY_ID')
default_secret_key = os.environ.get('AWS_SECRET_ACCESS_KEY')
default_region = os.environ.get('AWS_REGION')
def get_s3_object(bucket_name, filename, access_key=default_access_key, secret_key=default_secret_key):
def get_s3_object(
bucket_name,
filename,
access_key=default_access_key,
secret_key=default_secret_key,
region=default_region,
):
# To inspect contents: obj.get()['Body'].read().decode('utf-8')
session = Session(aws_access_key_id=access_key, aws_secret_access_key=secret_key)
session = Session(aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name=region)
s3 = session.resource('s3')
obj = s3.Object(bucket_name, filename)
return obj

View File

@@ -19,6 +19,7 @@ def get_csv_location(service_id, upload_id):
FILE_LOCATION_STRUCTURE.format(service_id, upload_id),
current_app.config['CSV_UPLOAD_ACCESS_KEY'],
current_app.config['CSV_UPLOAD_SECRET_KEY'],
current_app.config['CSV_UPLOAD_REGION'],
)
@@ -26,9 +27,9 @@ def get_csv_upload(service_id, upload_id):
return get_s3_object(*get_csv_location(service_id, upload_id))
def s3upload(service_id, filedata, region):
def s3upload(service_id, filedata):
upload_id = str(uuid.uuid4())
bucket_name, file_location, access_key, secret_key = get_csv_location(service_id, upload_id)
bucket_name, file_location, access_key, secret_key, region = get_csv_location(service_id, upload_id)
utils_s3upload(
filedata=filedata['data'],
region=region,

View File

@@ -19,6 +19,7 @@ def get_logo_location(filename=None):
filename,
current_app.config['LOGO_UPLOAD_ACCESS_KEY'],
current_app.config['LOGO_UPLOAD_SECRET_KEY'],
current_app.config['LOGO_UPLOAD_REGION'],
)
@@ -29,8 +30,8 @@ def delete_s3_object(filename):
def persist_logo(old_name, new_name):
if old_name == new_name:
return
bucket_name, filename, access_key, secret_key = get_logo_location(new_name)
get_s3_object(bucket_name, filename, access_key, secret_key).copy_from(
bucket_name, filename, access_key, secret_key, region = get_logo_location(new_name)
get_s3_object(bucket_name, filename, access_key, secret_key, region).copy_from(
CopySource='{}/{}'.format(bucket_name, old_name))
delete_s3_object(old_name)
@@ -38,7 +39,8 @@ def persist_logo(old_name, new_name):
def get_s3_objects_filter_by_prefix(prefix):
bucket_name = current_app.config['LOGO_UPLOAD_BUCKET_NAME']
session = Session(aws_access_key_id=current_app.config['LOGO_UPLOAD_ACCESS_KEY'],
aws_secret_access_key=current_app.config['LOGO_UPLOAD_SECRET_KEY'])
aws_secret_access_key=current_app.config['LOGO_UPLOAD_SECRET_KEY'],
region_name=current_app.config['LOGO_UPLOAD_REGION'])
s3 = session.resource('s3')
return s3.Bucket(bucket_name).objects.filter(Prefix=prefix)
@@ -51,7 +53,7 @@ def get_letter_filename_with_no_path_or_extension(filename):
return filename[len(LETTER_PREFIX):-4]
def upload_email_logo(filename, filedata, region, user_id):
def upload_email_logo(filename, filedata, user_id):
upload_file_name = EMAIL_LOGO_LOCATION_STRUCTURE.format(
temp=TEMP_TAG.format(user_id=user_id),
unique_id=str(uuid.uuid4()),
@@ -60,7 +62,7 @@ def upload_email_logo(filename, filedata, region, user_id):
bucket_name = current_app.config['LOGO_UPLOAD_BUCKET_NAME']
utils_s3upload(
filedata=filedata,
region=region,
region=current_app.config['LOGO_UPLOAD_REGION'],
bucket_name=bucket_name,
file_location=upload_file_name,
content_type='image/png',
@@ -71,7 +73,7 @@ def upload_email_logo(filename, filedata, region, user_id):
return upload_file_name
def upload_letter_temp_logo(filename, filedata, region, user_id):
def upload_letter_temp_logo(filename, filedata, user_id):
upload_filename = LETTER_TEMP_LOGO_LOCATION.format(
user_id=user_id,
unique_id=str(uuid.uuid4()),
@@ -80,7 +82,7 @@ def upload_letter_temp_logo(filename, filedata, region, user_id):
bucket_name = current_app.config['LOGO_UPLOAD_BUCKET_NAME']
utils_s3upload(
filedata=filedata,
region=region,
region=current_app.config['LOGO_UPLOAD_REGION'],
bucket_name=bucket_name,
file_location=upload_filename,
content_type='image/svg+xml',