#!/bin/bash DIGITS_RE='^[0-9]+$' TEMPLATE_FILE_NAME='serverless.cfn.yml' PACKAGE_FILE_NAME='serverless-xfm.cfn.yml' STACK_NAME='StartupKitServerlessWorkload' JSON_CONTENT='{"todo_id": "1001", "active": true, "description": "What TODO next?"}' # Check if the aws cli is installed if ! command -v aws > /dev/null; then echo "aws cli was not found. Please install before running this script." exit 1 fi ACCOUNT_ID=`aws sts get-caller-identity --query 'Account' --output=text` REGION=`aws configure get region` BUCKET_NAME="${ACCOUNT_ID}-${REGION}-startup-kit-serverless-workload" # Check if the account id is valid if ! [[ ${ACCOUNT_ID} =~ ${DIGITS_RE} ]] ; then echo "Invalid account ID" >&2 exit 1 fi # Check if the bucket already exists BUCKETS_EXISTS=`aws s3 ls | grep ${BUCKET_NAME}` if [ ! -z "${BUCKETS_EXISTS}" -a "${BUCKETS_EXISTS}" != " " ]; then echo "Bucket ${BUCKET_NAME} already exists. You can remove it from the AWS S3 console" echo "https://console.aws.amazon.com/s3/home" exit 1 fi # Try to create the bucket if aws s3 mb s3://${BUCKET_NAME}; then echo "Bucket s3://${BUCKET_NAME} created successfully" else echo "Failed creating bucket s3://${BUCKET_NAME}" exit 1 fi # Try to create CloudFormation package if aws cloudformation package --template-file ${TEMPLATE_FILE_NAME} --output-template-file ${PACKAGE_FILE_NAME} --s3-bucket ${BUCKET_NAME}; then echo "CloudFormation successfully created the package ${PACKAGE_FILE_NAME}" else echo "Failed creating CloudFormation package" exit 1 fi # Try to deploy the package if aws cloudformation deploy --template-file ${PACKAGE_FILE_NAME} --stack-name ${STACK_NAME} --capabilities CAPABILITY_IAM; then echo "CloudFormation successfully deployed the serverless app package" else echo "Failed deploying CloudFormation package" exit 1 fi REST_API_ID=`aws cloudformation list-stack-resources --stack-name ${STACK_NAME} | grep -A2 'AWS::ApiGateway::RestApi' | grep 'PhysicalResourceId' | awk '{print $2}' | tr -d '"' | tr -d ","` REST_API_URL="https://${REST_API_ID}.execute-api.${REGION}.amazonaws.com/Stage" echo "The rest API url is ${REST_API_URL}" echo "You can try adding a new to do item by running the following command:" echo "curl -X POST -H 'Content-Type: application/json' -d '${JSON_CONTENT}' ${REST_API_URL}/todo/new" echo "" echo "To fetch the active TODO items you created, execute the following command:" echo "curl ${REST_API_URL}/todo/active"