Hookway

Sqs — destinations/sqs

# examples/destinations/sqs.yaml
#
# Reference config for an AWS SQS destination, showing a standard queue.
# FIFO publish settings and body formats are shown in fifo-sqs.yaml.
# A .fifo target requires explicit publish.fifo identity settings.
# Credentials: omit access_key_id / secret_access_key to use the default
# AWS credential chain (IAM role, environment, ~/.aws). Set both to use
# static credentials, or set endpoint to http://localhost:4566 for LocalStack.

server:
  addr: ":8080"
  max_body_bytes: 1048576

destinations:
  jobs:
    type: sqs
    # How to handle an existing queue whose attributes differ from this config:
    #   reconcile (default): edit the queue's mutable attributes to match (needs sqs:SetQueueAttributes)
    #   warn: log the difference and use the existing queue unchanged
    #   error: fail startup on any difference
    # Immutable conflicts (FIFO vs standard) always fail startup regardless.
    on_existing_conflict: reconcile
    sqs:
      region: "us-east-1"
      # Uncomment to override the SQS endpoint, e.g. for LocalStack:
      # endpoint: "http://localhost:4566"   # or reference an env var you export
      # Omit both of the following to use the default AWS credential chain:
      # access_key_id: "AKIA..."
      # secret_access_key: "..."

flows:
  # Standard queue: FIFO identity settings are not needed.
  orders:
    nodes:
      - {id: in, type: http_trigger, path: /webhooks/orders, methods: [POST]}
      - {id: body, type: read_body, max_bytes: 1048576}
      - {id: auth, type: auth, scheme: hmac_sha256_ts_colon, secret: "${ORDERS_WEBHOOK_SECRET}", signature_header: X-Signature, timestamp_tolerance: "5m"}
      - {id: env, type: envelope, body_format: json}
      # Resource defaults use the destination config; this publishes the
      # default Hookway envelope.
      - {id: out, type: publish, destination: jobs, target: orders-jobs, create: true}
    edges: [in>body, body>auth, auth>env, env>out]

  notifications:
    nodes:
      - {id: in, type: http_trigger, path: /webhooks/notifications, methods: [POST]}
      - {id: body, type: read_body, max_bytes: 1048576}
      - {id: auth, type: auth, scheme: hmac_sha256_hex, secret: "${NOTIFY_WEBHOOK_SECRET}", signature_header: X-Hub-Signature-256}
      - {id: env, type: envelope, body_format: json}
      # Standard queues can use a delay and fair-queue grouping without FIFO.
      - id: out
        type: publish
        destination: jobs
        target: notification-jobs
        create: true
        sqs: {delay_seconds: 10}
        group_id: {source: static, value: sample-group}
        resource_attributes:
          VisibilityTimeout: "60"
          MessageRetentionPeriod: "86400"
          SqsManagedSseEnabled: "true"
    edges: [in>body, body>auth, auth>env, env>out]