Page 1
© 2013 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.
by Loren SegalNovember 15th, 2013
Writing JavaScript Applications with the AWS SDK
Wednesday, November 27, 13
Page 2
JavaScriptis everywhere.
Wednesday, November 27, 13
Page 3
AWS SDK forJavaScript in Node.js
Almost a year old!
Wednesday, November 27, 13
Page 4
AWS SDK forJavaScript in the Browser
Desktop or mobile devices
Wednesday, November 27, 13
Page 5
Let’s use them.
Wednesday, November 27, 13
Page 6
Goals
Wednesday, November 27, 13
Page 7
Goals
1. Learn about AWS SDK for Node.js
Wednesday, November 27, 13
Page 8
Goals
1. Learn about AWS SDK for Node.js
2. Introduce AWS SDK for JavaScript in the Browser
Wednesday, November 27, 13
Page 9
Goals
1. Learn about AWS SDK for Node.js
2. Introduce AWS SDK for JavaScript in the Browser
3. Write a two-tiered web application using JavaScript, HTML, and CSS
Wednesday, November 27, 13
Page 10
AWS SDK for Node.js
Wednesday, November 27, 13
Page 11
Full Service CoverageSupport for over 30 AWS services
Wednesday, November 27, 13
Page 12
Extensible ClientsCustomize any part of the request cycle
Wednesday, November 27, 13
Page 13
Standard Node.js IdiomsStreams, EventEmitter, Domains
Wednesday, November 27, 13
Page 14
Open SourceApache License, Version 2.0
http://github.com/aws/aws-sdk-js
Wednesday, November 27, 13
Page 15
Getting StartedAWS SDK for Node.js
Wednesday, November 27, 13
Page 16
$ npm install aws-sdkBash
Installing
Wednesday, November 27, 13
Page 17
var AWS = require(‘aws-sdk’);JS
Loading
Wednesday, November 27, 13
Page 18
Configuringthe SDKAWS.config
Wednesday, November 27, 13
Page 19
Configuringthe SDKAWS.config
Credentials *
* Required by the SDK
Wednesday, November 27, 13
Page 20
Configuringthe SDKAWS.config
Credentials *Region *
* Required by the SDK
Wednesday, November 27, 13
Page 21
Configuringthe SDKAWS.config
Credentials *Region *Extras
* Required by the SDK
Wednesday, November 27, 13
Page 22
Configuring Credentials
Wednesday, November 27, 13
Page 23
Configuring Credentials
IAM roles for EC2 Instances
Wednesday, November 27, 13
Page 24
Configuring Credentials
IAM roles for EC2 InstancesEnvironment Variables
Wednesday, November 27, 13
Page 25
Configuring Credentials
IAM roles for EC2 InstancesEnvironment VariablesFile System (outside source control)
Wednesday, November 27, 13
Page 26
Do Not Hardcode Credentials
Unless they are read-only and scoped to specific resources.Wednesday, November 27, 13
Page 27
IAM Roles for EC2 Instances
=Zero Configuration
Wednesday, November 27, 13
Page 28
Environment VariablesAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_REGION*
Wednesday, November 27, 13
Page 29
ConfiguringRegion and Extras
Wednesday, November 27, 13
Page 30
AWS.config.update({ region: ‘us-west-2’, // AWS_REGION maxRetries: 10, // default: 3 logger: process.stdout, // ... more options ...});
JS
Wednesday, November 27, 13
Page 31
AWS.config.loadFromPath(‘./config.json’);JS
Config From a File
If this file contains credentials, keep it out of source control
Wednesday, November 27, 13
Page 32
Working with Services
Wednesday, November 27, 13
Page 33
Service Objects
Wednesday, November 27, 13
Page 34
Service Objects
AWS.S3
Wednesday, November 27, 13
Page 35
Service Objects
AWS.S3AWS.EC2
Wednesday, November 27, 13
Page 36
Service Objects
AWS.S3AWS.EC2AWS.DynamoDB
Wednesday, November 27, 13
Page 37
Service Objects
AWS.S3AWS.EC2AWS.DynamoDBAWS.SQS
Wednesday, November 27, 13
Page 38
Service Objects
AWS.S3AWS.EC2AWS.DynamoDBAWS.SQSAWS.SNS
Wednesday, November 27, 13
Page 39
Service Objects
AWS.S3AWS.EC2AWS.DynamoDBAWS.SQSAWS.SNS...
Wednesday, November 27, 13
Page 40
var ec2 = new AWS.EC2([config]);JS
Constructing a Service Object
Wednesday, November 27, 13
Page 41
ec2.describeInstances(params, callback);JS
Calling an Operation
Wednesday, November 27, 13
Page 42
function (err, data) { ... }JS
The Callback
Wednesday, November 27, 13
Page 43
var req = ec2.describeInstances(params);JS
Getting a Request Object
Wednesday, November 27, 13
Page 44
var resp = req.send(callback);JS
Sending the Request Object
Wednesday, November 27, 13
Page 45
req.on(‘complete’, function(resp) { ... });JS
Adding Listenersto the Request Object
Wednesday, November 27, 13
Page 46
The Request Cycle
Wednesday, November 27, 13
Page 47
Send AWS.RequestGet AWS.Response
Wednesday, November 27, 13
Page 48
Request Lifecycle
Wednesday, November 27, 13
Page 49
Operation
Request Lifecycle
Wednesday, November 27, 13
Page 50
Operation
Request Lifecycle
Wednesday, November 27, 13
Page 51
AWS.Request
Operation
Request Lifecycle
Wednesday, November 27, 13
Page 52
AWS.Request
Operation
Request Lifecycle
send()
Wednesday, November 27, 13
Page 53
AWS.Request
Operation
build sign send
completesuccess
error
Emitted Lifecycle Events
... ... ...
Request Lifecycle
send()
Wednesday, November 27, 13
Page 54
AWS.Request
Operation
build sign send
completesuccess
error
Emitted Lifecycle Events
... ... ...
Request Lifecycle
callbacksend()
Wednesday, November 27, 13
Page 55
AWS.Request
Operation
AWS.Response
build sign send
completesuccess
error
Emitted Lifecycle Events
... ... ...
Request Lifecycle
callbacksend()
Wednesday, November 27, 13
Page 56
AWS.Request
Wednesday, November 27, 13
Page 57
AWS.Request.send(callback)
Wednesday, November 27, 13
Page 58
AWS.Request.send(callback).on(event, callback)
Wednesday, November 27, 13
Page 59
AWS.Request.send(callback).on(event, callback).httpRequest
Wednesday, November 27, 13
Page 60
AWS.Request.send(callback).on(event, callback).httpRequest...
Wednesday, November 27, 13
Page 61
AWS.Response
Wednesday, November 27, 13
Page 62
AWS.Response
.error
Wednesday, November 27, 13
Page 63
AWS.Response
.error
.data
Wednesday, November 27, 13
Page 64
AWS.Response
.error
.data
.retryCount
Wednesday, November 27, 13
Page 65
AWS.Response
.error
.data
.retryCount
.httpResponse
Wednesday, November 27, 13
Page 66
AWS.Response
.error
.data
.retryCount
.httpResponse
...Wednesday, November 27, 13
Page 67
RequestLifecycleRecap
Wednesday, November 27, 13
Page 68
RequestLifecycleRecap
Send AWS.Request
Wednesday, November 27, 13
Page 69
RequestLifecycleRecap
Send AWS.RequestEmits Lifecycle Events
Wednesday, November 27, 13
Page 70
RequestLifecycleRecap
Send AWS.RequestEmits Lifecycle EventsCallback with AWS.Response
Wednesday, November 27, 13
Page 71
Featuresof the SDK
Wednesday, November 27, 13
Page 72
SDK Features
Wednesday, November 27, 13
Page 73
SDK Features
Global Configuration Object
Wednesday, November 27, 13
Page 74
SDK Features
Global Configuration ObjectBound Parameters
Wednesday, November 27, 13
Page 75
SDK Features
Global Configuration ObjectBound ParametersResponse Pagination
Wednesday, November 27, 13
Page 76
SDK Features
Global Configuration ObjectBound ParametersResponse PaginationEvent Listeners (Per-Service and Global)
Wednesday, November 27, 13
Page 77
SDK Features
Global Configuration ObjectBound ParametersResponse PaginationEvent Listeners (Per-Service and Global)API Version Locking
Wednesday, November 27, 13
Page 78
SDK Features
Global Configuration ObjectBound ParametersResponse PaginationEvent Listeners (Per-Service and Global)API Version LockingSecure Credential Management
Wednesday, November 27, 13
Page 79
AWS SDKfor JavaScriptin the Browser
Wednesday, November 27, 13
Page 80
Developer PreviewLooking for Feedback
Wednesday, November 27, 13
Page 81
language
Getting the SDK<script src=”https://sdk.amazonaws.com/js/aws-sdk-2.0.0-rc1.min.js” />
Wednesday, November 27, 13
Page 82
5 Supported Services
Wednesday, November 27, 13
Page 83
5 Supported Services
Amazon S3
Wednesday, November 27, 13
Page 84
5 Supported Services
Amazon S3Amazon DynamoDB
Wednesday, November 27, 13
Page 85
5 Supported Services
Amazon S3Amazon DynamoDBAmazon SQS
Wednesday, November 27, 13
Page 86
5 Supported Services
Amazon S3Amazon DynamoDBAmazon SQSAmazon SNS
Wednesday, November 27, 13
Page 87
5 Supported Services
Amazon S3Amazon DynamoDBAmazon SQSAmazon SNSSTS
Wednesday, November 27, 13
Page 88
All Modern Browsers
28.0+ 23.0+ 10+ 17.0+ 5.1+
Wednesday, November 27, 13
Page 89
Usage is the same.But in your browser or mobile device
Wednesday, November 27, 13
Page 90
Configurationis Different
Wednesday, November 27, 13
Page 91
Two-Tier Web Applications
Why is it different?
Wednesday, November 27, 13
Page 92
Traditional Application Architecture
Other ServicesNode.js Backend
nodeJS
Your Services
Wednesday, November 27, 13
Page 93
Two-Tier Application Architecture
Your ServicesnodeJS
nodeJS
nodeJS
SDK on the Device
Wednesday, November 27, 13
Page 94
Benefits
Wednesday, November 27, 13
Page 95
Benefits
Fewer moving parts
Wednesday, November 27, 13
Page 96
Benefits
Fewer moving partsEasy prototyping
Wednesday, November 27, 13
Page 97
Benefits
Fewer moving partsEasy prototypingDeploying as simple as copying files to Amazon S3
Wednesday, November 27, 13
Page 98
Benefits
Fewer moving partsEasy prototypingDeploying as simple as copying files to Amazon S3Fully dynamic app for pennies a month
Wednesday, November 27, 13
Page 99
Next LevelWeb Apps
Wednesday, November 27, 13
Page 100
AppIdeas
Wednesday, November 27, 13
Page 101
AppIdeas
Forum Software
Wednesday, November 27, 13
Page 102
AppIdeas
Forum SoftwareBlog Commenting Service
Wednesday, November 27, 13
Page 103
AppIdeas
Forum SoftwareBlog Commenting ServiceBlogging Platform
Wednesday, November 27, 13
Page 104
AppIdeas
Forum SoftwareBlog Commenting ServiceBlogging PlatformFirefox/Chrome Extensions
Wednesday, November 27, 13
Page 105
AppIdeas
Forum SoftwareBlog Commenting ServiceBlogging PlatformFirefox/Chrome ExtensionsWinRT (Metro Style) Apps
Wednesday, November 27, 13
Page 106
AppIdeas
Forum SoftwareBlog Commenting ServiceBlogging PlatformFirefox/Chrome ExtensionsWinRT (Metro Style) AppsAny Mobile App!
Wednesday, November 27, 13
Page 107
Let’s Look at aWeb Application
Using nothing butHTML, CSS, and JavaScript
Wednesday, November 27, 13
Page 108
A Simple BlogContent stored in Amazon DynamoDB
Assets in Amazon S3
Wednesday, November 27, 13
Page 109
Key DifferencesThree-Tier to Two-Tier
Wednesday, November 27, 13
Page 110
Key DifferencesThree-Tier to Two-Tier
Browser Security
Wednesday, November 27, 13
Page 111
Key DifferencesThree-Tier to Two-Tier
Browser SecurityCORS in the browser Credentials on device
Wednesday, November 27, 13
Page 112
Cross-Origin Resource Sharing
Wednesday, November 27, 13
Page 113
CORS
Wednesday, November 27, 13
Page 114
CORSBrowser sends pre-flight request to external host.
Wednesday, November 27, 13
Page 115
CORSBrowser sends pre-flight request to external host.Host acknowledges browser.
Wednesday, November 27, 13
Page 116
CORSBrowser sends pre-flight request to external host.Host acknowledges browser.Browser sends XHR request.
Wednesday, November 27, 13
Page 117
CORS+ S3
Wednesday, November 27, 13
Page 118
CORS+ S3
CORS needs special configuration on Amazon S3.
Wednesday, November 27, 13
Page 119
CORS+ S3
CORS needs special configuration on Amazon S3.Configure CORS with bucket policy.
Wednesday, November 27, 13
Page 120
Configuring CORS on Amazon S3
Wednesday, November 27, 13
Page 121
Getting CredentialsOnto Your Device
Wednesday, November 27, 13
Page 122
GettingCredentials
Onto Your Device
Wednesday, November 27, 13
Page 123
GettingCredentials
Onto Your Device
Never hardcode credentials
Wednesday, November 27, 13
Page 124
GettingCredentials
Onto Your Device
Never hardcode credentialsUse Web Identity Federation
Wednesday, November 27, 13
Page 125
Web Identity FederationUse Facebook, Google, or Login with
Amazon as third-party identity providers
Wednesday, November 27, 13
Page 126
Web Identity FederationSet up IAM roles for
these identity providers
Wednesday, November 27, 13
Page 127
1
2
3
Wednesday, November 27, 13
Page 128
Web Identity FederationSet up permissions for IAM role
Wednesday, November 27, 13
Page 129
AWS.config.credentials = new AWS.WebIdentityCredentials({ RoleArn: ‘arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME>’, ProviderId: ‘graph.facebook.com’, WebIdentityToken: fbAccessToken});
JS
AWS.WebIdentityCredentials
Wednesday, November 27, 13
Page 130
// 1. Load the FB JS SDK// 2. Call FB.login()FB.login(function (response) { if (response.authResponse) { fbAccessToken = response.authResponse.accessToken; AWS.config.credentials = new AWS.WebIdentityCredentials({...});});
JS
Get a Facebook Access Token
Wednesday, November 27, 13
Page 131
Same ConceptFor other identity providers
Wednesday, November 27, 13
Page 132
Our Community
Wednesday, November 27, 13
Page 133
We ♥Open Source
Wednesday, November 27, 13
Page 134
https://github.com/aws/aws-sdk-js
Wednesday, November 27, 13
Page 135
Contributingto the SDK
Wednesday, November 27, 13
Page 136
Contributingto the SDK
Improve Documentation
Wednesday, November 27, 13
Page 137
Contributingto the SDK
Improve DocumentationReport Issues
Wednesday, November 27, 13
Page 138
Contributingto the SDK
Improve DocumentationReport IssuesSubmit Pull Requests
Wednesday, November 27, 13
Page 139
Contributingto the SDK
Improve DocumentationReport IssuesSubmit Pull RequestsThird-Party Plugins
Wednesday, November 27, 13
Page 140
Third Party PluginsA great way to add features
Wednesday, November 27, 13
Page 141
Node.js
Wednesday, November 27, 13
Page 142
Wednesday, November 27, 13
Page 143
Write More!
Wednesday, November 27, 13
Page 144
Please give us your feedback on this presentation
As a thank you, we will select prize winners daily for completed surveys!
TLS303 Thank You
Wednesday, November 27, 13