Dirty little demo application for AWS integration
JavaScript PHP Shell
Switch branches/tags
Nothing to show
Pull request Compare This branch is 2 commits behind rowan-m:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



This is a dirty, little Silex application to demonstrate integration with the AWS PHP SDK.

There is currently no deployed version while I update things for Sunshine PHP.

The accompanying presentation that went with this code, followed these commands:

# Into home directory and talk directory
cd ground-up
rm awesome-presentation.pdf

# Who am I?
finger rowan

# Create a basic app to test
mkdir asciigram
cd asciigram

# Drop in the standard Composer file for Silex
vim composer.json
curl -s http://getcomposer.org/installer | php
./composer.phar install

# Make the root
mkdir web
vim web/humans.txt
vim web/info.php
vim web/.htaccess
vim web/index.php

tree -L 2
# Test the application
php -S localhost:8080 -t web

# Split the terminal and test
curl -v http://localhost:8080/hello && echo

# Commit the code so far
vim .gitignore
git init
git add .
git commit -m "Initial commit with base Silex application"

cd ..

# Elastic Beanstalk
# Get the AWS Elastic Beanstalk command line tools
# http://aws.amazon.com/code/6752709412171743
# wget https://s3.amazonaws.com/elasticbeanstalk/cli/elasticbeanstalk-cli.zip
wget \
unzip elasticbeanstalk-cli.zip

# Add the tools to the path
export PATH=$PATH:`pwd`/AWS-ElasticBeanstalk-CLI-2.1/eb/linux/python2.7

# test path
eb --help

# Set up access for our developer
column -s, -t iam-login.credentials.csv
column -s, -t iam-access.credentials.csv

cat aws.credentials
chmod 0600 aws.credentials
export AWS_CREDENTIAL_FILE=`pwd`/aws.credentials

cd asciigram

eb init

ls .elasticbeanstalk
cat .elasticbeanstalk/config

eb start

curl -s http://asciigram-dev-32mhrjbris.elasticbeanstalk.com | head -n 30

ls .elasticbeanstalk/
vim .elasticbeanstalk/optionsettings
git status
git diff
git add .gitignore
git commit -m "Initial EB integration"

eb updates

git aws.push

eb status

curl -v http://asciigram-dev-32mhrjbris.elasticbeanstalk.com
curl -v http://asciigram-dev-32mhrjbris.elasticbeanstalk.com/humans.txt

eb delete

cd ..

export PATH=$PATH:`pwd`/AWS-ElasticBeanstalk-CLI-2.1/api/bin


# Create an application
elastic-beanstalk-create-application --help
elastic-beanstalk-create-application -a asciigram \
    -d "Example application for Elastic Beanstalk testing"

# Create the application version
# Can also auto-create the app but thought we'd be specific
elastic-beanstalk-create-application-version --help
elastic-beanstalk-create-application-version \
    -a asciigram \
    -d "Initial development version" \
    -l v-dev-001

# Create an environment and launch it
elastic-beanstalk-create-environment --help
elastic-beanstalk-create-environment \
    -e ascii-dev -a asciigram  -l v-dev-001 \
    -d "Development environment" \
    -s "64bit Amazon Linux running PHP 5.3"

# Sit back and wait for it to launch
elastic-beanstalk-describe-environments -e ascii-dev
elastic-beanstalk-describe-environments -j | python -mjson.tool
elastic-beanstalk-describe-environments -j \
    | python -mjson.tool | grep Status

elastic-beanstalk-describe-environments -j \
    | python -mjson.tool | grep Health

# Set the document root
# First grab the options and search for document_root
elastic-beanstalk-describe-configuration-settings \
    -a asciigram -e ascii-dev -j | python -mjson.tool | less
# Copy into a file and edit
vim config.document_root.json

# Send the configuration back to the environment
elastic-beanstalk-update-environment --help
elastic-beanstalk-update-environment \
    -e ascii-dev -l v-dev-001 -f config.document_root.json
elastic-beanstalk-describe-configuration-settings \
    -a asciigram -e ascii-dev -j \
    | python -mjson.tool | grep -C2 document_root

# Time for some more AWS tools
sudo apt-get install s3cmd
s3cmd --configure

# List versions
s3cmd -ls

zip -r ../v`date +%Y%m%d%H%M%S`.zip vendor web \
    -x \*/.git\* \*/Tests\*

s3cmd ls s3://elasticbeanstalk-us-east-1-837326383672

zip -r ../v`date +%Y%m%d%H%M%S`.zip vendor web

cd ..

s3cmd put v*.zip s3://elasticbeanstalk-us-east-1-837326383672

# Upload the new manual version
elastic-beanstalk-create-application-version \
    -a asciigram -d 'Version from Zip file' \
    -l v20120912113006 \
    -s elasticbeanstalk-us-east-1-837326383672/v20120912113006.zip

elastic-beanstalk-update-environment \
    -e ascii-dev -l v20120912113006

curl -v http://ascii-dev-vfnuwuvfjh.elasticbeanstalk.com

# Quickly wrap that up with a script
vim aws-deploy.sh

# Let's quickly drop in some stuff from https://github.com/qpleple/silex-bootstrap and https://github.com/lyrixx/Silex-Kitchen-Edition
cd asciigram
# Time to integrate the AWS SDK
# Using a fork from https://github.com/rcambien/aws-sdk-for-php for Composer support
# https://github.com/amazonwebservices/aws-sdk-for-php/pull/29
# The SDK also has weird ideas about where it stores the config, so Composer lets us avoid that
vim composer.json
./composer.phar update

# Take a look at what's in there
ls vendor/amazonwebservices/aws-sdk-for-php/services/

# However, we still need to pass that config to the classes, so we'll store it on the app
vim src/config.php

tree -L 2 src

# Bootstrap our own namespace
vim src/bootstrap.php

vim src/app.php

google-chrome --incognito --app \
    http://ascii-dev-vfnuwuvfjh.elasticbeanstalk.com/upload \
    > /dev/null 2>&1

vim src/Asciigram/ImageUploader.php
vim src/Asciigram/S3Service.php
vim src/Asciigram/ImageUploader.php
vim src/Asciigram/SNSService.php
vim src/app.php
vim src/Asciigram/ImageTransformer.php
vim src/Asciigram/SNSService.php
vim src/Asciigram/ImageTransformer.php
vim src/Asciigram/S3Service.php

google-chrome --incognito --app \
    http://ascii-dev-vfnuwuvfjh.elasticbeanstalk.com/ \
    > /dev/null 2>&1