Skip to content

Conversation

@sebsto
Copy link
Collaborator

@sebsto sebsto commented Nov 30, 2025

Overview

This PR reorganizes and enhances the streaming Lambda examples by splitting them into two distinct examples that demonstrate different invocation methods:

  1. Streaming+FunctionUrl - Streaming responses via Lambda Function URLs
  2. Streaming+APIGateway - Streaming responses via API Gateway REST API

Changes

🔄 Restructured Examples

  • Renamed: Examples/Streaming/Examples/Streaming+FunctionUrl/

    • Maintains the original streaming example using Lambda Function URLs
    • Updated documentation to clarify Function URL-specific configuration
    • Improved AWS credentials handling in curl examples
  • New: Examples/Streaming+APIGateway/

    • Comprehensive example demonstrating API Gateway REST API with response streaming
    • Complete SAM template with proper IAM roles and streaming configuration
    • Detailed documentation covering API Gateway-specific setup

📚 Documentation Improvements

Streaming+FunctionUrl

  • Clarified that this example uses Lambda Function URLs
  • Updated curl examples to use eval $(aws configure export-credentials --format env) for cleaner credential handling
  • Maintained all existing functionality and deployment instructions

Streaming+APIGateway (New)

  • 316-line comprehensive README covering:
    • Response streaming concepts and benefits
    • HTTP status code and header configuration
    • Streaming response body patterns
    • Local testing instructions
    • Complete SAM deployment guide with detailed template explanation
    • API Gateway-specific invocation with AWS Sigv4 authentication
    • Payload format documentation with example JSON
    • Security and reliability best practices
    • How API Gateway streaming works under the hood

🛠️ Technical Details

API Gateway Streaming Configuration

The new example demonstrates:

  • Special Lambda URI: /response-streaming-invocations endpoint
  • responseTransferMode: STREAM configuration
  • IAM role with both lambda:InvokeFunction and lambda:InvokeWithResponseStream permissions
  • Proper timeout configuration (60s) to accommodate streaming duration

SAM Template Features

- Lambda function with streaming support (arm64, provided.al2)
- API Gateway REST API with OpenAPI 3.0 definition
- IAM execution role for API Gateway to invoke Lambda with streaming
- Complete outputs for easy testing (API URL and Lambda ARN)

🔐 Security Enhancements

Both examples now include comprehensive security best practices:

  • API Gateway access logging
  • Throttling configuration
  • AWS WAF integration recommendations
  • Lambda concurrent execution limits
  • Environment variable encryption
  • Dead Letter Queue (DLQ) configuration
  • VPC configuration guidance

🧪 Testing

Both examples support:

  • Local testing: swift run with curl invocation on port 7000
  • AWS deployment: Complete SAM templates with deployment instructions
  • Authenticated invocation: AWS Sigv4 examples with proper credential handling

Benefits

  1. Clearer separation: Developers can now easily choose between Function URLs and API Gateway based on their use case
  2. Better documentation: Each example has tailored documentation for its specific invocation method
  3. Production-ready: Includes security best practices and proper IAM configuration
  4. Easier testing: Improved credential handling in curl examples

Breaking Changes

None - this is purely additive. The original streaming example is preserved as Streaming+FunctionUrl.

Testing Checklist

  • Local testing works for both examples
  • SAM deployment templates are valid
  • Documentation is comprehensive and accurate
  • Security best practices are documented
  • Curl examples work with proper authentication

Related Documentation

@sebsto sebsto added the 🆕 semver/minor Adds new public API. label Nov 30, 2025
@sebsto sebsto linked an issue Nov 30, 2025 that may be closed by this pull request
2 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🆕 semver/minor Adds new public API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add an example of streaming with API Gateway

1 participant