{
  "id": 12569694,
  "title": "DataSync EventBridge Automation Checklist for S3 Transfers",
  "url": "https://urgent.news/2026/10/07/datasync-eventbridge-automation-checklist-for-s3-transfers",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-10-07T07:02:34.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/oleksandr_kuryzhev_42873f/datasync-eventbridge-automation-checklist-for-s3-transfers-3lkc"
  },
  "original_language": "en",
  "account": "DataSync EventBridge automation can help ensure nightly S3 transfers from an on-premises NFS share run smoothly, even when tasks fail quietly without triggering any alarms. This checklist provides a step-by-step guide for engineers who already have a manually-run DataSync task and want to automate it using EventBridge.\n\nThe checklist covers three main parts: Trigger, Observe, and React. The Trigger part starts the task with either EventBridge Scheduler or an upstream event. The Observe part ensures that DataSync task execution state changes flow to EventBridge. The React part kicks off processing based on S3 object events or successful execution, and alerts someone in case of failures.\n\nTo set up the automation, first decide whether to use DataSync's built-in task schedule or EventBridge Scheduler. Running both simultaneously can cause overlapping executions that are difficult to explain later. A dedicated Scheduler role should be created with the minimum necessary permissions, such as datasync:StartTaskExecution on the specific task ARN. This role also needs sqs:SendMessage on a dead-letter queue if one is configured.\n\nEnable EventBridge delivery on the destination S3 bucket, and write a failure rule that matches DataSync task execution state changes ending in an error. Route these events to an SNS topic, chat webhook, or incident tool for notification. Write a success rule second, which can trigger post-processing jobs like validation or manifest creation. Scope S3 object rules by prefix, filtering on the bucket name and key prefix to avoid triggering the pipeline for unrelated uploads.\n\nTurn on CloudWatch Logs for the DataSync task and set the log level according to your needs. Basic level is usually sufficient for routine runs, while transfer-level detail costs more to store. Enable task reports to an S3 location if you need detailed information about what was transferred, skipped, or failed.\n\nHandle target failures explicitly by using a dead-letter queue and retry policy on a rule or schedule target. This helps catch events that could not be delivered due to throttling, missing permissions, or errors within your own code. Configure an on-failure destination or a function-level dead-letter queue for Lambda, which is the async invoker used by EventBridge.\n\nFinally, address common issues that often surface after the pipeline has been live for a while. One such issue is bucket notification overwrites. When enabling EventBridge delivery, it replaces the bucket's entire notification configuration. If the bucket already has Lambda or SQS notifications, sending only { EventBridgeConfiguration :{}} will remove them. Review the existing configuration before making changes and merge the configurations accordingly. Additionally, be cautious of infrastructure-as-code tools that may conflict over this setting, and separate input and output prefixes to prevent event loops.",
  "summary": "Originally published on kuryzhev.cloud A nightly copy from an on-premises NFS share into S3 works fine for weeks, then stops. Nobody notices until a downstream report is empty, because the task failed quietly and no alarm was wired to it. DataSync EventBridge automation exists to close that gap. It turns transfer state changes into events, and events into schedules, alerts, and follow-up jobs.…",
  "key_points": [
    "Use EventBridge Scheduler or upstream event to trigger DataSync task",
    "Observe task execution state changes to flow to EventBridge",
    "React to S3 object events or failures with alerts and post-processing"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}