A billing job should start when a partner uploads a CSV into an S3 bucket. A host lists that bucket every minute, sometimes processes the same object twice, and sometimes misses a quiet stretch. What should start the job instead?
Select an answer to reveal the explanation.
Short Explanation
You do not need someone walking the loading dock every minute to see that a box arrived. An S3 event notification on object creation starts the billing job when the CSV lands, which is the moment you care about. A timed list of the bucket is how the same object gets processed twice or a quiet stretch gets missed, and an inventory report is a later catalog rather than the arrival bell.
Full Explanation
S3 can emit an event notification when an object is created. That event is the signal to start the billing job, so the job runs because the CSV arrived and not because a host happened to list the bucket. Listing every minute is a poll. It can see the same object on two passes and it can sit idle between passes, which is the failure the team already has. Slowing the cron down makes the poll rarer. It does not tie the job to the upload. A CloudTrail trail records API activity. Writing a trail does not by itself invoke the billing job, and the trail is not the object-created notification. S3 Inventory is a scheduled catalog of the objects in the bucket. It arrives later and is not the event that means a new CSV just landed. Caveat: object-created notifications can be delivered more than once, so the job should be safe to run again for the same object key. Operational check: upload a small test CSV and confirm the job starts from that event without waiting for the next list. The listing host can be retired once that event starts the job reliably.