- Node.js (version 8 is best at the moment)
- npm which comes with Node.js
- yarn
The approach implemented in this service is useful when you want to use Amazon API Gateway and you want to solve the 10MB payload limit.
The service is based on the serverless framework. The service is uploading objects to a specific S3 bucket using a pre-signed URL. Implemented in node.js runtime using getSignedUrl method.
The package is targeting the latest runtime of AWS Lambda. (8.10)
If you prefer to use a different region or stage, change these:
$ export AWS_STAGE=
$ export AWS_REGION=
Defaults are dev
and eu-central-1
.
Change name of upload bucket:
bucketName: testBucket
The file you want to upload is signed via x-amz-meta-filekey
header.
Get dependencies with yarn
or npm install
. The following examples will assume the usage of yarn
.
Issue a GET
request to get the signed URL:
curl --request GET \
--url https://{serviceID}.execute-api.{region}.amazonaws.com/dev/upload \
--header 'x-amz-meta-filekey: the-road-to-graphql.pdf'
If your bucket is called foo
, and you upload the-road-to-graphql
, after receiving the signed URL, issue a PUT
request with the information you have signed:
curl --request PUT \
--url 'https://foo.s3.eu-central-1.amazonaws.com/the-road-to-graphql.pdf?X-Amz-SignedHeaders=host&X-Amz-Signature=the-signature&X-Amz-Security-Token=the-token&X-Amz-Expires=30&X-Amz-Date=20181210T113015Z&X-Amz-Credential=something10%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Algorithm=AWS4-HMAC-SHA256' \
--data 'somemething-awesome'
Here's a short list of possible integrations I found making a quick Google search:
Starting a local dev server and its endpoint for receiving uploads:
$ yarn start
Starting the linter tasks:
$ yarn lint
Run the following the fire the deployment:
$ yarn deploy