Я не уверен, понимаю ли я, чего вы здесь добиваетесь, но почему бы вам просто не подписать лямбда-функцию на корзину, где хранятся ваши файлы (подписать ее, поставить событие), делать любые проверки, какие вы хотитечтобы выполнить программно внутри этой лямбда-функции и, если все условия выполнены, просто вызвать упомянутую пошаговую функцию из лямбда-функции.
И если какое-либо условие не выполняется, просто не запускайте функцию шага.
Вот как вы можете подписать лямбда-функцию на событие S3 put (через веб-консоль).
- перейти на S3
- выбрать ваше ведро
- перейти к
Properties tab
- выбрать
Events
- проверить
PUT
событие - под
Send to
, выбрать Lambda Function
- выбрать существующийлямбда-функция (вам нужно создать эту лямбда-функцию)
Как получить доступ к таким свойствам, как имя сегмента, ключ объекта и метка времени события изнутри лямбда-функции. (с использованием Python)
def handler_name(event, context):
// get bucket name
print(event['Records'][0]['s3']['bucket']['name'])
// get object key
print(event['Records'][0]['s3']['object']['key'])
// get event timestamp
print(event['Records'][0]['eventTime'])
return 0
Вот полный event
объект (объект события S3) для справки.
{
"Records": [
{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "us-east-2",
"eventTime": "2019-09-03T19:37:27.192Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "AWS:AIDAINPONIXQXHT3IKHL2"
},
"requestParameters": {
"sourceIPAddress": "205.255.255.255"
},
"responseElements": {
"x-amz-request-id": "D82B88E5F771F645",
"x-amz-id-2": "vlR7PnpV2Ce81l0PRw6jlUpck7Jo5ZsQjryTjKlc5aLWGVHPZLj5NeC6qMa0emYBDXOo6QBU0Wo="
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "828aa6fc-f7b5-4305-8584-487c791949c1",
"bucket": {
"name": "lambda-artifacts-deafc19498e3f2df",
"ownerIdentity": {
"principalId": "A3I5XTEXAMAI3E"
},
"arn": "arn:aws:s3:::lambda-artifacts-deafc19498e3f2df"
},
"object": {
"key": "b21b84d653bb07b05b1e6b33684dc11b",
"size": 1305107,
"eTag": "b21b84d653bb07b05b1e6b33684dc11b",
"sequencer": "0C0F6F405D6ED209E1"
}
}
}
]
}
Как выполнить функцию шагаиз лямбда-функции (с использованием Python + Boto3)
import boto3
sfn_client = boto3.client('stepfunctions')
def handler_name(event, context):
response = sfn_client.start_execution(
stateMachineArn='string',
name='string',
input='string'
)
return 0
где stateMachineArn
- имя ресурса Amazon (ARN) конечного автомата для выполнения, name
(необязательно) - имявыполнение и input
- это строка, содержащая входные данные JSON для выполнения.