バイナリ配信における技術の本質
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 関数に割り当てます。


