Initial commit
This commit is contained in:
commit
86effe60a5
11 changed files with 218 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
**/build/**
|
19
1-business-open/index.js
Normal file
19
1-business-open/index.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
exports.index = function(event, context, callback) {
|
||||
if (isBusinessTime(new Date())) {
|
||||
callback(null, {
|
||||
statusCode: '200',
|
||||
body: JSON.stringify({ message: "It's time for business" }),
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
})
|
||||
} else {
|
||||
callback(null, {
|
||||
statusCode: '200',
|
||||
body: JSON.stringify({ message: "It's party time" }),
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function isBusinessTime(now) {
|
||||
return now.getDay() <= 4 && now.getHours() >= 9 && now.getHours() < 17
|
||||
}
|
28
2-business-open_shell/Makefile
Normal file
28
2-business-open_shell/Makefile
Normal file
|
@ -0,0 +1,28 @@
|
|||
bucket = "examples.atomaka.com" # your bucket that exists in us-east-2
|
||||
|
||||
# DO NOT EDIT BELOW HERE
|
||||
key = "business-hours.zip"
|
||||
yarnbin = $(shell yarn bin)
|
||||
|
||||
deploy: upload
|
||||
AWS_DEFAULT_REGION=us-east-2 aws lambda update-function-code \
|
||||
--function-name business-hours \
|
||||
--s3-bucket $(bucket) \
|
||||
--s3-key $(key)
|
||||
|
||||
upload: build
|
||||
AWS_DEFAULT_REGION=us-east-2 aws s3 cp \
|
||||
build/business-hours.zip s3://$(bucket)/$(key)
|
||||
|
||||
build: clean
|
||||
mkdir build/
|
||||
cp index.js build/
|
||||
cd build/ \
|
||||
&& zip -q -r $(key) . \
|
||||
&& cd ../
|
||||
|
||||
clean:
|
||||
rm -rf build/
|
||||
|
||||
setup: build
|
||||
bash setup.sh
|
19
2-business-open_shell/index.js
Normal file
19
2-business-open_shell/index.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
exports.index = function(event, context, callback) {
|
||||
if (isBusinessTime(new Date())) {
|
||||
callback(null, {
|
||||
statusCode: '200',
|
||||
body: JSON.stringify({ message: "It's time for business" }),
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
})
|
||||
} else {
|
||||
callback(null, {
|
||||
statusCode: '200',
|
||||
body: JSON.stringify({ message: "It's party time" }),
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function isBusinessTime(now) {
|
||||
return now.getDay() <= 4 && now.getHours() >= 9 && now.getHours() < 17
|
||||
}
|
14
2-business-open_shell/resources/log-policy.json
Normal file
14
2-business-open_shell/resources/log-policy.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Sid": "",
|
||||
"Effect": "Allow",
|
||||
"Principal": {
|
||||
"Service": "apigateway.amazonaws.com"
|
||||
},
|
||||
"Action": "sts:AssumeRole"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
8
2-business-open_shell/resources/role-policy.json
Normal file
8
2-business-open_shell/resources/role-policy.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": {
|
||||
"Effect": "Allow",
|
||||
"Principal": {"Service": "lambda.amazonaws.com"},
|
||||
"Action": "sts:AssumeRole"
|
||||
}
|
||||
}
|
72
2-business-open_shell/setup.sh
Normal file
72
2-business-open_shell/setup.sh
Normal file
|
@ -0,0 +1,72 @@
|
|||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
role=$(AWS_DEFAULT_REGION=us-east-2 aws iam create-role \
|
||||
--path /examples/ \
|
||||
--role-name business-hours-lambda \
|
||||
--assume-role-policy-document file://resources/role-policy.json \
|
||||
| jq '.Role.Arn' \
|
||||
| tr -d '"')
|
||||
AWS_DEFAULT_REGION=us-east-2 aws iam create-role \
|
||||
--path /examples/ \
|
||||
--role-name log-business-hours-lambda \
|
||||
--assume-role-policy-document file://resources/log-policy.json
|
||||
|
||||
echo sleeping 10
|
||||
sleep 10
|
||||
|
||||
lambda=$(AWS_DEFAULT_REGION=us-east-2 aws lambda create-function \
|
||||
--function-name business-hours \
|
||||
--runtime nodejs6.10 \
|
||||
--role $role \
|
||||
--handler index.index \
|
||||
--zip-file fileb://build/business-hours.zip \
|
||||
| jq '.FunctionArn' \
|
||||
| tr -d '"')
|
||||
|
||||
echo sleeping 5
|
||||
sleep 5
|
||||
|
||||
api=$(aws apigateway create-rest-api \
|
||||
--name 'Shell Business Hours' \
|
||||
--region us-east-2 \
|
||||
| jq '.id' \
|
||||
| tr -d '"')
|
||||
|
||||
echo sleeping 5
|
||||
sleep 5
|
||||
|
||||
resource=$(aws apigateway get-resources \
|
||||
--rest-api-id $api \
|
||||
--region us-east-2 \
|
||||
| jq '.items[0].id' \
|
||||
| tr -d '"')
|
||||
|
||||
echo sleeping 5
|
||||
sleep 5
|
||||
|
||||
aws apigateway put-method \
|
||||
--rest-api-id $api \
|
||||
--resource-id $resource \
|
||||
--http-method GET \
|
||||
--authorization-type "NONE" \
|
||||
--region us-east-2
|
||||
|
||||
echo sleeping 5
|
||||
sleep 5
|
||||
|
||||
aws apigateway put-integration \
|
||||
--rest-api-id $api \
|
||||
--resource-id $resource \
|
||||
--http-method GET \
|
||||
--type AWS \
|
||||
--integration-http-method GET \
|
||||
--uri arn:aws:apigateway:us-east-2:lambda:path/2015-03-31/functions/$lambda/invocations
|
||||
|
||||
echo sleeping 5
|
||||
sleep 5
|
||||
|
||||
api=l271anov3c
|
||||
aws apigateway create-deployment \
|
||||
--rest-api-id $api \
|
||||
--stage-name prod
|
6
3-business-open-serverless/.gitignore
vendored
Normal file
6
3-business-open-serverless/.gitignore
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
# package directories
|
||||
node_modules
|
||||
jspm_packages
|
||||
|
||||
# Serverless directories
|
||||
.serverless
|
20
3-business-open-serverless/handler.js
Normal file
20
3-business-open-serverless/handler.js
Normal file
|
@ -0,0 +1,20 @@
|
|||
exports.index = function(event, context, callback) {
|
||||
if (isBusinessTime(new Date())) {
|
||||
callback(null, {
|
||||
statusCode: '200',
|
||||
body: JSON.stringify({ message: "It's time for business" }),
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
})
|
||||
} else {
|
||||
callback(null, {
|
||||
statusCode: '200',
|
||||
body: JSON.stringify({ message: "It's party time" }),
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function isBusinessTime(now) {
|
||||
return now.getDay() < 4 && now.getHours() >= 9 && now.getHours() < 17
|
||||
}
|
||||
|
13
3-business-open-serverless/serverless.yml
Normal file
13
3-business-open-serverless/serverless.yml
Normal file
|
@ -0,0 +1,13 @@
|
|||
service: aws-nodejs # NOTE: update this with your service name
|
||||
|
||||
provider:
|
||||
name: aws
|
||||
runtime: nodejs6.10
|
||||
|
||||
functions:
|
||||
hello:
|
||||
handler: handler.index
|
||||
events:
|
||||
- http:
|
||||
path: /
|
||||
method: get
|
18
README.md
Normal file
18
README.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Serverless Framework Examples
|
||||
|
||||
Examples from talk given at the Lansing DevOps Meetup Group
|
||||
|
||||
## 1-business-open
|
||||
|
||||
DIY lambda function used in manually creating the API gateway stuff
|
||||
|
||||
## 2-business-open-shell
|
||||
|
||||
Attempt to create a shell maintained. May not be 100% complete. Shows that
|
||||
creating these commands via CLI can be complex. Furthermore, this is not a
|
||||
deterministic execution.
|
||||
|
||||
## 3-business-open-serverless
|
||||
|
||||
Uses the serverless framework to minimize our efforts and knowledge while
|
||||
getting the exact same output.
|
Loading…
Reference in a new issue