Skip to content

Latest commit

 

History

History
84 lines (59 loc) · 2.59 KB

lambda.md

File metadata and controls

84 lines (59 loc) · 2.59 KB

What you'll need

  • Kubernetes v1.8+ deployed somewhere. Minikube is a great way to get a cluster up quickly.
  • kubectl to interact with kubernetes.
  • glooctl to interact with gloo.
  • aws (the aws cli) to create resources on AWS.

Steps

  1. Create a lambda function:

     # download the zipped function from github
     wget https://github.com/solo-io/gloo/raw/master/docs/getting_started/aws/helloWorld.zip
    
     # get the ARN for the "lambda_basic_execution" role
     ROLE_ARN=$(aws iam get-role --role-name lambda_basic_execution --query Role.Arn --output text)
    
     # create the function    
     aws lambda create-function \
     --region us-east-1 \
     --function-name helloWorld \
     --zip-file fileb://helloWorld.zip \
     --handler helloWorld.handler \
     --runtime nodejs6.10 \
     --role $ROLE_ARN
    
  2. Install Gloo:

     glooctl install kube
    
  3. Create a kubernetes secret with your AWS credentials:

     glooctl secret create aws --name aws-lambda-us-east-1  
    
  4. Create an upstream for your AWS Account (for the us-east-1 region)

     cat <<EOF | glooctl upstream create -f -
     name: aws-lambda-us-east-1
     type: aws
     spec:
       region: us-east-1
       secret_ref: aws-lambda-us-east-1
     EOF
    
  5. Verify that the upstream was created and the function was auto-discovered

     glooctl upstream get aws-lambda-us-east-1 -o yaml
    
     functions:
     - name: helloWorld:$LATEST
       spec:
         function_name: helloWorld
         qualifier: ""
     metadata:
       namespace: gloo-system
       resource_version: "5540"
     name: aws-lambda-us-east-1
     spec:
       region: us-east-1
       secret_ref: aws-lambda-us-east-1
     status:
       state: Accepted
     type: aws
    
  6. Create a route to the function

     glooctl route create --sort \
        --upstream aws-lambda-us-east-1 \
        --function 'helloWorld:$LATEST' \
        --path-exact /hello 
    
  7. Get the url of the ingress.
    If you installed kubernetes using minikube, you can use this command:

     export GATEWAY_URL=http://$(minikube ip):$(kubectl get svc ingress -n gloo-system -o 'jsonpath={.spec.ports[?(@.name=="http")].nodePort}')
    
  8. Try out the route using curl:

    curl $GATEWAY_URL/hello
    
    {"statusCode":200,"body":"AWS Lambda, brought to you by Gloo."}