amazon web services for php developers

53
Amazon Web Services for PHP Developers

Upload: jeremy-lindblom

Post on 10-May-2015

1.551 views

Category:

Technology


0 download

DESCRIPTION

Amazon Web Services and the AWS SDK for PHP continue to put more power into the hands of PHP developers to build robust and scalable web applications. With version 2 of the SDK, developers now have an even more powerful library for interacting with AWS built on top of existing open source software like the Guzzle HTTP framework and the Symfony 2 Event Dispatcher. In this session you will learn about Amazon Web Services, how to use the AWS SDK for PHP, and how you can easily deploy and scale your applications to the cloud with AWS services, including AWS Elastic Beanstalk.

TRANSCRIPT

Page 1: Amazon Web Services for PHP Developers

Amazon Web Services for PHP Developers

Page 2: Amazon Web Services for PHP Developers

Oh Hai! I'm Jeremy Lindblom! •  I work on the AWS SDK for PHP at

•  Co-organizer of the Seattle PHP Meetup Group

•  B.S. in Computer Science from

•  @jeremeamia on

•  I like to make funny faces

Page 3: Amazon Web Services for PHP Developers

What is "The Cloud"?

Page 4: Amazon Web Services for PHP Developers

Cloud computing is the acquisition and use of computing resources that are delivered as a service on an as-needed basis.

Page 5: Amazon Web Services for PHP Developers

"The Cloud"

•  Evolution of distributed computing and Service-oriented Architecture (SOA).

•  Benefits – No upfront investment – Low ongoing cost – Flexible capacity – Speed & agility – Apps not ops – Global reach

( http://aws.amazon.com/what-is-cloud-computing/ )

Page 6: Amazon Web Services for PHP Developers
Page 7: Amazon Web Services for PHP Developers

Bringing you the “The Cloud” since 2006.

Page 8: Amazon Web Services for PHP Developers

Amazon Web Services offers a complete set of infrastructure and application services that enable you to run virtually everything in the cloud: from enterprise applications and big data projects to social games and mobile apps.

( http://aws.amazon.com )

Page 9: Amazon Web Services for PHP Developers

Amazon CloudFormation Amazon CloudFront Amazon CloudSearch Amazon CloudWatch Amazon Direct Connect Amazon DynamoDB Amazon EBS Amazon EC2 Amazon ElastiCache Amazon Elastic Transcoder Amazon EMR Amazon Glacier Amazon IAM Amazon Mechanical Turk Amazon RDS Amazon Redshift Amazon Route53

Amazon S3 Amazon SES Amazon SimpleDB Amazon SNS Amazon SQS Amazon SWF Amazon VPC AWS CloudHSM AWS Data Pipeline AWS Elastic Beanstalk AWS Import/Export AWS Marketplace AWS OpsWorks AWS Storage Gateway AWS Support Auto Scaling Elastic Load Balancing

Page 10: Amazon Web Services for PHP Developers

Amazon CloudFormation Amazon CloudFront Amazon CloudSearch Amazon CloudWatch Amazon Direct Connect Amazon DynamoDB Amazon EBS Amazon EC2 Amazon ElastiCache Amazon Elastic Transcoder Amazon EMR Amazon Glacier Amazon IAM Amazon Mechanical Turk Amazon RDS Amazon Redshift Amazon Route53

Amazon S3 Amazon SES Amazon SimpleDB Amazon SNS Amazon SQS Amazon SWF Amazon VPC AWS CloudHSM AWS Data Pipeline AWS Elastic Beanstalk AWS Import/Export AWS Marketplace AWS OpsWorks AWS Storage Gateway AWS Support Auto Scaling Elastic Load Balancing

Page 11: Amazon Web Services for PHP Developers

Amazon CloudFormation Amazon CloudFront Amazon CloudSearch Amazon CloudWatch Amazon Direct Connect Amazon DynamoDB Amazon EBS Amazon EC2 Amazon ElastiCache Amazon Elastic Transcoder Amazon EMR Amazon Glacier Amazon IAM Amazon Mechanical Turk Amazon RDS Amazon Redshift Amazon Route53

Amazon S3 Amazon SES Amazon SimpleDB Amazon SNS Amazon SQS Amazon SWF Amazon VPC AWS CloudHSM AWS Data Pipeline AWS Elastic Beanstalk AWS Import/Export AWS Marketplace AWS OpsWorks AWS Storage Gateway AWS Support Auto Scaling Elastic Load Balancing

NEW!

Page 12: Amazon Web Services for PHP Developers

Amazon CloudFormation Amazon CloudFront Amazon CloudSearch Amazon CloudWatch Amazon Direct Connect Amazon DynamoDB Amazon EBS Amazon EC2 Amazon ElastiCache Amazon Elastic Transcoder Amazon EMR Amazon Glacier Amazon IAM Amazon Mechanical Turk Amazon RDS Amazon Redshift Amazon Route53

Amazon S3 Amazon SES Amazon SimpleDB Amazon SNS Amazon SQS Amazon SWF Amazon VPC AWS CloudHSM AWS Data Pipeline AWS Elastic Beanstalk AWS Import/Export AWS Marketplace AWS OpsWorks AWS Storage Gateway AWS Support Auto Scaling Elastic Load Balancing

Compute & Networking

Storage & Content Delivery

Databases

Application Services

Deployment & Management

Page 13: Amazon Web Services for PHP Developers

Customers in 190 Countries

Page 14: Amazon Web Services for PHP Developers

Customers in 190 Countries 37 Signals Airbnb Engine Yard Etsy Flipboard Foursquare Hoot Suite IMDb Outback Steakhouse

PBS Pinterest Reddit Samsung Sega Shazam Spotify Ticketmaster Yelp

Page 15: Amazon Web Services for PHP Developers

How do I use AWS?

Page 16: Amazon Web Services for PHP Developers

AWS Console

Page 17: Amazon Web Services for PHP Developers

AWS SDKs and Tools

PHP • Java • Python • .NET

Ruby • Node.js • iOS • Android

SDKs

Unified CLI • Visual Studio Plugin

Eclipse Plugin • PowerShell Tools

Tools

Page 18: Amazon Web Services for PHP Developers

General SDK Features

•  Suite of HTTP clients

•  Input and output serialization

•  Protocol normalization

•  Authentication

•  Error handling

•  Language-specific conveniences

•  Open source

Page 19: Amazon Web Services for PHP Developers

The AWS SDK for PHP

http://github.com/aws/aws-sdk-php

Page 20: Amazon Web Services for PHP Developers

Quick History

•  Tarzan (Started by @skyzyx)

•  CloudFusion

•  AWS SDK for PHP [2010]

•  AWS SDK for PHP 2 [Late 2012]

Page 21: Amazon Web Services for PHP Developers

AWS SDK for PHP Features

•  PHP 5.3+, PSR compliant

•  Persistent connections, parallel requests

•  Event hooks, plugins, and wire logging

•  Simple array-style inputs and outputs

•  Iterators, waiters, and batching helpers

•  Higher-level abstractions

Page 22: Amazon Web Services for PHP Developers

require  'vendor/autoload.php';  use  Aws\S3\S3Client;    $s3  =  S3Client::factory(array(        'key'        =>  'your-­‐aws-­‐access-­‐key-­‐id',      'secret'  =>  'your-­‐aws-­‐secret-­‐key',  ));    $result  =  $s3-­‐>putObject(array(      'Bucket'  =>  'my-­‐cool-­‐photos',      'Key'        =>  'photo.jpg',      'Body'      =>  fopen('./photo.jpg',  'r')  ));  

Page 23: Amazon Web Services for PHP Developers

Built on Guzzle

•  Popular HTTP Library – Goutte – AWS SDK for PHP J – Drupal 8

•  Foundation of the SDK

•  Symfony2 Events

•  http://guzzlephp.org

Page 24: Amazon Web Services for PHP Developers

Installing the PHP SDK

•  Composer

•  PEAR

•  Downloadable Phar

•  RPM/yum (on Amazon Linux)

Page 25: Amazon Web Services for PHP Developers

Composer

•  Dependency management

•  Autoloader for project

•  http://getcomposer.org

Page 26: Amazon Web Services for PHP Developers

Installing via Composer

In your composer.json file:  {      "require":  {          "aws/aws-­‐sdk-­‐php":  "2.*"      }  }  

On the command line. php  composer.phar  install  

Page 27: Amazon Web Services for PHP Developers

Concepts in the SDK

•  Commands

•  Modeled Results

•  Iterators

•  Waiters

•  Events & Plugins

•  High-level Abstractions

Page 28: Amazon Web Services for PHP Developers

Commands

•  Encapsulates an operation to AWS

•  Contains Request and Response objects

•  Allows you set and get parameters

•  Returns modeled results

Page 29: Amazon Web Services for PHP Developers

Commands - Shorthand

$result  =  $s3-­‐>listObjects(array(      'Bucket'  =>  'my-­‐bucket-­‐name'  ));    echo  $result['Objects'][0]['Key'];  

Page 30: Amazon Web Services for PHP Developers

$command  =  $s3-­‐>getCommand('ListObjects');  $command-­‐>set('Bucket',  'my-­‐bucket-­‐name');    $result  =  $command-­‐>getResult();  echo  $result['Contents'][0]['Key'];    $response  =  $command-­‐>getResponse();  echo  $response-­‐>getStatusCode();  echo  $response-­‐>getHeader('Content-­‐Length');    

The Command Object

Page 31: Amazon Web Services for PHP Developers

$c1  =  $s3-­‐>getCommand('PutObject',  array(      'Bucket'  =>  'my-­‐bucket-­‐name',      'Key'        =>  'my-­‐first-­‐key',      'Body'      =>  fopen('path/to/file1',  'r')  ));  $c2  =  $s3-­‐>getCommand('PutObject',  array(      'Bucket'  =>  'my-­‐bucket-­‐name',      'Key'        =>  'my-­‐second-­‐key',      'Body'      =>  fopen('path/to/file2',  'r')  ));    $s3-­‐>execute(array($c1,  $c2));  

Parallel Commands

Page 32: Amazon Web Services for PHP Developers

Modeled Results

•  Array-like object •  Follows schema from service description •  Convenience methods like getPath()  

$result  =  $s3-­‐>listBuckets();    $result['Buckets'][0]['Name'];  $result-­‐>get('Buckets');  $result-­‐>getPath('Buckets/0/Name');  $result-­‐>get('Buckets');  print_r($result-­‐>toArray());  

Page 33: Amazon Web Services for PHP Developers

Waiters

•  Poll resources until available •  Handle asynchronous and eventually

consistent operations more easily

$s3-­‐>createBucket(array(      'Bucket'  =>  'my-­‐bucket'  ));  $s3-­‐>waitUntilBucketExists(array(      'Bucket'  =>  'my-­‐bucket'  ));  

Page 34: Amazon Web Services for PHP Developers

Iterators

•  Iterate through entire result sets •  No handling of markers or tokens •  Uses SPL iterators and interfaces

$list  =  $s3-­‐>getIterator('ListObjects',  [      'Bucket'  =>  'my-­‐bucket'  ]);  foreach  ($list  as  $object)  {      echo  $object['Key']  .  PHP_EOL;  }  

Page 35: Amazon Web Services for PHP Developers

SDK 1.x – Before Iterators $dynamo_db  =  new  AmazonDynamoDB();  $start_key  =  null;  $people  =  array();      do  {      $params  =  array(          'TableName'  =>  'people',      );          if  ($start_key)  {        $params['ExclusiveStartKey']  =  array(            'HashKeyElement'  =>  array(                'S'  =>  $start_key            )        );        $start_key  =  null;    }      $response  =  $dynamo_db-­‐>scan($params);

   if  ($response-­‐>isOK())  {        foreach  ($response-­‐>body-­‐>Items  as  $item)  {            echo  (string)  $item-­‐>name-­‐>S;        }                  if  ($response-­‐>body-­‐>LastEvaluatedKey)  {            $start_key  =  (string)  $response-­‐>body-­‐>LastEvaluatedKey-­‐>HashKeyElement-­‐>S;        }      }  else  {                  throw  new  DynamoDB_Exception('DynamoDB  Scan  operation  failed.');    } }  while  ($start_key);

Page 36: Amazon Web Services for PHP Developers

SDK 1.x – Before Iterators $dynamo_db  =  new  AmazonDynamoDB();  $start_key  =  null;  $people  =  array();      do  {      $params  =  array(          'TableName'  =>  'people',      );          if  ($start_key)  {        $params['ExclusiveStartKey']  =  array(            'HashKeyElement'  =>  array(                'S'  =>  $start_key            )        );        $start_key  =  null;    }      $response  =  $dynamo_db-­‐>scan($params);

   if  ($response-­‐>isOK())  {        foreach  ($response-­‐>body-­‐>Items  as  $item)  {            echo  (string)  $item-­‐>name-­‐>S;        }                  if  ($response-­‐>body-­‐>LastEvaluatedKey)  {            $start_key  =  (string)  $response-­‐>body-­‐>LastEvaluatedKey-­‐>HashKeyElement-­‐>S;        }      }  else  {                  throw  new  DynamoDB_Exception('DynamoDB  Scan  operation  failed.');    } }  while  ($start_key);

Page 37: Amazon Web Services for PHP Developers

$db  =  $aws-­‐>get('DynamoDb');    $scan  =  $db-­‐>getIterator('Scan',  array(      'TableName'              =>  'People',      'AttributesToGet'  =>  array('Id',  'Name')  ));    foreach  ($scan  as  $person)  {      echo  $item['Name']['S'];  }    

Example: Scan Iterator

Page 38: Amazon Web Services for PHP Developers
Page 39: Amazon Web Services for PHP Developers

Events & Event Listeners

•  Event slots in various parts of SDK •  Inject logic without extending classes •  Symfony2 Event Dispatcher

$s3-­‐>getEventDispatcher()        -­‐>addListener('<event>',  <fn>);  

Page 40: Amazon Web Services for PHP Developers

Plugins

•  Implemented as event listeners •  Many built-in plugins from Guzzle

including easy wire logging

use  Guzzle\Plugin\Log\LogPlugin;  $s3-­‐>addSubscriber(          LogPlugin::getDebugPlugin()  );  

Page 41: Amazon Web Services for PHP Developers

Higher-level Abstractions

•  S3 Multipart Uploader

•  S3 Stream Wrapper

•  DynamoDB Session Handler

•  DynamoDB WriteRequestBatch

•  SNS Message Validator

•  Third-party Modules: ZF2, Silex, Laravel

Page 42: Amazon Web Services for PHP Developers

$s3  =  $aws-­‐>get('S3');  $uploader  =  UploadBuilder::newInstance()      -­‐>setClient($s3)      -­‐>setSource('/path/to/large/file.mov')      -­‐>setBucket('my-­‐bucket')      -­‐>setKey('my-­‐object-­‐key')      -­‐>setConcurrency(3)      -­‐>build();  

Multipart Uploader

Page 43: Amazon Web Services for PHP Developers

http://aws.amazon.com/sdkforphp/

https://github.com/aws/aws-sdk-php

Page 44: Amazon Web Services for PHP Developers

PHP Apps on AWS

Page 45: Amazon Web Services for PHP Developers

•  http://aws.amazon.com/architecture/ – Reference architectures •  http://awsofa.info/ – Obama for America architecture

Page 46: Amazon Web Services for PHP Developers

Hosting

•  AWS Elastic Beanstalk

•  AWS OpsWorks

•  AWS CloudFormation

•  Amazon EC2 +  Auto Scaling +  Elastic Load Balancer +  Amazon CloudWatch

Easiest to setup Easiest to customize

Page 47: Amazon Web Services for PHP Developers

Databases

•  Amazon RDS – Relational Databases

•  Amazon DynamoDB – NoSQL Database

•  Amazon Redshift – Data Warehousing

•  Amazon ElastiCache – Memcache

Page 48: Amazon Web Services for PHP Developers

File Storage & Delivery

•  Amazon S3 – General Storage

•  Amazon EBS – Detachable Storage Volumes

•  Amazon Glacier – Archiving

•  Amazon CloudFront – Global CDN

Page 49: Amazon Web Services for PHP Developers

Sessions

•  Amazon RDS

•  Amazon DynamoDB (via PHP SDK)

•  Amazon ElastiCache (custom extension)

•  Elastic Load Balancer ("sticky sessions") –  http://docs.aws.amazon.com/ElasticLoadBalancing/latest/

DeveloperGuide/US_StickySessions.html

Page 50: Amazon Web Services for PHP Developers

Other

•  Message Passing – Amazon SQS, Amazon SNS

•  Sending Emails – Amazon SES

•  Workflows – Amazon SWF, AWS Data Pipeline

•  Monitoring – Amazon CloudWatch

•  Big Data Processing – Amazon EMR

•  DNS Management – Amazon Route 53

•  Search – Amazon CloudSearch

There's an app a service for that!

Page 51: Amazon Web Services for PHP Developers

Simple Funny Face Sharing App on

AWS Elastic Beanstalk

Page 52: Amazon Web Services for PHP Developers

Funny Face Sharing App

•  AWS Elastic Beanstalk – Amazon EC2 – Auto Scaling – Elastic Load Balancer – Amazon CloudWatch

•  Amazon S3 •  Amazon DynamoDB

Page 53: Amazon Web Services for PHP Developers

Questions?

@jeremeamia

Try out "The Cloud", AWS, and the

AWS SDK for PHP