AWS Lambda Function URLでバイナリファイルを確実に返却する

バイナリ配信における技術の本質

AWS Lambda Function URL経由で画像やPDFなどのバイナリデータを配信する場合、単にデータを返すだけではブラウザでのレンダリングに失敗する。Lambdaのレスポンス構造で制御フラグを適切に設定しなければ、データは破損した状態でクライアントへ届く。

Function URLを採用するメリット

API Gatewayを介さない構成により、以下の最適化が可能だ。

  • コストの大幅削減:API Gatewayの料金が発生しないため、低コストで構築可能だ。
  • レイテンシの改善:ゲートウェイを通らないためオーバーヘッドが最小限に抑えられる。
  • 高パフォーマンス:実際の運用現場では、小〜中規模のファイル配信において、この構成が最速のレスポンスを実現する。

ポイント

筆者の経験上、最も多くのエンジニアが躓くのはレスポンス構造の定義だ。特に以下の2点を徹底する必要がある。

  • isBase64Encodedの明示:このプロパティを省略するとバイナリとして正しく解釈されない。
  • Base64エンコードの必須化:AWSランタイムがバイナリ変換を誤解しないよう、明示的にBase64変換を行う。
import base64

def lambda_handler(event, context):
    with open('image.png', 'rb') as f:
        binary_data = f.read()

    return {
        'statusCode': 200,
        'headers': {
            'Content-Type': 'image/png'
        },
        'body': base64.b64encode(binary_data).decode('utf-8'),
        'isBase64Encoded': True
    }

まとめ

Lambda Function URLでバイナリを返却する際は、Base64エンコードisBase64Encoded: Trueのセットが鉄則である。この構成を守るだけで、ブラウザ側でのデコードエラーは完全に解消される。

Lambda 関数 URL の作成と管理 - AWS Lambda
Lambda 関数の URL を設定して、他の AWS のサービスとの統合を必要とせずに、HTTP エンドポイントを Lambda 関数に割り当てます。
タイトルとURLをコピーしました