Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Amazon Web Services for PHP Developers

Amazon Web Services for PHP Developers

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 what AWS services you can use to deploy and scale your applications in the cloud.

Jeremy Lindblom

April 20, 2013
Tweet

More Decks by Jeremy Lindblom

Other Decks in Technology

Transcript

  1. 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
  2. Cloud computing is the acquisition and use of computing resources

    that are delivered as a service on an as-needed basis.
  3. "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/ )
  4. 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 )
  5. 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
  6. 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
  7. 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 2+ trillion objects
  8. 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!
  9. 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
  10. 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
  11. AWS SDKs and Tools PHP • Java • Python •

    .NET Ruby • Node.js • iOS • Android SDKs Unified CLI • Visual Studio Plugin Eclipse Plugin • PowerShell Tools Tools
  12. General SDK Features •  Suite of HTTP clients •  Input

    and output serialization •  Protocol normalization •  Authentication •  Error handling •  Language-specific conveniences •  Open source
  13. Quick History •  Tarzan (Started by @skyzyx) •  CloudFusion • 

    AWS SDK for PHP [2010] •  AWS SDK for PHP 2 [Late 2012]
  14. 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
  15. 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')   ));  
  16. Built on Guzzle •  Popular HTTP Library – Goutte – AWS SDK

    for PHP J – Drupal 8 •  Foundation of the SDK •  Symfony2 Events •  http://guzzlephp.org
  17. Installing via Composer In your composer.json file:   {  

       "require":  {          "aws/aws-­‐sdk-­‐php":  "2.*"      }   }   On the command line. php  composer.phar  install  
  18. Concepts in the SDK •  Commands •  Modeled Results • 

    Iterators •  Waiters •  Events & Plugins •  High-level Abstractions
  19. Commands •  Encapsulates an operation to AWS •  Contains Request

    and Response objects •  Allows you set and get parameters •  Returns modeled results
  20. Commands - Shorthand $result  =  $s3-­‐>listObjects(array(      'Bucket'  =>

     'my-­‐bucket-­‐name'   ));     echo  $result['Objects'][0]['Key'];  
  21. $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
  22. $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
  23. 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());  
  24. 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'   ));  
  25. 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;   }  
  26. 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);
  27. 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);
  28. $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
  29. Events & Event Listeners •  Event slots in various parts

    of SDK •  Inject logic without extending classes •  Symfony2 Event Dispatcher $s3-­‐>getEventDispatcher()        -­‐>addListener('<event>',  <fn>);  
  30. Plugins •  Implemented as event listeners •  Many built-in plugins

    from Guzzle including easy wire logging use  Guzzle\Plugin\Log\LogPlugin;   $s3-­‐>addSubscriber(          LogPlugin::getDebugPlugin()   );  
  31. Higher-level Abstractions •  S3 Multipart Uploader •  S3 Stream Wrapper

    •  DynamoDB Session Handler •  DynamoDB WriteRequestBatch •  SNS Message Validator •  Third-party Modules: ZF2, Silex, Laravel
  32. $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
  33. Hosting •  AWS Elastic Beanstalk •  AWS OpsWorks •  AWS

    CloudFormation •  Amazon EC2 +  Auto Scaling +  Elastic Load Balancer +  Amazon CloudWatch Easiest to setup Easiest to customize
  34. Databases •  Amazon RDS – Relational Databases •  Amazon DynamoDB

    – NoSQL Database •  Amazon Redshift – Data Warehousing •  Amazon ElastiCache – Memcache
  35. File Storage & Delivery •  Amazon S3 – General Storage

    •  Amazon EBS – Detachable Storage Volumes •  Amazon Glacier – Archiving •  Amazon CloudFront – Global CDN
  36. 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
  37. 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!
  38. Funny Face Sharing App •  AWS Elastic Beanstalk – Amazon EC2

    – Auto Scaling – Elastic Load Balancer – Amazon CloudWatch •  Amazon S3 •  Amazon DynamoDB