Upload
jeremy-lindblom
View
1.551
Download
0
Tags:
Embed Size (px)
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.
Citation preview
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
What is "The Cloud"?
Cloud computing is the acquisition and use of computing resources that are delivered as a service on an as-needed basis.
"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/ )
Bringing you the “The Cloud” since 2006.
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 )
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
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
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!
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
Customers in 190 Countries
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
How do I use AWS?
AWS Console
AWS SDKs and Tools
PHP • Java • Python • .NET
Ruby • Node.js • iOS • Android
SDKs
Unified CLI • Visual Studio Plugin
Eclipse Plugin • PowerShell Tools
Tools
General SDK Features
• Suite of HTTP clients
• Input and output serialization
• Protocol normalization
• Authentication
• Error handling
• Language-specific conveniences
• Open source
The AWS SDK for PHP
http://github.com/aws/aws-sdk-php
Quick History
• Tarzan (Started by @skyzyx)
• CloudFusion
• AWS SDK for PHP [2010]
• AWS SDK for PHP 2 [Late 2012]
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
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') ));
Built on Guzzle
• Popular HTTP Library – Goutte – AWS SDK for PHP J – Drupal 8
• Foundation of the SDK
• Symfony2 Events
• http://guzzlephp.org
Installing the PHP SDK
• Composer
• PEAR
• Downloadable Phar
• RPM/yum (on Amazon Linux)
Composer
• Dependency management
• Autoloader for project
• http://getcomposer.org
Installing via Composer
In your composer.json file: { "require": { "aws/aws-‐sdk-‐php": "2.*" } }
On the command line. php composer.phar install
Concepts in the SDK
• Commands
• Modeled Results
• Iterators
• Waiters
• Events & Plugins
• High-level Abstractions
Commands
• Encapsulates an operation to AWS
• Contains Request and Response objects
• Allows you set and get parameters
• Returns modeled results
Commands - Shorthand
$result = $s3-‐>listObjects(array( 'Bucket' => 'my-‐bucket-‐name' )); echo $result['Objects'][0]['Key'];
$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
$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
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());
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' ));
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; }
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);
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);
$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
Events & Event Listeners
• Event slots in various parts of SDK • Inject logic without extending classes • Symfony2 Event Dispatcher
$s3-‐>getEventDispatcher() -‐>addListener('<event>', <fn>);
Plugins
• Implemented as event listeners • Many built-in plugins from Guzzle
including easy wire logging
use Guzzle\Plugin\Log\LogPlugin; $s3-‐>addSubscriber( LogPlugin::getDebugPlugin() );
Higher-level Abstractions
• S3 Multipart Uploader
• S3 Stream Wrapper
• DynamoDB Session Handler
• DynamoDB WriteRequestBatch
• SNS Message Validator
• Third-party Modules: ZF2, Silex, Laravel
$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
http://aws.amazon.com/sdkforphp/
https://github.com/aws/aws-sdk-php
PHP Apps on AWS
• http://aws.amazon.com/architecture/ – Reference architectures • http://awsofa.info/ – Obama for America architecture
Hosting
• AWS Elastic Beanstalk
• AWS OpsWorks
• AWS CloudFormation
• Amazon EC2 + Auto Scaling + Elastic Load Balancer + Amazon CloudWatch
Easiest to setup Easiest to customize
Databases
• Amazon RDS – Relational Databases
• Amazon DynamoDB – NoSQL Database
• Amazon Redshift – Data Warehousing
• Amazon ElastiCache – Memcache
File Storage & Delivery
• Amazon S3 – General Storage
• Amazon EBS – Detachable Storage Volumes
• Amazon Glacier – Archiving
• Amazon CloudFront – Global CDN
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
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!
Simple Funny Face Sharing App on
AWS Elastic Beanstalk
Funny Face Sharing App
• AWS Elastic Beanstalk – Amazon EC2 – Auto Scaling – Elastic Load Balancer – Amazon CloudWatch
• Amazon S3 • Amazon DynamoDB
Questions?
@jeremeamia
Try out "The Cloud", AWS, and the
AWS SDK for PHP