AWS Stepfunction GET-запрос 404 для объекта, только что созданного методом POST
У меня есть webapp, в котором есть POST-запрос для создания объекта в БД. После этого сигнал post_save используется для запуска пошаговой функции AWS. Затем эта функция пытается выполнить GET для объекта, который был только что создан.
Каждый раз он кажется неудачным, и у меня чертовски много времени на отладку, поскольку я не могу просто использовать pdb для чего-то, что запускается только при развертывании на AWS. Может быть, я что-то упускаю? Почему я получаю это состояние гонки или возможную проблему согласованности? Какой лучший способ гарантировать, что GET найдет объект, который был создан POST?
Представление FileRequest содержит хук post_save, который запускает функцию AWS Step
from django.db import transaction
from django.db.models.signals import post_save
from core_api.models.file_request import FileRequest
import boto3
...
...
...
@receiver(post_save, sender=FileRequest, dispatch_uid="file_request_unique_id")
def _stepfunction_handler(sender: Type=FileRequest], instance:=FileRequest, created: bool, **kwargs) -> None:
arn = "blablabla"
file_id = instance.id
client = boto3.client("stepfunctions")
payload = {
"input": json.dumps(
{"input": {"file_request_id": file_id}}
),
"stateMachineArn": arn
}
def execute_sfn():
client.start_execution(**payload)
transaction.on_commit(execute_sfn) # I figured this would start the sfn only after the object is saved, but it does not seem to work.
Эта функция определенно выполняется после POST каждый раз. Трудно поделиться частью Step Function, потому что она огромна, но очень сокращенная версия будет такой:
def execute(self, input):
self._retrieve_data()
def _retrieve_data(self):
self._file_request = file_api.file_retrieve(file_id) #This calls OpenAPI autogenerated code
В ходе своего исследования я заметил, что post_save был устаревшим в Django REST Framework, но оказывается, что post_save есть и в обычном Django, который я использую здесь. Я не уверен, связаны ли эти два понятия, или мне следует избегать post_save здесь.