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 CloudFormation Intrinsic Functions and Mappings
AWS CloudFormation Intrinsic Functions and Mappings AWS CloudFormation Intrinsic Functions and Mappings
AWS CloudFormation Intrinsic Functions and Mappings Adam Book
 
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 Amazon Web Services
 
AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017
AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017
AWS에서 자바스크립트 활용 - 서비스와 개발 도구 - AWS Summit Seoul 2017Amazon Web Services Korea
 
Deep Dive: Infrastructure as Code
Deep Dive: Infrastructure as CodeDeep Dive: Infrastructure as Code
Deep Dive: Infrastructure as CodeAmazon Web Services
 
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...DevOps_Fest
 
(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 2014Amazon Web Services
 
(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...Amazon Web Services
 
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 AvivAmazon Web Services
 
(DAT401) Amazon DynamoDB Deep Dive
(DAT401) Amazon DynamoDB Deep Dive(DAT401) Amazon DynamoDB Deep Dive
(DAT401) Amazon DynamoDB Deep DiveAmazon Web Services
 
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 UsersAmazon Web Services
 
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)Varun Torka
 
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 RubyRobert Dempsey
 
Masterclass Webinar - AWS CloudFormation
Masterclass Webinar - AWS CloudFormationMasterclass Webinar - AWS CloudFormation
Masterclass Webinar - AWS CloudFormationAmazon Web Services
 
DEV323_Introduction to the AWS CLI
DEV323_Introduction to the AWS CLIDEV323_Introduction to the AWS CLI
DEV323_Introduction to the AWS CLIAmazon Web Services
 
AWS CloudFormation Session
AWS CloudFormation SessionAWS CloudFormation Session
AWS CloudFormation SessionKamal Maiti
 
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 CodeAmazon Web Services
 

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

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 ServicesAmazon 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/burbsAWS Chicago
 
Painless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldPainless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldChristian Melchior
 
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 SymphonyAmazon Web Services
 
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)Enrico Zimuel
 
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 serverlessjeromevdl
 
AWS for Startups, London - Programming AWS
AWS for Startups, London - Programming AWSAWS for Startups, London - Programming AWS
AWS for Startups, London - Programming AWSAmazon Web Services
 
Serverless archtiectures
Serverless archtiecturesServerless archtiectures
Serverless archtiecturesIegor Fadieiev
 
Serverless Architectural Patterns & Best Practices
Serverless Architectural Patterns & Best PracticesServerless Architectural Patterns & Best Practices
Serverless Architectural Patterns & Best PracticesDaniel Zivkovic
 
(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 CLIAmazon Web Services
 
(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 & RulesAmazon Web Services
 
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 讓您專注「應用優先」.pptxAmazon Web Services
 
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 FrameworkDaniel Spector
 
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 LambdaAOE
 
Meetup bangalore aug31st2019
Meetup bangalore aug31st2019Meetup bangalore aug31st2019
Meetup bangalore aug31st2019D.Rajesh Kumar
 
Intro to node and mongodb 1
Intro to node and mongodb   1Intro to node and mongodb   1
Intro to node and mongodb 1Mohammad 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 versionBruce McPherson
 
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)Paweł Pikuła
 

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

Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 

Recently uploaded (20)

Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 

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