Post on 11-May-2015
description
© 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
JavaScriptis everywhere.
Wednesday, November 27, 13
AWS SDK forJavaScript in Node.js
Almost a year old!
Wednesday, November 27, 13
AWS SDK forJavaScript in the Browser
Desktop or mobile devices
Wednesday, November 27, 13
Let’s use them.
Wednesday, November 27, 13
Goals
Wednesday, November 27, 13
Goals
1. Learn about AWS SDK for Node.js
Wednesday, November 27, 13
Goals
1. Learn about AWS SDK for Node.js
2. Introduce AWS SDK for JavaScript in the Browser
Wednesday, November 27, 13
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
AWS SDK for Node.js
Wednesday, November 27, 13
Full Service CoverageSupport for over 30 AWS services
Wednesday, November 27, 13
Extensible ClientsCustomize any part of the request cycle
Wednesday, November 27, 13
Standard Node.js IdiomsStreams, EventEmitter, Domains
Wednesday, November 27, 13
Open SourceApache License, Version 2.0
http://github.com/aws/aws-sdk-js
Wednesday, November 27, 13
Getting StartedAWS SDK for Node.js
Wednesday, November 27, 13
$ npm install aws-sdkBash
Installing
Wednesday, November 27, 13
var AWS = require(‘aws-sdk’);JS
Loading
Wednesday, November 27, 13
Configuringthe SDKAWS.config
Wednesday, November 27, 13
Configuringthe SDKAWS.config
Credentials *
* Required by the SDK
Wednesday, November 27, 13
Configuringthe SDKAWS.config
Credentials *Region *
* Required by the SDK
Wednesday, November 27, 13
Configuringthe SDKAWS.config
Credentials *Region *Extras
* Required by the SDK
Wednesday, November 27, 13
Configuring Credentials
Wednesday, November 27, 13
Configuring Credentials
IAM roles for EC2 Instances
Wednesday, November 27, 13
Configuring Credentials
IAM roles for EC2 InstancesEnvironment Variables
Wednesday, November 27, 13
Configuring Credentials
IAM roles for EC2 InstancesEnvironment VariablesFile System (outside source control)
Wednesday, November 27, 13
Do Not Hardcode Credentials
Unless they are read-only and scoped to specific resources.Wednesday, November 27, 13
IAM Roles for EC2 Instances
=Zero Configuration
Wednesday, November 27, 13
Environment VariablesAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_REGION*
Wednesday, November 27, 13
ConfiguringRegion and Extras
Wednesday, November 27, 13
AWS.config.update({ region: ‘us-west-2’, // AWS_REGION maxRetries: 10, // default: 3 logger: process.stdout, // ... more options ...});
JS
Wednesday, November 27, 13
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
Working with Services
Wednesday, November 27, 13
Service Objects
Wednesday, November 27, 13
Service Objects
AWS.S3
Wednesday, November 27, 13
Service Objects
AWS.S3AWS.EC2
Wednesday, November 27, 13
Service Objects
AWS.S3AWS.EC2AWS.DynamoDB
Wednesday, November 27, 13
Service Objects
AWS.S3AWS.EC2AWS.DynamoDBAWS.SQS
Wednesday, November 27, 13
Service Objects
AWS.S3AWS.EC2AWS.DynamoDBAWS.SQSAWS.SNS
Wednesday, November 27, 13
Service Objects
AWS.S3AWS.EC2AWS.DynamoDBAWS.SQSAWS.SNS...
Wednesday, November 27, 13
var ec2 = new AWS.EC2([config]);JS
Constructing a Service Object
Wednesday, November 27, 13
ec2.describeInstances(params, callback);JS
Calling an Operation
Wednesday, November 27, 13
function (err, data) { ... }JS
The Callback
Wednesday, November 27, 13
var req = ec2.describeInstances(params);JS
Getting a Request Object
Wednesday, November 27, 13
var resp = req.send(callback);JS
Sending the Request Object
Wednesday, November 27, 13
req.on(‘complete’, function(resp) { ... });JS
Adding Listenersto the Request Object
Wednesday, November 27, 13
The Request Cycle
Wednesday, November 27, 13
Send AWS.RequestGet AWS.Response
Wednesday, November 27, 13
Request Lifecycle
Wednesday, November 27, 13
Operation
Request Lifecycle
Wednesday, November 27, 13
Operation
Request Lifecycle
Wednesday, November 27, 13
AWS.Request
Operation
Request Lifecycle
Wednesday, November 27, 13
AWS.Request
Operation
Request Lifecycle
send()
Wednesday, November 27, 13
AWS.Request
Operation
build sign send
completesuccess
error
Emitted Lifecycle Events
... ... ...
Request Lifecycle
send()
Wednesday, November 27, 13
AWS.Request
Operation
build sign send
completesuccess
error
Emitted Lifecycle Events
... ... ...
Request Lifecycle
callbacksend()
Wednesday, November 27, 13
AWS.Request
Operation
AWS.Response
build sign send
completesuccess
error
Emitted Lifecycle Events
... ... ...
Request Lifecycle
callbacksend()
Wednesday, November 27, 13
AWS.Request
Wednesday, November 27, 13
AWS.Request.send(callback)
Wednesday, November 27, 13
AWS.Request.send(callback).on(event, callback)
Wednesday, November 27, 13
AWS.Request.send(callback).on(event, callback).httpRequest
Wednesday, November 27, 13
AWS.Request.send(callback).on(event, callback).httpRequest...
Wednesday, November 27, 13
AWS.Response
Wednesday, November 27, 13
AWS.Response
.error
Wednesday, November 27, 13
AWS.Response
.error
.data
Wednesday, November 27, 13
AWS.Response
.error
.data
.retryCount
Wednesday, November 27, 13
AWS.Response
.error
.data
.retryCount
.httpResponse
Wednesday, November 27, 13
AWS.Response
.error
.data
.retryCount
.httpResponse
...Wednesday, November 27, 13
RequestLifecycleRecap
Wednesday, November 27, 13
RequestLifecycleRecap
Send AWS.Request
Wednesday, November 27, 13
RequestLifecycleRecap
Send AWS.RequestEmits Lifecycle Events
Wednesday, November 27, 13
RequestLifecycleRecap
Send AWS.RequestEmits Lifecycle EventsCallback with AWS.Response
Wednesday, November 27, 13
Featuresof the SDK
Wednesday, November 27, 13
SDK Features
Wednesday, November 27, 13
SDK Features
Global Configuration Object
Wednesday, November 27, 13
SDK Features
Global Configuration ObjectBound Parameters
Wednesday, November 27, 13
SDK Features
Global Configuration ObjectBound ParametersResponse Pagination
Wednesday, November 27, 13
SDK Features
Global Configuration ObjectBound ParametersResponse PaginationEvent Listeners (Per-Service and Global)
Wednesday, November 27, 13
SDK Features
Global Configuration ObjectBound ParametersResponse PaginationEvent Listeners (Per-Service and Global)API Version Locking
Wednesday, November 27, 13
SDK Features
Global Configuration ObjectBound ParametersResponse PaginationEvent Listeners (Per-Service and Global)API Version LockingSecure Credential Management
Wednesday, November 27, 13
AWS SDKfor JavaScriptin the Browser
Wednesday, November 27, 13
Developer PreviewLooking for Feedback
Wednesday, November 27, 13
language
Getting the SDK<script src=”https://sdk.amazonaws.com/js/aws-sdk-2.0.0-rc1.min.js” />
Wednesday, November 27, 13
5 Supported Services
Wednesday, November 27, 13
5 Supported Services
Amazon S3
Wednesday, November 27, 13
5 Supported Services
Amazon S3Amazon DynamoDB
Wednesday, November 27, 13
5 Supported Services
Amazon S3Amazon DynamoDBAmazon SQS
Wednesday, November 27, 13
5 Supported Services
Amazon S3Amazon DynamoDBAmazon SQSAmazon SNS
Wednesday, November 27, 13
5 Supported Services
Amazon S3Amazon DynamoDBAmazon SQSAmazon SNSSTS
Wednesday, November 27, 13
All Modern Browsers
28.0+ 23.0+ 10+ 17.0+ 5.1+
Wednesday, November 27, 13
Usage is the same.But in your browser or mobile device
Wednesday, November 27, 13
Configurationis Different
Wednesday, November 27, 13
Two-Tier Web Applications
Why is it different?
Wednesday, November 27, 13
Traditional Application Architecture
Other ServicesNode.js Backend
nodeJS
Your Services
Wednesday, November 27, 13
Two-Tier Application Architecture
Your ServicesnodeJS
nodeJS
nodeJS
SDK on the Device
Wednesday, November 27, 13
Benefits
Wednesday, November 27, 13
Benefits
Fewer moving parts
Wednesday, November 27, 13
Benefits
Fewer moving partsEasy prototyping
Wednesday, November 27, 13
Benefits
Fewer moving partsEasy prototypingDeploying as simple as copying files to Amazon S3
Wednesday, November 27, 13
Benefits
Fewer moving partsEasy prototypingDeploying as simple as copying files to Amazon S3Fully dynamic app for pennies a month
Wednesday, November 27, 13
Next LevelWeb Apps
Wednesday, November 27, 13
AppIdeas
Wednesday, November 27, 13
AppIdeas
Forum Software
Wednesday, November 27, 13
AppIdeas
Forum SoftwareBlog Commenting Service
Wednesday, November 27, 13
AppIdeas
Forum SoftwareBlog Commenting ServiceBlogging Platform
Wednesday, November 27, 13
AppIdeas
Forum SoftwareBlog Commenting ServiceBlogging PlatformFirefox/Chrome Extensions
Wednesday, November 27, 13
AppIdeas
Forum SoftwareBlog Commenting ServiceBlogging PlatformFirefox/Chrome ExtensionsWinRT (Metro Style) Apps
Wednesday, November 27, 13
AppIdeas
Forum SoftwareBlog Commenting ServiceBlogging PlatformFirefox/Chrome ExtensionsWinRT (Metro Style) AppsAny Mobile App!
Wednesday, November 27, 13
Let’s Look at aWeb Application
Using nothing butHTML, CSS, and JavaScript
Wednesday, November 27, 13
A Simple BlogContent stored in Amazon DynamoDB
Assets in Amazon S3
Wednesday, November 27, 13
Key DifferencesThree-Tier to Two-Tier
Wednesday, November 27, 13
Key DifferencesThree-Tier to Two-Tier
Browser Security
Wednesday, November 27, 13
Key DifferencesThree-Tier to Two-Tier
Browser SecurityCORS in the browser Credentials on device
Wednesday, November 27, 13
Cross-Origin Resource Sharing
Wednesday, November 27, 13
CORS
Wednesday, November 27, 13
CORSBrowser sends pre-flight request to external host.
Wednesday, November 27, 13
CORSBrowser sends pre-flight request to external host.Host acknowledges browser.
Wednesday, November 27, 13
CORSBrowser sends pre-flight request to external host.Host acknowledges browser.Browser sends XHR request.
Wednesday, November 27, 13
CORS+ S3
Wednesday, November 27, 13
CORS+ S3
CORS needs special configuration on Amazon S3.
Wednesday, November 27, 13
CORS+ S3
CORS needs special configuration on Amazon S3.Configure CORS with bucket policy.
Wednesday, November 27, 13
Configuring CORS on Amazon S3
Wednesday, November 27, 13
Getting CredentialsOnto Your Device
Wednesday, November 27, 13
GettingCredentials
Onto Your Device
Wednesday, November 27, 13
GettingCredentials
Onto Your Device
Never hardcode credentials
Wednesday, November 27, 13
GettingCredentials
Onto Your Device
Never hardcode credentialsUse Web Identity Federation
Wednesday, November 27, 13
Web Identity FederationUse Facebook, Google, or Login with
Amazon as third-party identity providers
Wednesday, November 27, 13
Web Identity FederationSet up IAM roles for
these identity providers
Wednesday, November 27, 13
1
2
3
Wednesday, November 27, 13
Web Identity FederationSet up permissions for IAM role
Wednesday, November 27, 13
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
// 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
Same ConceptFor other identity providers
Wednesday, November 27, 13
Our Community
Wednesday, November 27, 13
We ♥Open Source
Wednesday, November 27, 13
Contributingto the SDK
Wednesday, November 27, 13
Contributingto the SDK
Improve Documentation
Wednesday, November 27, 13
Contributingto the SDK
Improve DocumentationReport Issues
Wednesday, November 27, 13
Contributingto the SDK
Improve DocumentationReport IssuesSubmit Pull Requests
Wednesday, November 27, 13
Contributingto the SDK
Improve DocumentationReport IssuesSubmit Pull RequestsThird-Party Plugins
Wednesday, November 27, 13
Third Party PluginsA great way to add features
Wednesday, November 27, 13
Node.js
Wednesday, November 27, 13
Wednesday, November 27, 13
Write More!
Wednesday, November 27, 13
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