Instantly deploy REST APIs on AWS API Gateway with very simple configuration using Serverless Components.
$ npm install -g @serverless/components
Just create a serverless.yml
file
$ touch serverless.yml
$ touch .env # your development AWS api keys
$ touch .env.prod # your production AWS api keys
the .env
files are not required if you have the aws keys set globally and you want to use a single stage, but they should look like this.
AWS_ACCESS_KEY_ID=XXX
AWS_SECRET_ACCESS_KEY=XXX
# serverless.yml
name: my-api
myLambda:
component: "@serverless/aws-lambda"
inputs:
name: ${name}-lambda
code: ./code
handler: index.handler
myApiGateway:
component: "@serverless/aws-api-gateway"
inputs:
name: ${name}-gateway
routes:
/foo:
get:
function: ${comp:myLambda.arn} # pass in the arn output property from the lambda component
cors: true
api (master)$ components
myLambda › outputs:
name: 'my-api-lambda'
description: 'AWS Lambda Component'
memory: 512
timeout: 10
code: './code'
bucket: undefined
shims: []
handler: 'index.handler'
runtime: 'nodejs8.10'
env:
role:
name: 'my-api-lambda'
arn: 'arn:aws:iam::552760238299:role/my-api-lambda'
service: 'lambda.amazonaws.com'
policy: { arn: 'arn:aws:iam::aws:policy/AdministratorAccess' }
arn: 'arn:aws:lambda:us-east-1:552760238299:function:my-api-lambda'
myApiGateway › outputs:
name: 'my-api-gateway'
role:
name: 'my-api-gateway'
arn: 'arn:aws:iam::552760238299:role/my-api-gateway'
service: 'apigateway.amazonaws.com'
policy: { arn: 'arn:aws:iam::aws:policy/AdministratorAccess' }
routes:
/foo: { get:
{ function:
'arn:aws:lambda:us-east-1:552760238299:function:my-api-lambda',
cors: true } }
id: 'z2itxmsoud'
url: 'https://z2itxssoud.execute-api.us-east-1.amazonaws.com/dev/'
urls: [ 'https://z2itxssoud.execute-api.us-east-1.amazonaws.com/dev/foo' ]
7s › dev › my-api › done
api (master)$
Checkout the Serverless Components repo for more information.