More Related Content Similar to Amazon Web Services for PHP Developers (20) Amazon Web Services for PHP Developers2. 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
4. Cloud computing
is the acquisition and use
of computing resources that
are delivered as a service on an
as-needed basis.
5. "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/ )
8. 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 )
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
10. 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
11. 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!
12. 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
14. 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
17. AWS SDKs and Tools
PHP • Java • Python • .NET
Ruby • Node.js • iOS • Android
SDKs
Unified CLI • Visual Studio Plugin
Eclipse Plugin • PowerShell Tools
Tools
18. General SDK Features
• Suite of HTTP clients
• Input and output serialization
• Protocol normalization
• Authentication
• Error handling
• Language-specific conveniences
• Open source
19. The AWS SDK for PHP
http://github.com/aws/aws-sdk-php
20. Quick History
• Tarzan (Started by @skyzyx)
• CloudFusion
• AWS SDK for PHP [2010]
• AWS SDK for PHP 2 [Late 2012]
21. 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
22. require
'vendor/autoload.php';
use
AwsS3S3Client;
$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')
));
23. Built on Guzzle
• Popular HTTP Library
– Goutte
– AWS SDK for PHP J
– Drupal 8
• Foundation of the SDK
• Symfony2 Events
• http://guzzlephp.org
24. Installing the PHP SDK
• Composer
• PEAR
• Downloadable Phar
• RPM/yum (on Amazon Linux)
26. Installing via Composer
In your composer.json file:
{
"require":
{
"aws/aws-‐sdk-‐php":
"2.*"
}
}
On the command line.
php
composer.phar
install
27. Concepts in the SDK
• Commands
• Modeled Results
• Iterators
• Waiters
• Events & Plugins
• High-level Abstractions
28. Commands
• Encapsulates an operation to AWS
• Contains Request and Response objects
• Allows you set and get parameters
• Returns modeled results
30. $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
31. $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
32. 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());
33. 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'
));
34. 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;
}
35. 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);
36. 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);
37. $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
39. Events & Event Listeners
• Event slots in various parts of SDK
• Inject logic without extending classes
• Symfony2 Event Dispatcher
$s3-‐>getEventDispatcher()
-‐>addListener('<event>',
<fn>);
40. Plugins
• Implemented as event listeners
• Many built-in plugins from Guzzle
including easy wire logging
use
GuzzlePluginLogLogPlugin;
$s3-‐>addSubscriber(
LogPlugin::getDebugPlugin()
);
41. Higher-level Abstractions
• S3 Multipart Uploader
• S3 Stream Wrapper
• DynamoDB Session Handler
• DynamoDB WriteRequestBatch
• SNS Message Validator
• Third-party Modules: ZF2, Silex, Laravel
42. $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
46. Hosting
• AWS Elastic Beanstalk
• AWS OpsWorks
• AWS CloudFormation
• Amazon EC2
+ Auto Scaling
+ Elastic Load Balancer
+ Amazon CloudWatch
Easiest to
setup
Easiest to
customize
47. Databases
• Amazon RDS – Relational Databases
• Amazon DynamoDB – NoSQL Database
• Amazon Redshift – Data Warehousing
• Amazon ElastiCache – Memcache
48. File Storage & Delivery
• Amazon S3 – General Storage
• Amazon EBS – Detachable Storage Volumes
• Amazon Glacier – Archiving
• Amazon CloudFront – Global CDN
49. 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
50. 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!
52. Funny Face Sharing App
• AWS Elastic Beanstalk
– Amazon EC2
– Auto Scaling
– Elastic Load Balancer
– Amazon CloudWatch
• Amazon S3
• Amazon DynamoDB