Skip to content

Add Lambda-Runtime-Invocation-Id header support for cross-wiring protection #1155

Description

@vip-amzn

Summary

Lambda now sends a Lambda-Runtime-Invocation-Id header on /runtime/invocation/next responses. Runtimes should echo this header back on /runtime/invocation/{requestId}/response and /runtime/invocation/{requestId}/error to enable RAPID to detect and reject stale responses from timed-out invocations.

Problem

When an invoke times out, the runtime process continues running. If a new invoke arrives with the same requestId (customer-provided or retried by upstream), RAPID accepts it. The still-running old invocation eventually posts its response, and RAPID delivers the wrong response to the new invoke (cross-wiring).

This affects both On-Demand and Lambda Managed Instances (LMI), and Rust is a supported LMI runtime.

What needs to change

  1. Parse Lambda-Runtime-Invocation-Id from the /next response headers (optional — may be absent with older RAPID)
  2. Store it alongside the invocation context
  3. Echo it as a request header on /response and /error
  4. If the header is absent from /next, don't send it back (backward compat)

Backward Compatibility

  • Old RAPID (doesn't send the header) + New RIC (no header to echo) → no change ✅
  • New RAPID (sends the header) + Old RIC (doesn't echo) → RAPID skips validation ✅
  • New RAPID + New RIC → header echoed, RAPID validates match ✅

Reference Implementations

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions