Можно ли пометить входящие файлы через AWS Transfer Family в S3?
На данный момент я столкнулся с проблемой, заключающейся в том, что я не могу определить, был ли файл PUT PUT через AWS Transfer Family или через графический интерфейс S3.
Есть ли какие-либо изменения в файлах тегов по умолчанию, которые размещаются на S3 через AWS Transfer Family?
С уважением, Рибасе
2 ответа
Метаданные объекта S3, описанные в руководстве пользователя Transfer Family для обработки после загрузки, указывают на то, что Transfer Family загрузил это.
Один из вариантов использования и применения метаданных — это когда у пользователя SFTP есть входящие и исходящие ящики. Для папки «Входящие» объекты помещаются клиентом SFTP. Для исходящих объекты помещаются конвейером обработки после отправки. Если есть уведомление о событии S3, нижестоящая служба на стороне процессора может выполнить вызов S3 HeadObject для метаданных, отклонить, если метаданных нет, и обрабатывать только входящие файлы.
Вы также можете использовать управляемые рабочие процессы Transfer Family для применения шага Tag. Пример применения шага «Тег» можно найти в демонстрации 1 демонстрационного видео об управляемых рабочих процессах AWS Transfer Family.
Настройте корзину S3, в которую Transfer Family записывает файлы, чтобы активировать Lambda с помощью уведомления о событии.
Используйте этот код Boto3 в Lambda. Он пометит файл принципалом, поместившим файл в S3. Если это Transfer Familiy, то это роль, которая была назначена Transfer Family для записи файлов в корзину. Если это пользователь, загружающий файлы через консоль, то это будет роль этого пользователя.
import boto3
import json
import urllib.parse
def lambda_handler(event, context):
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
principal = event['Records'][0]['userIdentity']['principalId']
try:
s3 = boto3.client('s3')
response = s3.put_object_tagging(
Bucket = bucket,
Key = key,
Tagging={
'TagSet': [
{
'Key': 'Principal',
'Value': str(principal)
},
]
}
)
except Exception as e:
print('Error {}.'.format(e))