SlideShare a Scribd company logo
1 of 53
Download to read offline
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	
  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')	
  
));	
  
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	
  GuzzlePluginLogLogPlugin;	
  
$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

More Related Content

What's hot

AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017
AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017
AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017
Amazon Web Services Korea
 

What's hot (20)

AWS CloudFormation Intrinsic Functions and Mappings
AWS CloudFormation Intrinsic Functions and Mappings AWS CloudFormation Intrinsic Functions and Mappings
AWS CloudFormation Intrinsic Functions and Mappings
 
DevOps for the Enterprise: Automated Testing and Monitoring
DevOps for the Enterprise: Automated Testing and Monitoring DevOps for the Enterprise: Automated Testing and Monitoring
DevOps for the Enterprise: Automated Testing and Monitoring
 
AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017
AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017
AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017
 
Deep Dive: Infrastructure as Code
Deep Dive: Infrastructure as CodeDeep Dive: Infrastructure as Code
Deep Dive: Infrastructure as Code
 
Orchestrating the Cloud
Orchestrating the CloudOrchestrating the Cloud
Orchestrating the Cloud
 
DevOps Fest 2019. Alex Casalboni. Configuration management and service discov...
DevOps Fest 2019. Alex Casalboni. Configuration management and service discov...DevOps Fest 2019. Alex Casalboni. Configuration management and service discov...
DevOps Fest 2019. Alex Casalboni. Configuration management and service discov...
 
(SEC302) Delegating Access to Your AWS Environment | AWS re:Invent 2014
(SEC302) Delegating Access to Your AWS Environment | AWS re:Invent 2014(SEC302) Delegating Access to Your AWS Environment | AWS re:Invent 2014
(SEC302) Delegating Access to Your AWS Environment | AWS re:Invent 2014
 
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
 
An introduction to AWS CloudFormation - Pop-up Loft Tel Aviv
An introduction to AWS CloudFormation - Pop-up Loft Tel AvivAn introduction to AWS CloudFormation - Pop-up Loft Tel Aviv
An introduction to AWS CloudFormation - Pop-up Loft Tel Aviv
 
(DAT401) Amazon DynamoDB Deep Dive
(DAT401) Amazon DynamoDB Deep Dive(DAT401) Amazon DynamoDB Deep Dive
(DAT401) Amazon DynamoDB Deep Dive
 
AWS CloudFormation Masterclass
AWS CloudFormation MasterclassAWS CloudFormation Masterclass
AWS CloudFormation Masterclass
 
Terraform & Azure
Terraform & AzureTerraform & Azure
Terraform & Azure
 
Scaling on AWS for the First 10 Million Users
Scaling on AWS for the First 10 Million UsersScaling on AWS for the First 10 Million Users
Scaling on AWS for the First 10 Million Users
 
Making connected apps with BaaS (Droidcon Bangalore 2014)
Making connected apps with BaaS (Droidcon Bangalore 2014)Making connected apps with BaaS (Droidcon Bangalore 2014)
Making connected apps with BaaS (Droidcon Bangalore 2014)
 
The Future is Now: Leveraging the Cloud with Ruby
The Future is Now: Leveraging the Cloud with RubyThe Future is Now: Leveraging the Cloud with Ruby
The Future is Now: Leveraging the Cloud with Ruby
 
Masterclass Webinar - AWS CloudFormation
Masterclass Webinar - AWS CloudFormationMasterclass Webinar - AWS CloudFormation
Masterclass Webinar - AWS CloudFormation
 
DEV323_Introduction to the AWS CLI
DEV323_Introduction to the AWS CLIDEV323_Introduction to the AWS CLI
DEV323_Introduction to the AWS CLI
 
Node.js and Parse
Node.js and ParseNode.js and Parse
Node.js and Parse
 
AWS CloudFormation Session
AWS CloudFormation SessionAWS CloudFormation Session
AWS CloudFormation Session
 
AWS May Webinar Series - Deep Dive: Infrastructure as Code
AWS May Webinar Series - Deep Dive: Infrastructure as CodeAWS May Webinar Series - Deep Dive: Infrastructure as Code
AWS May Webinar Series - Deep Dive: Infrastructure as Code
 

Similar to Amazon Web Services for PHP Developers

Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptxTrack 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
Amazon Web Services
 
Intro to node and mongodb 1
Intro to node and mongodb   1Intro to node and mongodb   1
Intro to node and mongodb 1
Mohammad Qureshi
 
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
崇之 清水
 
Google apps script database abstraction exposed version
Google apps script database abstraction   exposed versionGoogle apps script database abstraction   exposed version
Google apps script database abstraction exposed version
Bruce McPherson
 

Similar to Amazon Web Services for PHP Developers (20)

Cloud Computing in PHP With the Amazon Web Services
Cloud Computing in PHP With the Amazon Web ServicesCloud Computing in PHP With the Amazon Web Services
Cloud Computing in PHP With the Amazon Web Services
 
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
Serverless Framework Workshop - Tyler Hendrickson, Chicago/burbs
 
Painless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldPainless Persistence in a Disconnected World
Painless Persistence in a Disconnected World
 
AWS Summit Singapore - Lambda, Step Functions and Datadog: A Symphony
AWS Summit Singapore - Lambda, Step Functions and Datadog: A SymphonyAWS Summit Singapore - Lambda, Step Functions and Datadog: A Symphony
AWS Summit Singapore - Lambda, Step Functions and Datadog: A Symphony
 
Manage cloud infrastructures using Zend Framework 2 (and ZF1)
Manage cloud infrastructures using Zend Framework 2 (and ZF1)Manage cloud infrastructures using Zend Framework 2 (and ZF1)
Manage cloud infrastructures using Zend Framework 2 (and ZF1)
 
Do more with less code in serverless
Do more with less code in serverlessDo more with less code in serverless
Do more with less code in serverless
 
AWS for Startups, London - Programming AWS
AWS for Startups, London - Programming AWSAWS for Startups, London - Programming AWS
AWS for Startups, London - Programming AWS
 
Serverless archtiectures
Serverless archtiecturesServerless archtiectures
Serverless archtiectures
 
Serverless Architectural Patterns & Best Practices
Serverless Architectural Patterns & Best PracticesServerless Architectural Patterns & Best Practices
Serverless Architectural Patterns & Best Practices
 
(DEV301) Automating AWS with the AWS CLI
(DEV301) Automating AWS with the AWS CLI(DEV301) Automating AWS with the AWS CLI
(DEV301) Automating AWS with the AWS CLI
 
AWS Serverless Workshop
AWS Serverless WorkshopAWS Serverless Workshop
AWS Serverless Workshop
 
(MBL312) NEW! AWS IoT: Programming a Physical World w/ Shadows & Rules
(MBL312) NEW! AWS IoT: Programming a Physical World w/ Shadows & Rules(MBL312) NEW! AWS IoT: Programming a Physical World w/ Shadows & Rules
(MBL312) NEW! AWS IoT: Programming a Physical World w/ Shadows & Rules
 
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptxTrack 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end Framework
 
Immutable Deployments with AWS CloudFormation and AWS Lambda
Immutable Deployments with AWS CloudFormation and AWS LambdaImmutable Deployments with AWS CloudFormation and AWS Lambda
Immutable Deployments with AWS CloudFormation and AWS Lambda
 
Meetup bangalore aug31st2019
Meetup bangalore aug31st2019Meetup bangalore aug31st2019
Meetup bangalore aug31st2019
 
Intro to node and mongodb 1
Intro to node and mongodb   1Intro to node and mongodb   1
Intro to node and mongodb 1
 
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
RESTful API を Chalice で紐解く 〜 Python Serverless Microframework for AWS 〜
 
Google apps script database abstraction exposed version
Google apps script database abstraction   exposed versionGoogle apps script database abstraction   exposed version
Google apps script database abstraction exposed version
 
Serverless cat detector workshop - cloudyna 2017 (16.12.2017)
Serverless cat detector   workshop - cloudyna 2017 (16.12.2017)Serverless cat detector   workshop - cloudyna 2017 (16.12.2017)
Serverless cat detector workshop - cloudyna 2017 (16.12.2017)
 

Recently uploaded

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Recently uploaded (20)

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 

Amazon Web Services for PHP Developers

  • 1. Amazon Web Services for PHP Developers
  • 2. 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
  • 3. What is "The Cloud"?
  • 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/ )
  • 6.
  • 7. Bringing you the “The Cloud” since 2006.
  • 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
  • 13. Customers in 190 Countries
  • 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
  • 15. How do I use AWS?
  • 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)
  • 25. Composer •  Dependency management •  Autoloader for project •  http://getcomposer.org
  • 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
  • 29. Commands - Shorthand $result  =  $s3-­‐>listObjects(array(      'Bucket'  =>  'my-­‐bucket-­‐name'   ));     echo  $result['Objects'][0]['Key'];  
  • 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
  • 38.
  • 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
  • 44. PHP Apps on AWS
  • 45. •  http://aws.amazon.com/architecture/ – Reference architectures •  http://awsofa.info/ – Obama for America architecture
  • 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!
  • 51. Simple Funny Face Sharing App on AWS Elastic Beanstalk
  • 52. Funny Face Sharing App •  AWS Elastic Beanstalk – Amazon EC2 – Auto Scaling – Elastic Load Balancer – Amazon CloudWatch •  Amazon S3 •  Amazon DynamoDB
  • 53. Questions? @jeremeamia Try out "The Cloud", AWS, and the AWS SDK for PHP