使用 API Gateway API 存取 Lambda 中的二進位檔案 - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 API Gateway API 存取 Lambda 中的二進位檔案

下列 OpenAPI 範例示範如何 AWS Lambda 透過 API Gateway API 存取 中的二進位檔案。此 API 會公開用於下載及上傳指定影像檔的 GET /lambda?key= { file-name} PUT /lambda?key= { file-name} 方法。 GET 方法會在「200 OK」回應中,將 Base64 編碼字串格式的影像檔當作 JSON 輸出的一部分傳回,後面接著所提供的映射範本。 PUT 方法接受原始二進位 Blob 作為輸入,並傳回「200 OK」回應與空的承載。

您建立 API 呼叫的 Lambda 函數,而該函數必須傳回具有 application/json Content-Type 標頭的 base64 編碼字串。

存取 Lambda 中影像之範例 API 的 OpenAPI 檔案

下列 OpenAPI 檔案顯示一個範例 API,說明如何從 Lambda 下載影像檔,以及如何將影像檔上傳至 Lambda。

OpenAPI 3.0
"openapi": "3.0.0", "info": { "version": "2016-10-21T17:26:28Z", "title": "ApiName" "paths": { "/lambda": { "get": { "parameters": [ "name": "key", "in": "query", "required": false, "schema": { "type": "string" "responses": { "200": { "description": "200 response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Empty" "500": { "description": "500 response" "x-amazon-apigateway-integration": { "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:image/invocations", "type": "AWS", "credentials": "arn:aws:iam::123456789012:role/Lambda", "httpMethod": "POST", "requestTemplates": { "application/json": " { \n \"imageKey\": \"$input.params('key')\"\n}" "responses": { "default": { "statusCode": "500" "2\\d { 2}": { "statusCode": "200", "responseTemplates": { "application/json": " { \n \"image\": \"$input.body\"\n}" "put": { "parameters": [ "name": "key", "in": "query", "required": false, "schema": { "type": "string" "responses": { "200": { "description": "200 response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Empty" "application/octet-stream": { "schema": { "$ref": "#/components/schemas/Empty" "500": { "description": "500 response" "x-amazon-apigateway-integration": { "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:image/invocations", "type": "AWS", "credentials": "arn:aws:iam::123456789012:role/Lambda", "httpMethod": "POST", "contentHandling": "CONVERT_TO_TEXT", "requestTemplates": { "application/json": " { \n \"imageKey\": \"$input.params('key')\", \"image\": \"$input.body\"\n}" "responses": { "default": { "statusCode": "500" "2\\d { 2}": { "statusCode": "200" "x-amazon-apigateway-binary-media-types": [ "application/octet-stream", "image/jpeg" "servers": [ "url": "https://abcdefghi.execute-api.us-east-1.amazonaws.com/ { basePath}", "variables": { "basePath": { "default": "/v1" "components": { "schemas": { "Empty": { "type": "object", "title": "Empty Schema"
OpenAPI 2.0
"swagger": "2.0", "info": { "version": "2016-10-21T17:26:28Z", "title": "ApiName" "host": "abcdefghi.execute-api.us-east-1.amazonaws.com", "basePath": "/v1", "schemes": [ "https" "paths": { "/lambda": { "get": { "produces": [ "application/json" "parameters": [ "name": "key", "in": "query", "required": false, "type": "string" "responses": { "200": { "description": "200 response", "schema": { "$ref": "#/definitions/Empty" "500": { "description": "500 response" "x-amazon-apigateway-integration": { "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:image/invocations", "type": "AWS", "credentials": "arn:aws:iam::123456789012:role/Lambda", "httpMethod": "POST", "requestTemplates": { "application/json": " { \n \"imageKey\": \"$input.params('key')\"\n}" "responses": { "default": { "statusCode": "500" "2\\d { 2}": { "statusCode": "200", "responseTemplates": { "application/json": " { \n \"image\": \"$input.body\"\n}" "put": { "produces": [ "application/json", "application/octet-stream" "parameters": [ "name": "key", "in": "query", "required": false, "type": "string" "responses": { "200": { "description": "200 response", "schema": { "$ref": "#/definitions/Empty" "500": { "description": "500 response" "x-amazon-apigateway-integration": { "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:image/invocations", "type": "AWS", "credentials": "arn:aws:iam::123456789012:role/Lambda", "httpMethod": "POST", "contentHandling" : "CONVERT_TO_TEXT", "requestTemplates": { "application/json": " { \n \"imageKey\": \"$input.params('key')\", \"image\": \"$input.body\"\n}" "responses": { "default": { "statusCode": "500" "2\\d { 2}": { "statusCode": "200" "x-amazon-apigateway-binary-media-types" : ["application/octet-stream", "image/jpeg"], "definitions": { "Empty": { "type": "object", "title": "Empty Schema"

從 Lambda 下載影像

從 Lambda 下載二進位 Blob 格式的影像檔 ( image.jpg ):

GET /v1/lambda?key=image.jpg HTTP/1.1 Host: abcdefghi.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/octet-stream

成功回應如下所示:

200 OK HTTP/1.1 [raw bytes]

從 Lambda 下載 Base64 編碼字串格式的影像檔 (image.jpg) 並格式化為 JSON 屬性:

GET /v1/lambda?key=image.jpg HTTP/1.1 Host: abcdefghi.execute-api.us-east-1.amazonaws.com Content-Type: application/json Accept: application/json

成功回應如下所示:

200 OK HTTP/1.1 "image": "W3JhdyBieXRlc10="

將影像上傳至 Lambda

將二進位 Blob 格式的影像檔 (image.jpg) 上傳至 Lambda:

PUT /v1/lambda?key=image.jpg HTTP/1.1 Host: abcdefghi.execute-api.us-east-1.amazonaws.com Content-Type: application/octet-stream Accept: application/json [raw bytes]

成功回應如下所示:

200 OK

將 Base64 編碼字串格式的影像檔 (image.jpg) 上傳至 Lambda:

PUT /v1/lambda?key=image.jpg HTTP/1.1 Host: abcdefghi.execute-api.us-east-1.amazonaws.com Content-Type: application/json