// API callback
showlatestposts({"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","xmlns$blogger":"http://schemas.google.com/blogger/2008","xmlns$georss":"http://www.georss.org/georss","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$thr":"http://purl.org/syndication/thread/1.0","id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012"},"updated":{"$t":"2023-10-23T04:18:30.735-07:00"},"category":[{"term":"AWS"},{"term":"AWS Certified Solutions Architect"},{"term":"Architect"},{"term":"Certification"},{"term":"AWS Certified Developer"},{"term":"AWS Certified SysOps Administrator"},{"term":"EC2"},{"term":"Course"},{"term":"Development"},{"term":"Cognito"},{"term":"Tutorial"},{"term":"SysOps Administration"},{"term":"CloudFront"},{"term":"News"},{"term":"S3"},{"term":"AutoScaling"},{"term":"Cordova"},{"term":"DynamoDB"},{"term":"ELB"},{"term":"IAM"},{"term":"Node.JS"},{"term":"PhoneGap"},{"term":"Security"},{"term":"Shared Responsibility"},{"term":"VPC"},{"term":"Amazon Aurora"},{"term":"Android"},{"term":"Denial of Service"},{"term":"EBS"},{"term":"IOS"},{"term":"NodeJS"},{"term":"RDS"},{"term":"AWS IoT"},{"term":"AWS Mobile Hub"},{"term":"Amazon Inspector"},{"term":"Amazon QuickSight"},{"term":"AngularJS"},{"term":"CloudTrail"},{"term":"Cloudformation"},{"term":"Dynamic"},{"term":"ECS"},{"term":"India"},{"term":"Internet of Things"},{"term":"Kinesis Firehose"},{"term":"MEAN"},{"term":"MariaDB"},{"term":"PIOPS"},{"term":"PhantomJS"},{"term":"ReactJS"},{"term":"Region"},{"term":"Route 53"},{"term":"Selenium"},{"term":"Trusted Adviser"},{"term":"WAF"},{"term":"Web Application Firewall"},{"term":"YAML"},{"term":"app"},{"term":"example"}],"title":{"type":"text","$t":"BackSpace Academy Blog"},"subtitle":{"type":"html","$t":"A blog about all things Amazon Web Services (AWS) and Cloud Certification."},"link":[{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/posts\/default"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default?alt=json-in-script\u0026orderby=published"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/"},{"rel":"hub","href":"http://pubsubhubbub.appspot.com/"},{"rel":"next","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default?alt=json-in-script\u0026start-index=26\u0026max-results=25\u0026orderby=published"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"generator":{"version":"7.00","uri":"http://www.blogger.com","$t":"Blogger"},"openSearch$totalResults":{"$t":"44"},"openSearch$startIndex":{"$t":"1"},"openSearch$itemsPerPage":{"$t":"25"},"entry":[{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-6884477455050709611"},"published":{"$t":"2017-04-21T05:24:00.000-07:00"},"updated":{"$t":"2017-04-21T05:37:42.622-07:00"},"title":{"type":"text","$t":"BackSpace is now on Udemy. Get your free access!!!"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"http:\/\/logos-download.com\/wp-content\/uploads\/2016\/06\/Udemy_logo.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" src=\"http:\/\/logos-download.com\/wp-content\/uploads\/2016\/06\/Udemy_logo.png\" height=\"106\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nMany of you have been requesting we put our courses on Udemy and we have finally listened. We are now listed on Udemy and future courses will also be on Udemy.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nAs an introductory offer we are giving the following deals:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cul\u003E\n\u003Cli\u003EFREE access to any existing paid members of backspace academy. Just send an email with your account details (name and enrolled email address) and we will provide you with a Udemy free coupon.\u003C\/li\u003E\n\u003Cli\u003E90% discount to non members by following this link:\u0026nbsp;\u003Ca href=\"https:\/\/www.udemy.com\/aws-certified-associate-architect-developer-sysops-admin\/?couponCode=BLOG90P\"\u003Ehttps:\/\/www.udemy.com\/aws-certified-associate-architect-developer-sysops-admin\/?couponCode=BLOG90P\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cdiv\u003E\nWe will of course continue to sell and support courses with exam engines at backspace.academy.\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/6884477455050709611\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2017\/04\/backspace-is-now-on-udemy-get-your-free.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6884477455050709611"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6884477455050709611"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2017\/04\/backspace-is-now-on-udemy-get-your-free.html","title":"BackSpace is now on Udemy. Get your free access!!!"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-96012945605615497"},"published":{"$t":"2016-10-03T06:10:00.000-07:00"},"updated":{"$t":"2016-10-05T18:44:02.277-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AngularJS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"CloudFront"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Dynamic"},{"scheme":"http://www.blogger.com/atom/ns#","term":"EC2"},{"scheme":"http://www.blogger.com/atom/ns#","term":"MEAN"},{"scheme":"http://www.blogger.com/atom/ns#","term":"NodeJS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"ReactJS"}],"title":{"type":"text","$t":"Super Fast Dynamic Websites with CloudFront, ReactJS, and NodeJS - Part 1"},"content":{"type":"html","$t":"\u003Cbr \/\u003E\nCloudFront should be an essential component of any web based application deployment. It not only instantly provides super low-latency performance, it also dramatically reduces server costs while providing maximum server uptime.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nCreating low latency static websites with CloudFront is a relatively simple process. You simply upload your site to S3 and create a CloudFront distribution for it. This is great for HTML5 websites and static blogs such as Jeckyl. But what about dynamic sites that need real time information presented to the end user? A different strategy is clearly required. Much has been published about different methods of caching dynamic websites but, I will present the most common sense and reliable technique to achieve this end.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\nServer Side v Browser Side Rendering\u003C\/h3\u003E\nIf you read any book on NodeJS you will no doubt find plenty of examples of rendering Jade templates with Express on the server. If you are still doing this, then you are wasting valuable server resources. A far better option is to render on the browser side. There are a number of frameworks specifically for this, the most popular being Facebook's ReactJS and Google's AngularJS (see \u003Ca href=\"http:\/\/stateofjs.com\/2016\/frontend\/\" target=\"_blank\"\u003EState of JS report\u003C\/a\u003E). I personally use ReactJS and the example will be in ReactJS, but either is fine.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nCreating your site using ReactJS or AngularJS and uploading it to your NodeJS public directory will shift the rendering of your site from your server to the client's browser. Users of your app will no longer be waiting for rendered pages and will see pages appear with the click of a button.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nYou can now create a CloudFront distribution for your ReactJS or AngularJS site.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nAlthough pages may be rendered instantly in the browser, any dynamic data required for the pages will be cached by CloudFront. We most probably do not want our dynamic data cached. We will still need a solution for delivering this data to the browser.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\nHandling Dynamic Data\u003C\/h3\u003E\n\u003Cbr \/\u003E\nAlthough there are many elaborate techniques published for handling dynamic data with CloudFront, the best way is to deliver this data without caching at all from CloudFront.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nNot all HTTP methods are cached by CloudFront, only responses to GET and HEAD requests (although you can also configure CloudFront to cache responses to OPTIONS requests). If we use a different HTTP method, such as POST, PUT or DELETE \u0026nbsp;the request will not be cached by Cloudfront. CloudFront will simply proxy these requests back to our server.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nOur EC2 NodeJS server can now be used to respond to requests for dynamic data by creating an API for our application that responds to POST requests from the client browser.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/2.bp.blogspot.com\/-5Be6dKuaOHQ\/V_JXJqPXlvI\/AAAAAAAAAXA\/xfP1-VLIz9sdkFol9-7ttradYMsWlTCaQCLcB\/s1600\/pptCD4.pptm%2B%255BAutosaved%255D.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"360\" src=\"https:\/\/2.bp.blogspot.com\/-5Be6dKuaOHQ\/V_JXJqPXlvI\/AAAAAAAAAXA\/xfP1-VLIz9sdkFol9-7ttradYMsWlTCaQCLcB\/s640\/pptCD4.pptm%2B%255BAutosaved%255D.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nSome of you might be wondering why I haven't used serverless technology such as AWS Lambda or API Gateway. Rest assured I will be posting another series using this but, I consider EC2 as the preferred technology for most applications. First of all, costs are rarely mentioned in the serverless discussion. If you have an application that has significant traffic, the conventional EC2\/ELB architecture will be the most cost effective. Secondly, many modern web applications are utilising websocket connections. Connections like this are possible with EC2 directly and also behind an ELB when utilizing proxy protocol. This is not possible with serverless technology as connections are short lived.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nIn the next post in this series we will set up our NodeJS server on EC2, create a CloudFront distribution and, create our API for handling dynamic data.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nBe sure to subscribe to the blog so that you can get the latest updates.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nFor more AWS training and tutorials check out\u0026nbsp;\u003Ca href=\"https:\/\/backspace.academy\/\"\u003Ebackspace.academy\u003C\/a\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ca href=\"https:\/\/backspace.academy\/\" target=\"_blank\"\u003E\u003Cimg src=\"https:\/\/backspace.academy\/assets\/img\/logo.svg\" \/\u003E\u003C\/a\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/96012945605615497\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/10\/super-fast-dynamic-websites-with.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/96012945605615497"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/96012945605615497"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/10\/super-fast-dynamic-websites-with.html","title":"Super Fast Dynamic Websites with CloudFront, ReactJS, and NodeJS - Part 1"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/2.bp.blogspot.com\/-5Be6dKuaOHQ\/V_JXJqPXlvI\/AAAAAAAAAXA\/xfP1-VLIz9sdkFol9-7ttradYMsWlTCaQCLcB\/s72-c\/pptCD4.pptm%2B%255BAutosaved%255D.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-4986015037693333477"},"published":{"$t":"2016-09-29T07:48:00.003-07:00"},"updated":{"$t":"2016-09-29T07:49:55.518-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Developer"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified SysOps Administrator"}],"title":{"type":"text","$t":"Attention all exam preppers! AWS Answers"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/4.bp.blogspot.com\/--9yr3lj5XeU\/V-0pObPzgSI\/AAAAAAAAAWs\/qFj88f-J2xscAU7hQ_0T3Ix5oF48X5hvgCLcB\/s1600\/AWS_Answers.PNG\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" src=\"https:\/\/4.bp.blogspot.com\/--9yr3lj5XeU\/V-0pObPzgSI\/AAAAAAAAAWs\/qFj88f-J2xscAU7hQ_0T3Ix5oF48X5hvgCLcB\/s1600\/AWS_Answers.PNG\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nAWS has just released a new \u003Ca href=\"https:\/\/aws.amazon.com\/answers\/\" target=\"_blank\"\u003EAWS Answers\u003C\/a\u003E\u0026nbsp;page that is essential reading for those preparing for the certification exams.\u003Cbr \/\u003E\nIt provides a great overview of AWS architecture considerations."},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/4986015037693333477\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/09\/attention-all-exam-preppers-aws-answers.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/4986015037693333477"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/4986015037693333477"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/09\/attention-all-exam-preppers-aws-answers.html","title":"Attention all exam preppers! AWS Answers"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/4.bp.blogspot.com\/--9yr3lj5XeU\/V-0pObPzgSI\/AAAAAAAAAWs\/qFj88f-J2xscAU7hQ_0T3Ix5oF48X5hvgCLcB\/s72-c\/AWS_Answers.PNG","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-5633300852660274272"},"published":{"$t":"2016-09-22T07:43:00.001-07:00"},"updated":{"$t":"2016-09-26T06:28:32.268-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Cloudformation"},{"scheme":"http://www.blogger.com/atom/ns#","term":"example"},{"scheme":"http://www.blogger.com/atom/ns#","term":"YAML"}],"title":{"type":"text","$t":"YAML and CloudFormation. Yippee!!!"},"content":{"type":"html","$t":"\u003Ch3 style=\"padding-top: 0px;\"\u003E\n\u003Cspan style=\"color: green; font-size: 16.25px;\"\u003EYAML\u003C\/span\u003E\u003Cspan style=\"color: brown; font-size: 16.25px;\"\u003E:\u003C\/span\u003E\u003Cspan style=\"font-size: 16.25px;\"\u003E \u003C\/span\u003E\u003Cb style=\"font-size: 16.25px;\"\u003EY\u003C\/b\u003E\u003Cspan style=\"font-size: 16.25px;\"\u003EAML \u003C\/span\u003E\u003Cb style=\"font-size: 16.25px;\"\u003EA\u003C\/b\u003E\u003Cspan style=\"font-size: 16.25px;\"\u003Ein't \u003C\/span\u003E\u003Cb style=\"font-size: 16.25px;\"\u003EM\u003C\/b\u003E\u003Cspan style=\"font-size: 16.25px;\"\u003Earkup \u003C\/span\u003E\u003Cb style=\"font-size: 16.25px;\"\u003EL\u003C\/b\u003E\u003Cspan style=\"font-size: 16.25px;\"\u003Eanguage\u003C\/span\u003E\u003C\/h3\u003E\n\u003Cbr \/\u003E\nI spend a heck of a lot of time coding and, like many devops guys, love \u003Ca href=\"http:\/\/coffeescript.org\/\" target=\"_blank\"\u003ECoffeescript\u003C\/a\u003E, \u003Ca href=\"https:\/\/github.com\/pugjs\/pug\" target=\"_blank\"\u003EJade\u003C\/a\u003E, \u003Ca href=\"http:\/\/stylus-lang.com\/\" target=\"_blank\"\u003EStylus \u003C\/a\u003Eand \u003Ca href=\"http:\/\/yaml.org\/\" target=\"_blank\"\u003EYAML\u003C\/a\u003E. No chasing missing semicolons, commas and curly braces. I just write clean code how it should be and, at least twice as fast.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nJSON, like plain javascript, is a lot cleaner, quicker and easier to read when you remove all those curly braces, commas etc. YAML does just that!\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nAWS just announced support for YAML with CloudFormation templates. I would thoroughly recommend you check it out and start using YAML. It will make big difference to your productivity and, your templates will be much easier to read understand.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nYAML, like Coffeescript, Jade and Stylus, makes use of indenting in code to eliminate the need for braces and commas. When you're learning YAML, you can use a JSON to YAML converter (eg http:\/\/www.json2yaml.com) to convert your existing JSON to YAML.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\n(Very) Basics of YAML\u003C\/h3\u003E\n\u003Cb\u003ECollections using Indentation\u0026nbsp;\u003C\/b\u003Eeliminate the need for braces and commas with Objects:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cb\u003EJSON\u0026nbsp;\u003C\/b\u003E\u003Cbr \/\u003E\n\"WebsiteConfiguration\": {\u003Cbr \/\u003E\n\"IndexDocument\": \"index.html\",\u003Cbr \/\u003E\n\"ErrorDocument\": \"error.html\"\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cb\u003EYAML\u003C\/b\u003E\u003Cbr \/\u003E\nWebsiteConfiguration:\u003Cbr \/\u003E\n\u0026nbsp; IndexDocument: index.html\u003Cbr \/\u003E\n\u0026nbsp; ErrorDocument: error.html\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cb\u003ESequences with Dashes \u003C\/b\u003Eeliminate the need for square brackets and commas with Arrays:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cb\u003EJSON\u0026nbsp;\u003C\/b\u003E\u003Cbr \/\u003E\n[\u003Cbr \/\u003E\n\"S3Bucket\",\u003Cbr \/\u003E\n\"DomainName\"\u003Cbr \/\u003E\n]\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cb\u003EYAML\u003C\/b\u003E\u003Cbr \/\u003E\n\u0026nbsp; - S3Bucket\u003Cbr \/\u003E\n\u0026nbsp; - DomainName\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\nFull Example\u003C\/h3\u003E\nHere is a full example I created for S3. I'll let you be the judge which one is better!\u003Cbr \/\u003E\n\u003Ch4\u003E\nJSON:\u003C\/h4\u003E\n{\u003Cbr \/\u003E\n\"AWSTemplateFormatVersion\": \"2010-09-09\",\u003Cbr \/\u003E\n\"Description\": \"AWS CloudFormation Sample Template\",\u003Cbr \/\u003E\n\"Resources\": {\u003Cbr \/\u003E\n\"S3Bucket\": {\u003Cbr \/\u003E\n\"Type\": \"AWS::S3::Bucket\",\u003Cbr \/\u003E\n\"Properties\": {\u003Cbr \/\u003E\n\"AccessControl\": \"PublicRead\",\u003Cbr \/\u003E\n\"WebsiteConfiguration\": {\u003Cbr \/\u003E\n\"IndexDocument\": \"index.html\",\u003Cbr \/\u003E\n\"ErrorDocument\": \"error.html\"\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n},\u003Cbr \/\u003E\n\"DeletionPolicy\": \"Retain\"\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n},\u003Cbr \/\u003E\n\"Outputs\": {\u003Cbr \/\u003E\n\"WebsiteURL\": {\u003Cbr \/\u003E\n\"Value\": {\u003Cbr \/\u003E\n\"Fn::GetAtt\": [\u003Cbr \/\u003E\n\"S3Bucket\",\u003Cbr \/\u003E\n\"WebsiteURL\"\u003Cbr \/\u003E\n]\u003Cbr \/\u003E\n},\u003Cbr \/\u003E\n\"Description\": \"URL for website hosted on S3\"\u003Cbr \/\u003E\n},\u003Cbr \/\u003E\n\"S3BucketSecureURL\": {\u003Cbr \/\u003E\n\"Value\": {\u003Cbr \/\u003E\n\"Fn::Join\": [\u003Cbr \/\u003E\n\"\",\u003Cbr \/\u003E\n[\u003Cbr \/\u003E\n\"https:\/\/\",\u003Cbr \/\u003E\n{\u003Cbr \/\u003E\n\"Fn::GetAtt\": [\u003Cbr \/\u003E\n\"S3Bucket\",\u003Cbr \/\u003E\n\"DomainName\"\u003Cbr \/\u003E\n]\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n]\u003Cbr \/\u003E\n]\u003Cbr \/\u003E\n},\u003Cbr \/\u003E\n\"Description\": \"Name of S3 bucket to hold website content\"\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch4\u003E\nYAML:\u003C\/h4\u003E\n---\u003Cbr \/\u003E\nAWSTemplateFormatVersion: '2010-09-09'\u003Cbr \/\u003E\nDescription: AWS CloudFormation Sample Template\u003Cbr \/\u003E\nResources:\u003Cbr \/\u003E\n\u0026nbsp; S3Bucket:\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Type: AWS::S3::Bucket\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Properties:\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; AccessControl: PublicRead\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; WebsiteConfiguration:\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; IndexDocument: index.html\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; ErrorDocument: error.html\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; DeletionPolicy: Retain\u003Cbr \/\u003E\nOutputs:\u003Cbr \/\u003E\n\u0026nbsp; WebsiteURL:\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Value:\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; Fn::GetAtt:\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; - S3Bucket\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; - WebsiteURL\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Description: URL for website hosted on S3\u003Cbr \/\u003E\n\u0026nbsp; S3BucketSecureURL:\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Value:\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; Fn::Join:\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; - ''\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; - - https:\/\/\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; - Fn::GetAtt:\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; - S3Bucket\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; - DomainName\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Description: Name of S3 bucket to hold website content\u003Cbr \/\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ca href=\"https:\/\/backspace.academy\/\" target=\"_blank\"\u003E\u003Cimg src=\"https:\/\/backspace.academy\/assets\/img\/logo.svg\" \/\u003E\u003C\/a\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/5633300852660274272\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/09\/yaml-and-cloudformation-yippee.html#comment-form","title":"3 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/5633300852660274272"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/5633300852660274272"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/09\/yaml-and-cloudformation-yippee.html","title":"YAML and CloudFormation. Yippee!!!"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"3"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-6960110121802518864"},"published":{"$t":"2016-09-12T01:06:00.001-07:00"},"updated":{"$t":"2016-09-26T06:28:48.097-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Denial of Service"},{"scheme":"http://www.blogger.com/atom/ns#","term":"EC2"},{"scheme":"http://www.blogger.com/atom/ns#","term":"PhantomJS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Security"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Selenium"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Shared Responsibility"}],"title":{"type":"text","$t":"Shared Responsibility 3 - Identify and Destroy the Bots"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/manilenya222.files.wordpress.com\/2015\/07\/tg-ff23.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"264\" src=\"https:\/\/manilenya222.files.wordpress.com\/2015\/07\/tg-ff23.jpg\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cb\u003EPlease note\u003C\/b\u003E: You should have a link in your login for blind or vision impaired people. These techniques will prevent them from using your application. They could be accommodated using an alternative dual factor authentication process.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nIn my last post I detailed how to create dynamic CSS selectors to make life difficult for reliable Bot scripts to be written. The next part of this series is to identify the Bot and take retaliatory action. The \u003Ca href=\"https:\/\/gist.github.com\/BackSpaceTech\/e522d861af3c35d875637bf2bedfed93\" target=\"_blank\"\u003Ecode for this post is available at Gist\u003C\/a\u003E in case Blogger screws it up again.. The code for creating dynamic CSS selectors including some additional decoy elements looks like this:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cpre class=\"brush: js\"\u003Efunction dynamicCSS(){\n var username, password\n x = ''\n if ((Math.random()*2) \u0026gt; 1)\n  x += '\u003Cstyle\u003E.btnSubmit,.password,.username{position:absolute;left:10}.username{top:50px}.password{top:80px}.btnSubmit{top:110px}\u003C\/style\u003E'\n else\n  x += '\u003Cstyle\u003E.btnSubmit,.password,.username{position:absolute;left:10}.username{top:80px}.password{top:110px}.btnSubmit{top:140px}\u003C\/style\u003E'\n x += '\u003Cform\u003E\n'\n x += '\u003Cbr \/\u003E\n\u003Ch1\u003E\nPlease Login\u003C\/h1\u003E\n'\n y = Math.floor((Math.random()*5)) + 2\n for (var a=0; a\u003Cy a=\"\" class=\"username\" id=\"' + username + '\" input=\"\" name=\"' + username + '\" password=\"randonString()\" placeholder=\"Enter Username\" type=\"text\" username=\"randonString()\" x=\"\"\u003E'\n  x += '\u003Cinput class=\"password\" id=\"' + password + '\" name=\"' + password + '\" placeholder=\"Enter Password\" type=\"password\" \/\u003E'\n   x += '\u003Cbutton class=\"btnSubmit\" onclick=\"submitForm(' + '\\'' + username + '\\'' + ',' + '\\'' + password + '\\'' + ')\" type=\"button\"\u003ELog in\u003C\/button\u003E'\n }\n for (var a=0; a\u003Cy a=\"\" class=\"username\" id=\"' + username + '\" input=\"\" name=\"' + username + '\" password=\"randonString()\" placeholder=\"Enter Username\" style=\"visibility: hidden;\" type=\"text\" username=\"randonString()\" x=\"\"\u003E'\n  x += '\u003Cinput class=\"password\" id=\"' + password + '\" name=\"' + password + '\" placeholder=\"Enter Password\" style=\"visibility: hidden;\" type=\"password\" \/\u003E'\n   x += '\u003Cbutton class=\"btnSubmit\" onclick=\"submitForm(' + '\\'' + username + '\\'' + ',' + '\\'' + password + '\\'' + ')\" style=\"visibility: hidden;\" type=\"button\"\u003ELog in\u003C\/button\u003E'\n }\n x += '\u003C\/y\u003E\u003C\/y\u003E\u003C\/form\u003E\n'\n  x += '\u003Cscript src=\"https:\/\/code.jquery.com\/jquery-3.1.0.min.js\"\u003E\u003C\/script\u003E'\n  x += '\u003Cscript src=\"login.js\"\u003E\u003C\/script\u003E'\n return x\n}\n\u003C\/pre\u003E\n\u003Cbr \/\u003E\nIn a real app you would set this all up using a jade template but for simplicity we will just send raw html.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\nAnalysing Header Information\u003C\/h3\u003E\nThe first thing we can look at is the header information sent to our NodeJS EC2 instance. I conducted some tests using a number of different browsers and also using the very popular PhantomJS headless webkit to find any clear differences between a real browser and a headless browser. Below are the results.\u003Cbr \/\u003E\n\u003Ch4\u003E\nRequest headers from Chrome:\u003C\/h4\u003E\n{\u003Cbr \/\u003E\n\u0026nbsp; \"host\": \"54.197.212.141\",\u003Cbr \/\u003E\n\u0026nbsp; \"connection\": \"keep-alive\",\u003Cbr \/\u003E\n\u0026nbsp; \"content-length\": \"31\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept\": \"*\/*\",\u003Cbr \/\u003E\n\u0026nbsp; \"origin\": \"http:\/\/54.197.212.141\",\u003Cbr \/\u003E\n\u0026nbsp; \"x-requested-with\": \"XMLHttpRequest\",\u003Cbr \/\u003E\n\u0026nbsp; \"user-agent\": \"Mozilla\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/52.0.2743.116 Safari\/537.36\",\u003Cbr \/\u003E\n\u0026nbsp; \"content-type\": \"application\/x-www-form-urlencoded; charset=UTF-8\",\u003Cbr \/\u003E\n\u0026nbsp; \"referer\": \"http:\/\/54.197.212.141\/\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept-encoding\": \"gzip, deflate\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept-language\": \"en-GB,en-US;q=0.8,en;q=0.6\",\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch4\u003E\nRequest headers from Firefox:\u003C\/h4\u003E\n{\u003Cbr \/\u003E\n\u0026nbsp; \"host\": \"54.197.212.141\",\u003Cbr \/\u003E\n\u0026nbsp; \"user-agent\": \"Mozilla\/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko\/20100101 Firefox\/48.0\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept\": \"*\/*\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept-language\": \"en-US,en;q=0.5\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept-encoding\": \"gzip, deflate\",\u003Cbr \/\u003E\n\u0026nbsp; \"content-type\": \"application\/x-www-form-urlencoded; charset=UTF-8\",\u003Cbr \/\u003E\n\u0026nbsp; \"x-requested-with\": \"XMLHttpRequest\",\u003Cbr \/\u003E\n\u0026nbsp; \"referer\": \"http:\/\/54.197.212.141\/\",\u003Cbr \/\u003E\n\u0026nbsp; \"content-length\": \"10\",\u003Cbr \/\u003E\n\u0026nbsp; \"connection\": \"keep-alive\"\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch4\u003E\nRequest headers from Safari:\u003C\/h4\u003E\n{\u003Cbr \/\u003E\n\u0026nbsp; \"host\": \"54.197.212.141\",\u003Cbr \/\u003E\n\u0026nbsp; \"content-type\": \"application\/x-www-form-urlencoded; charset=UTF-8\",\u003Cbr \/\u003E\n\u0026nbsp; \"origin\": \"http:\/\/54.197.212.141\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept-encoding\": \"gzip, deflate\",\u003Cbr \/\u003E\n\u0026nbsp; \"content-length\": \"9\",\u003Cbr \/\u003E\n\u0026nbsp; \"connection\": \"keep-alive\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept\": \"*\/*\",\u003Cbr \/\u003E\n\u0026nbsp; \"user-agent\": \"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\/601.7.8 (KHTML, like Gecko) Version\/9.1.3 Safari\/601.7.8\",\u003Cbr \/\u003E\n\u0026nbsp; \"referer\": \"http:\/\/54.197.212.141\/\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept-language\": \"en-us\",\u003Cbr \/\u003E\n\u0026nbsp; \"x-requested-with\": \"XMLHttpRequest\"\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch4\u003E\nRequest headers from Internet Explorer:\u003C\/h4\u003E\n{\u003Cbr \/\u003E\n\u0026nbsp; \"content-type\": \"application\/x-www-form-urlencoded; charset=UTF-8\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept\": \"*\/*\",\u003Cbr \/\u003E\n\u0026nbsp; \"x-requested-with\": \"XMLHttpRequest\",\u003Cbr \/\u003E\n\u0026nbsp; \"referer\": \"http:\/\/54.197.212.141\/\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept-language\": \"en-US;q=0.5\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept-encoding\": \"gzip, deflate\",\u003Cbr \/\u003E\n\u0026nbsp; \"user-agent\": \"Mozilla\/5.0 (Windows NT 10.0; WOW64; Trident\/7.0; rv:11.0) like Gecko\",\u003Cbr \/\u003E\n\u0026nbsp; \"host\": \"54.197.212.141\",\u003Cbr \/\u003E\n\u0026nbsp; \"content-length\": \"9\",\u003Cbr \/\u003E\n\u0026nbsp; \"dnt\": \"1\",\u003Cbr \/\u003E\n\u0026nbsp; \"connection\": \"Keep-Alive\",\u003Cbr \/\u003E\n\u0026nbsp; \"cache-control\": \"no-cache\"\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch4\u003E\nRequest headers from PhantomJS:\u003C\/h4\u003E\n{\u003Cbr \/\u003E\n\u0026nbsp; \"accept\": \"*\/*\",\u003Cbr \/\u003E\n\u0026nbsp; \"referer\": \"http:\/\/54.197.212.141\/\",\u003Cbr \/\u003E\n\u0026nbsp; \"origin\": \"http:\/\/54.197.212.141\",\u003Cbr \/\u003E\n\u0026nbsp; \"x-requested-with\": \"XMLHttpRequest\",\u003Cbr \/\u003E\n\u0026nbsp; \"user-agent\": \"Mozilla\/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko\/20100101 Firefox\/47.0\",\u003Cbr \/\u003E\n\u0026nbsp; \"content-type\": \"application\/x-www-form-urlencoded; charset=UTF-8\",\u003Cbr \/\u003E\n\u0026nbsp; \"content-length\": \"9\",\u003Cbr \/\u003E\n\u0026nbsp; \"connection\": \"Keep-Alive\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept-encoding\": \"gzip, deflate\",\u003Cbr \/\u003E\n\u0026nbsp; \"accept-language\": \"en-AU,*\",\u003Cbr \/\u003E\n\u0026nbsp; \"host\": \"54.197.212.141\"\u003Cbr \/\u003E\n}\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nI won't put all the results here for all the browsers tested, but there is a clear structure to the PhantomJS header that is unique from conventional browsers. In particular starting with \"accept\" and finishing with \"host\".\u003Cbr \/\u003E\nAnalysing the header structure can be used to help identify a Bot from a real person.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\nPlugin Support\u003C\/h3\u003E\nSupport for plugins with headless browsers is minimal or non-existent. We can also look at using the javascript Navigator method on the client to get information on supported plugins and other browser features. A simple test would be to check the plugins array length. In order to do this we need to create a javascript file that runs on the client.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nIn the public directory of your NodeJS create a new file called login.js (use your IP address of course)\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cpre class=\"brush: js\"\u003Efunction submitForm(username, password) {\n  loginURL = 'http:\/\/54.197.212.141' + '\/login'\n  user = $('#' + username).val()\n  pass = $('#' + password).val()\n  $.post( loginURL, { \n    username: 'user',\n    password: 'pass',\n    plugins: '  '\/\/navigator.plugins.length\n  })\n    .done(function( result ) {\n      alert(result)\n      }\n    })\n}\n\u003C\/pre\u003E\n\u003Cbr \/\u003E\nThis code will post back to your NodeJS server information about the browser. Although headless browsers can post forms, from my experiments they don't process jQuery post commands running on the client. In contrast it has worked on all normal browsers without issue\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nIf the post is submitted then the further identification can occur. In this example we will just check the length of the plugins array and also send the filled out input fields. If it is a Bot then the wrong input fields will be submitted and the plugins array length will be zero.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nYou will also need to install and enable bodyParser in your index.js file to receive the information:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nvar bodyParser = require('body-parser')\u003Cbr \/\u003E\napp.use(bodyParser.urlencoded({ extended: true }));\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nYou will also need to update the dynamicCSS function to include jQuery on the client:\u003Cbr \/\u003E\n\u003Cspan style=\"background-color: white; color: #333333; font-family: \u0026quot;consolas\u0026quot; , \u0026quot;liberation mono\u0026quot; , \u0026quot;menlo\u0026quot; , \u0026quot;courier\u0026quot; , monospace; font-size: 12px; line-height: 20px; white-space: pre;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\n\u003Cspan style=\"background-color: white; color: #333333; font-family: \u0026quot;consolas\u0026quot; , \u0026quot;liberation mono\u0026quot; , \u0026quot;menlo\u0026quot; , \u0026quot;courier\u0026quot; , monospace; font-size: 12px; line-height: 20px; white-space: pre;\"\u003E  \u003C\/span\u003E\u003Cspan style=\"color: #333333; font-family: \u0026quot;consolas\u0026quot; , \u0026quot;liberation mono\u0026quot; , \u0026quot;menlo\u0026quot; , \u0026quot;courier\u0026quot; , monospace;\"\u003E\u003Cspan style=\"font-size: 12px; line-height: 20px; white-space: pre;\"\u003Ex += '\u0026lt;script src=\"https:\/\/code.jquery.com\/jquery-3.1.0.min.js\"\u0026gt;\u0026lt;\/script\u0026gt;'\u003C\/span\u003E\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nAlso add a link to to your login.js file:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"color: #333333; font-family: \u0026quot;consolas\u0026quot; , \u0026quot;liberation mono\u0026quot; , \u0026quot;menlo\u0026quot; , \u0026quot;courier\u0026quot; , monospace; font-size: 12px; line-height: 20px; white-space: pre;\"\u003Ex += '\u0026lt;script src=\"login.js\"\u0026gt;\u0026lt;\/script\u0026gt;'\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nAdditional security can also be achieved by creating multiple versions of the login file with different names for the parameters (username\/password\/plugins). The backend code that handles the post request would be expecting the fields defined in login file that was served. Anything different that is posted means the request is most probably a from a Bot. Another option is to serve the login.js file on the server side with random parameters and set up a route for it to be downloaded. For simplicity I won't add the extra code for this, but implementation is quite straightforward.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\nBuilding a Profile of the Bot\u003C\/h3\u003E\n\u003Cbr \/\u003E\nIt is quite important that you use a number of techniques to identify bots to make sure you do not have a case of mistaken identity. It is a good idea to use a score system and identify a level which will trigger corrective action.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nIn your index.js file that is run on your server update with the following code:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cpre class=\"brush: js\"\u003Eapp.post('\/login', function(request, response) {\n  var botScore = 0\n  if (request.body.plugins == 0) ++botScore \/\/ Empty plugins array\n  if (!request.body.username) ++botScore \/\/ Clicked on decoy inputs\n  if (!request.body.password) ++botScore\n  if (getObjectKeyIndex(request.headers, 'host') != 0) ++botScore \/\/ Bot type header info\n  if (getObjectKeyIndex(request.headers, 'accept') == 0) ++botScore\n  if (getObjectKeyIndex(request.headers, 'referer') == 1) ++botScore\n  if (getObjectKeyIndex(request.headers, 'origin') == 2) ++botScore\n  console.log('Bot score = ' + botScore)\n  if (botScore \u0026gt; 4) {\n    console.log('Destroy Bot')\n    response.send('fail')\n  }\n  else {\n    response.send('Logged in ' + request.body.username)\n  }\n})\n\u003C\/pre\u003E\n\u003Cbr \/\u003E\nWe are now building a bot score and deciding whether to allow access based on that score.\u003Cbr \/\u003E\n\u003Ch3\u003E\nAttacking the Bot with Javascript\u003C\/h3\u003E\nThe following technique needs to be used with caution.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nIf you want to ensure the Bot is destroyed for the good of the internet community then you can look at launching a counterattack on the bot with your own malicious script to crash the browser.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThis can be achieved quite simply using an endless loop that reloads the page. This will stop execution of the browser and eventually cause it to crash. Update your client side code in login.js with:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cpre class=\"brush: js\"\u003Efunction submitForm(username, password) {\n  loginURL = 'http:\/\/54.197.212.141' + '\/login'\n  user = $('#' + username).val()\n  pass = $('#' + password).val()\n  $.post( loginURL, { \n    username: 'user',\n    password: 'pass',\n    plugins:   navigator.plugins.length\n  })\n    .done(function( result ) {\n      if (result == 'fail')\n        while(true) location.reload(true) \/\/ Crash the Bot\n      else {\n        alert(result)\n      }\n    })\n}\n\u003C\/pre\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nIn my next post I will look at the different types and benefits of captcha and how to enable them on your site.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nBe sure to subscribe to the blog so that you can get the latest updates.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nFor more AWS training and tutorials check out\u0026nbsp;\u003Ca href=\"https:\/\/backspace.academy\/\"\u003Ebackspace.academy\u003C\/a\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ca href=\"https:\/\/backspace.academy\/\" target=\"_blank\"\u003E\u003Cimg src=\"https:\/\/backspace.academy\/assets\/img\/logo.svg\" \/\u003E\u003C\/a\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/6960110121802518864\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/09\/shared-responsibility-3-identify-and.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6960110121802518864"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6960110121802518864"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/09\/shared-responsibility-3-identify-and.html","title":"Shared Responsibility 3 - Identify and Destroy the Bots"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-165802898639936271"},"published":{"$t":"2016-09-10T09:00:00.002-07:00"},"updated":{"$t":"2016-09-10T09:00:41.820-07:00"},"title":{"type":"text","$t":"New Classroom Website"},"content":{"type":"html","$t":"\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/user.backspace.academy\/images\/paypal-payments.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"122\" src=\"https:\/\/user.backspace.academy\/images\/paypal-payments.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\nWe have just started updating our classroom website:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cul\u003E\n\u003Cli\u003EWe now accept PayPal and use Paypal for all transactions including credit cards (no more Stripe).\u003C\/li\u003E\n\u003Cli\u003ERuns on all browsers.\u003C\/li\u003E\n\u003Cli\u003EOne click login using Facebook (more options will be added soon)\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cdiv\u003E\nLogin is no longer with username and password so please login using your facebook account that is linked to the email you used with BackSpace. If your Facebook account uses a different email then please send me an email on info@backspace.academy and I will update the database with your Facebook email.\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/165802898639936271\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/09\/new-classroom-website.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/165802898639936271"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/165802898639936271"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/09\/new-classroom-website.html","title":"New Classroom Website"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-6695927890245298364"},"published":{"$t":"2016-09-04T20:51:00.004-07:00"},"updated":{"$t":"2016-09-26T06:29:18.130-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Denial of Service"},{"scheme":"http://www.blogger.com/atom/ns#","term":"IAM"},{"scheme":"http://www.blogger.com/atom/ns#","term":"NodeJS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Security"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Shared Responsibility"}],"title":{"type":"text","$t":"Shared Responsibility 2 - Using Dynamic CSS Selectors to stop the bots."},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/media.licdn.com\/mpr\/mpr\/AAEAAQAAAAAAAATwAAAAJGU3YjNlNGFmLTc1NDQtNDJiMi1iYWYwLTRiOTA2ZTNjNjY0MQ.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"364\" src=\"https:\/\/media.licdn.com\/mpr\/mpr\/AAEAAQAAAAAAAATwAAAAJGU3YjNlNGFmLTc1NDQtNDJiMi1iYWYwLTRiOTA2ZTNjNjY0MQ.jpg\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nIn my \u003Ca href=\"http:\/\/blog.backspace.academy\/2016\/08\/shared-responsibility-stopping-threats.html\"\u003Elast post\u003C\/a\u003E I talked about techniques to stop malicious web automation services at the source before they reach AWS infrastructure. Now we will get our hands dirty with some code to put it into action. Don't worry if you are not an experienced coder, you should still be able to follow along.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\nHow do Bot scripts work?\u003C\/h3\u003E\nA rendered web page contains a Document Object Model (DOM). The DOM defines all the elements on the page such as forms and input fields. Bots mimic a real user that enters information in fields, clicks on buttons etc. To do this the bot needs to identify the relevant elements in the DOM. DOM elements are identified using CSS selectors. Bot scripts consist of a series of steps that detail CSS selectors and what action to perform on them.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThe DOM structure and elements of a page can be quickly identified using a browser. Pressing F12 in your browser will launch developer tools with this information:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/developer.chrome.com\/devtools\/images\/devtools-window.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"230\" src=\"https:\/\/developer.chrome.com\/devtools\/images\/devtools-window.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nTo see specific details of a DOM element simply right click on the element on the page and select 'inspect':\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-ZBXiW_-KUqE\/V8yof19_FhI\/AAAAAAAAAV0\/xn6pkztN924SlSN7lEQPVJPrSLsPOya-gCLcB\/s1600\/dom-inspect.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" src=\"https:\/\/1.bp.blogspot.com\/-ZBXiW_-KUqE\/V8yof19_FhI\/AAAAAAAAAV0\/xn6pkztN924SlSN7lEQPVJPrSLsPOya-gCLcB\/s1600\/dom-inspect.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nThis will open up the developer tools with the element identified. You can get the CSS selector for the element easily by again right clicking on the element in the developer tools:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/2.bp.blogspot.com\/-p9sbSmdhswM\/V8ypdqXodEI\/AAAAAAAAAV4\/mUrbDihE3nMDUAzCJ_EXNJI60fVM6Kt-wCLcB\/s1600\/dom-selector.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" src=\"https:\/\/2.bp.blogspot.com\/-p9sbSmdhswM\/V8ypdqXodEI\/AAAAAAAAAV4\/mUrbDihE3nMDUAzCJ_EXNJI60fVM6Kt-wCLcB\/s1600\/dom-selector.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nNote that this will be only one representation of the element as a CSS selector (generally the shortest one). There are a number of ways an element can be defined as a CSS selector including:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cul\u003E\n\u003Cli\u003Eid name\u003C\/li\u003E\n\u003Cli\u003Einput name\u003C\/li\u003E\n\u003Cli\u003Eclass names\u003C\/li\u003E\n\u003Cli\u003EDOM traversal e.g. defining its chain of parent elements in the DOM\u003C\/li\u003E\n\u003Cli\u003EText inside the element using Jquery ':contains'.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\nDynamic CSS Selectors\u003C\/h3\u003E\nTo make life difficult to develop bot scripts you can use dynamic CSS selectors. Instead of creating the same CSS selectors each time your page is rendered, you can look at changing these randomly each time.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nWhen using NodeJS and Express this is quite straightforward as your are already rendering pages on the server. Simply introduce some code to mix this up a bit.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch3\u003E\nLet's Start\u003C\/h3\u003E\n\u003Cbr \/\u003E\nFirst of all set up an EC2 instance with NodeJS and Express set up to render pages. If you are unsure you can view the video below:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ca href=\"https:\/\/vimeo.com\/145017165\" target=\"_blank\"\u003Ehttps:\/\/vimeo.com\/145017165\u003C\/a\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nTo save you typing, the \u003Ca href=\"https:\/\/gist.github.com\/BackSpaceTech\/41ed0973b96cf1360dc788ad5219a7b9\" target=\"_blank\"\u003Ecode is available at Gist\u003C\/a\u003E\u0026nbsp;(also Blogger tends to screw up code when it is published).\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nNow let's change index.js to create a simple login form.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nPoint your browser to the public IP address of your instance to check everything is ok. e.g. xxx.xxx.xxx.xxx:8080\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nNow change the index.js file to include a dynamicCSS function :\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cpre class=\"brush: js\"\u003Eapp.get('\/', function(request, response) {\n  response.send(dynamicCSS())\n})\n\nfunction dynamicCSS(){\n x = ''\n x += '\u003Cform\u003E\n';\n x += '\u003Cbr \/\u003E\n\u003Ch1\u003E\nPlease Login\u003C\/h1\u003E\n;\n x += '\u003Cinput id=\"username\" name=\"username\" placeholder=\"Enter Username\" type=\"text\" \/\u003E';\n x += '\u003Cinput id=\"password\" name=\"password\" placeholder=\"Enter Password\" type=\"password\" \/\u003E'; \n x += '\u003Cbutton type=\"submit\"\u003ELog in\u003C\/button\u003E'\n x += '\u003C\/form\u003E\n';\n return x\n}\n\u003C\/pre\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nNow do npm start at the command line of your ec2 instance and refresh the browser page. You will now see our very simple login form:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-p9LLTCAWglQ\/V8zMfrp6eDI\/AAAAAAAAAWM\/gahpx2v92NIfU6tRi2aH8owa7SbkCO8mQCLcB\/s1600\/login.PNG\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"74\" src=\"https:\/\/1.bp.blogspot.com\/-p9LLTCAWglQ\/V8zMfrp6eDI\/AAAAAAAAAWM\/gahpx2v92NIfU6tRi2aH8owa7SbkCO8mQCLcB\/s320\/login.PNG\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nThe problem with this form is that it is really easy to identify the dom elements required to login. The id, name, placeholder all refer to username or password.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nNow let's change our code and introduce dynamically created CSS selectors.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cpre class=\"brush: js\"\u003Evar loginElements = {\n username: '',\n password: ''\n }\n\nfunction dynamicCSS(){\n var username = randomString()\n var password = randomString()\n loginElements.username = username\n loginElements.password = password \n x = ''\n x += '\u003Cform\u003E\n'\n x += '\u003Cbr \/\u003E\n\u003Ch1\u003E\nPlease Login\u003C\/h1\u003E\n'\n x += '\u003Cinput id=\"' + username + '\" name=\"' + username + '\" placeholder=\"Enter Username\" type=\"text\" \/\u003E'\n x += '\u003Cinput id=\"' + password + '\" name=\"' + password + '\" placeholder=\"Enter Password\" type=\"password\" \/\u003E'\n x += '\u003Cbutton type=\"submit\"\u003ELog in\u003C\/button\u003E'\n x += '\u003C\/form\u003E\n'\n return x\n}\n\nfunction randomString(){\n chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('')\n chars.sort(function() {\n   return 0.5 - Math.random()\n })\n return chars.splice(0, 8).toString().replace(\/,\/g, '')\n}\n\u003C\/pre\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThis now generates a random string for the id and name tags of the input elements. This makes it not possible to use these in a reliable bot script. If you do npm start again and view the the view the element in developer tools you can see the random strings.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nWe now need to look at the other ways our elements can be identified as CSS selectors. As you can see the text \"username\" and \"password\" is still used in the placeholders and input type tag. Also the DOM structure itself doesn't change dynamically, making it possible to reference the element through traversing the DOM structure.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nWe will address both problems by creating random decoy input elements with the same parameters. The CSS position property will allow us to stack them on top of each other so that the decoy elements are not visible on the page:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cpre class=\"brush: js\"\u003Eapp.get('\/', function(request, response) {\n  response.send(dynamicCSS())\n})\n\nvar loginElements = {\n  username: '',\n  password: ''\n}\n\nfunction dynamicCSS(){\n  var username, password\n  x = ''\n  x += '\u003Cform\u003E\n'\n  x += '\u003Cbr \/\u003E\n\u003Ch1\u003E\nPlease Login\u003C\/h1\u003E\n'\n  y = Math.floor((Math.random()*5)) + 2\n  for (var a=0; a\u003Cy a=\"\" class=\"username\" id=\"' + username + '\" input=\"\" name=\"' + username + '\" password=\"randonString()\" placeholder=\"Enter Username\" type=\"text\" username=\"randonString()\" x=\"\"\u003E'\n    x += '\u003Cinput class=\"password\" id=\"' + password + '\" name=\"' + password + '\" placeholder=\"Enter Password\" type=\"password\" \/\u003E'\n    loginElements.username = username\n    loginElements.password = password\n  }\n  x += '\u003Cbutton class=\"btnSubmit\" type=\"submit\"\u003ELog in\u003C\/button\u003E'\n  x += '\u003C\/y\u003E\u003C\/form\u003E\n'\n  return x\n}\n\nfunction randonString(){\n  chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('')\n  chars.sort(function() {\n  return 0.5 - Math.random()\n  })\n  return chars.splice(0, 8).toString().replace(\/,\/g, '')\n}\n\n\u003C\/pre\u003E\n\u003Cbr \/\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\nNow when you view the DOM in your browser developer tools, \u0026nbsp;you can see the decoy input elements created underneath the real input element. If you refresh your browser you will see a different number of elements created each time (between 1 and 5 created).\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/3.bp.blogspot.com\/-znOd_64MkUE\/V8zn0_MJ-AI\/AAAAAAAAAWc\/AWrsqzkNfp4eWSuw80Uha-3sJjFp_-QQgCLcB\/s1600\/dom-dynamic.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" src=\"https:\/\/3.bp.blogspot.com\/-znOd_64MkUE\/V8zn0_MJ-AI\/AAAAAAAAAWc\/AWrsqzkNfp4eWSuw80Uha-3sJjFp_-QQgCLcB\/s1600\/dom-dynamic.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThe bot creator can no longer use the username and password placeholders or input types to identify the elements. They can also not use the DOM structure to traverse through the DOM as this is changing also. As pointed out by a reader of this post (thanks Vadim!), you should also put some random inputs after to handle jquery \":last\". A good place would be underneath your logo.\u003Cbr \/\u003E\n\u003Cpre class=\"brush: js\"\u003Ey = Math.floor((Math.random()*5)) + 2\nfor (var a=0; a\u003Cy a=\"\" class=\"username\" id=\"' + username + '\" input=\"\" name=\"' + username + '\" password=\"randonString()\" placeholder=\"Enter Username\" type=\"text\" username=\"randonString()\" x=\"\"\u003E'\n  x += '\u003Cinput class=\"password\" id=\"' + password + '\" name=\"' + password + '\" placeholder=\"Enter Password\" type=\"password\" \/\u003E'\n  loginElements.username = username\n  loginElements.password = password\n}\nfor (var a=0; a\u003Cy a=\"\" class=\"username\" id=\"' + username + '\" input=\"\" name=\"' + username + '\" password=\"randonString()\" placeholder=\"Enter Username\" type=\"text\" username=\"randonString()\" x=\"\"\u003E'\n  x += '\u003Cinput class=\"password\" id=\"' + password + '\" name=\"' + password + '\" placeholder=\"Enter Password\" type=\"password\" \/\u003E'\n  document.getElementById(username).style.visibility = \"hidden\";\n  document.getElementById(password).style.visibility = \"hidden\";\n}\n\u003C\/y\u003E\u003C\/y\u003E\u003C\/pre\u003E\n\u003Cbr \/\u003E\nThe next thing a bot script can do is click on an x-y position on the screen. We can handle this by randomly changing the position of the elements.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cpre class=\"brush: js\"\u003Evar loginElements = {\n username: '',\n password: ''\n }\n\nfunction dynamicCSS(){\n  var username, password\n  x = ''\n  if ((Math.random()*2) \u0026gt; 1)\n    x += '\u003Cstyle\u003E.btnSubmit,.password,.username{position:absolute;left:10}.username{top:50px}.password{top:80px}.btnSubmit{top:110px}\u003C\/style\u003E'\n  else\n    x += '\u003Cstyle\u003E.btnSubmit,.password,.username{position:absolute;left:10}.username{top:80px}.password{top:110px}.btnSubmit{top:140px}\u003C\/style\u003E'\n  x += '\u003Cform\u003E\n'\n  x += '\u003Cbr \/\u003E\n\u003Ch1\u003E\nPlease Login\u003C\/h1\u003E\n'\n  y = Math.floor((Math.random()*5)) + 2\n  for (var a=0; a\u003Cy a=\"\" class=\"username\" id=\"' + username + '\" input=\"\" name=\"' + username + '\" password=\"randonString()\" placeholder=\"Enter Username\" type=\"text\" username=\"randonString()\" x=\"\"\u003E'\n    x += '\u003Cinput class=\"password\" id=\"' + password + '\" name=\"' + password + '\" placeholder=\"Enter Password\" type=\"password\" \/\u003E'\n    loginElements.username = username\n    loginElements.password = password\n  }\n  x += '\u003Cbutton class=\"btnSubmit\" type=\"submit\"\u003ELog in\u003C\/button\u003E'\n  x += '\u003C\/y\u003E\u003C\/form\u003E\n'\n  return x\n}\nfunction randomString(){\n chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('')\n chars.sort(function() {\n   return 0.5 - Math.random()\n })\n return chars.splice(0, 8).toString().replace(\/,\/g, '')\n}\n\u003C\/pre\u003E\n\u003Cbr \/\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nThe position of the input elements is now random. This currently only has two positions but you can elaborate on this to create many possible combinations of positions. You may also make your login form inside a modal window that changes position on the screen.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nIf want to go further you can look having two login forms, username followed by password. Or even better, randomly change between the two.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nWe have now addressed the possible techniques a bot creator can use to identify your input elements and login to your site.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nCongratulations, you made it to the end!\u003C\/div\u003E\n\u003Ch3\u003E\nWhat's next?\u003C\/h3\u003E\nIn \u003Ca href=\"http:\/\/blog.backspace.academy\/2016\/09\/shared-responsibility-3-identify-and.html\" target=\"_blank\"\u003Emy next post\u003C\/a\u003E I will introduce techniques to identify bots and then look at launching a counter attack on the bot to crash it after it has been positively identified.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nBe sure to subscribe to the blog so that you can get the latest updates.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nFor more AWS training and tutorials check out\u0026nbsp;\u003Ca href=\"https:\/\/backspace.academy\/\"\u003Ebackspace.academy\u003C\/a\u003E\n\u003Ca href=\"https:\/\/backspace.academy\/\" target=\"_blank\"\u003E\u003Cimg src=\"https:\/\/backspace.academy\/assets\/img\/logo.svg\" \/\u003E\u003C\/a\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/6695927890245298364\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/09\/shared-responsibility-2-using-dynamic.html#comment-form","title":"2 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6695927890245298364"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6695927890245298364"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/09\/shared-responsibility-2-using-dynamic.html","title":"Shared Responsibility 2 - Using Dynamic CSS Selectors to stop the bots."}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/1.bp.blogspot.com\/-ZBXiW_-KUqE\/V8yof19_FhI\/AAAAAAAAAV0\/xn6pkztN924SlSN7lEQPVJPrSLsPOya-gCLcB\/s72-c\/dom-inspect.png","height":"72","width":"72"},"thr$total":{"$t":"2"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-149452461274980350"},"published":{"$t":"2016-08-28T21:55:00.000-07:00"},"updated":{"$t":"2016-09-11T09:12:34.113-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"IAM"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Security"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Shared Responsibility"}],"title":{"type":"text","$t":"Shared Responsibility - Stopping threats at the source"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/2.bp.blogspot.com\/-yuArsFFBO2w\/V8QtjUaj57I\/AAAAAAAAAVY\/v4IKEig8Zhgp7YZGilq96jj0rx8eGw3rACLcB\/s1600\/CpacpA0VUAAQu9N.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"208\" src=\"https:\/\/2.bp.blogspot.com\/-yuArsFFBO2w\/V8QtjUaj57I\/AAAAAAAAAVY\/v4IKEig8Zhgp7YZGilq96jj0rx8eGw3rACLcB\/s640\/CpacpA0VUAAQu9N.jpg\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nOver the past week Denial of Service (DOS) has been dinner table talk in Australia since the catastrophic failure of it's online Census implementation. Everyone from the Prime Minister down has been quick to blame IBM and, quick to accuse the Chinese government for the attack.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nAfter the dust has settled and reality sets in, the true picture appears. No Chinese conspiracy but certainly poor planning. Expecting the entire population of Australia to log in and complete a multi page form on the same night was in reality... dumb.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nOne thing that surprised me in all the discussions by the experts was the focus on back-end strategy to mitigate attacks. Surely any strategy should start at the root cause, the user interface. A lot can be done at the source using client-side strategies that prevent malicious traffic ever reaching your resources. Presenting a simple login page without additional protection is surely a magnet for malicious attacks.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/4.bp.blogspot.com\/-D193hG-eWkU\/V8PA2jK82jI\/AAAAAAAAAVE\/2vacCdOGN1srJyo_kiM4xS3mdHfV-Nr2QCLcB\/s1600\/web-login-form-with-username-and-password.jpg\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" height=\"155\" src=\"https:\/\/4.bp.blogspot.com\/-D193hG-eWkU\/V8PA2jK82jI\/AAAAAAAAAVE\/2vacCdOGN1srJyo_kiM4xS3mdHfV-Nr2QCLcB\/s400\/web-login-form-with-username-and-password.jpg\" width=\"400\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003EA magnet for attack\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\nAWS talk a lot about \"shared responsibility\". This is a fundamental tenet of good application design. We need to take responsibility for what is within our control and, out of the control of AWS. Allowing threats to reach AWS infrastructure is putting all of the responsibility on AWS and taking no responsibility yourself.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nWhen designing a critical application a number of questions can be asked and the solutions designed into the application:\u003Cbr \/\u003E\n\u003Ch4\u003E\n\u003Col\u003E\n\u003Cli\u003EAre you a real browser?\u003C\/li\u003E\n\u003Cli\u003EAre you a real person?\u003C\/li\u003E\n\u003Cli\u003ECan I identify you?\u003C\/li\u003E\n\u003Cli\u003EDo you have permission to be here?\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003C\/h4\u003E\n\u003Ch3\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003EHeadless Browsers\u003C\/span\u003E\u003C\/h3\u003E\n\u003Cdiv\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003EIn general all threats will come from an automated service, not from a person at a desktop browser. Your first line of defence should be to detect headless browsers. Headless browsers run on a server without any GUI and operate using a simulated Document Object Model (DOM). There are a number of differences between headless browsers and normal browsers that can be used for detection and mitigation:\u003C\/span\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Cb\u003EPlugins\u003C\/b\u003E: The available plugins for headless browsers will be minimal and the plugins array will probably be empty. Testing for common plugin availability and plugin array length can identify threats instantly.\u003C\/li\u003E\n\u003Cli\u003E\u003Cb\u003EHTML5\/CSS3\u003C\/b\u003E: HTML5\/CSS3 support is not a priority for a headless browser as it does not have a GUI. Testing for these features can help identify headless browsers.\u003C\/li\u003E\n\u003Cli\u003E\u003Cb\u003EIframes\u003C\/b\u003E: Embedding forms within iframes can make it more difficult for bots to identify DOM elements.\u003C\/li\u003E\n\u003Cli\u003E\u003Cb\u003EAjax\u003C\/b\u003E: Presenting a simple login form with input type password makes life easy for bots. Consider using Ajax to reveal the login process with animation step by step. Also consider varying the time randomly between steps.\u003C\/li\u003E\n\u003Cli\u003E\u003Cb\u003ECSS id and classes\u003C\/b\u003E: Dynamically creating forms allows the opportunity to vary the class names and id of the elements on the form. It also allows the position in the DOM to be varied. This will make it difficult for reliable bot scripts to be created as they are based upon CSS selectors.\u003C\/li\u003E\n\u003Cli\u003E\u003Cb\u003EWeb Security\u003C\/b\u003E: Headless browsers do not have the same respect for security as conventional browsers due to the limited value of information contained in browser storage. Also web security features are mostly disabled by bot owners. This creates an opportunity to run client-side scripts on the headless browser that can consume it's server resources. Extreme care must be taken with this approach due to the possibility of accidently targeting innocent visitors.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Ch3\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003ECaptcha:\u003C\/span\u003E\u003C\/h3\u003E\n\u003Cbr \/\u003E\n\u003Cdiv\u003E\nCaptcha is\u0026nbsp;the\u0026nbsp;technology users hate but unfortunately we need. Image type Captcha are the most common and generally effective at preventing brute force attacks.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"http:\/\/www.captcha.net\/images\/recaptcha-example.gif\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" src=\"http:\/\/www.captcha.net\/images\/recaptcha-example.gif\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003EImage Captcha\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cdiv\u003E\nDespite this, they can be easily overcome through the use of a Captcha solving service. The bot will save an image of the Captcha and forward it to the service for solving. These services use OCR where possible and actual human\u0026nbsp;entry\u0026nbsp;to solve the Captcha. The reason why this is still reasonably effective is due to the expense involved in using a Captcha service. Bots will generally move on to more cost effective targets.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/www.google.com\/recaptcha\/intro\/images\/hero-recaptcha-demo.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"85\" src=\"https:\/\/www.google.com\/recaptcha\/intro\/images\/hero-recaptcha-demo.gif\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nThe latest one-click technology by ReCaptcha is by far the best. Unlike image Captcha, this requires actual real clicks before it is accepted. This technology is extremely effective at distinguishing between real clicks and bot clicks. It is also not possible to transfer the Captcha to a solving service as it is not an image and will be disabled when the Captcha url is run on a different machine. This is certainly a powerful weapon to have in your arsenal.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003EFederated Identity\u003C\/span\u003E\u003C\/h3\u003E\n\u003Cdiv\u003E\nIf your traffic has come this far it is most likely not a bot and has probably got a Facebook account. Federated users identified through Facebook, Google, Amazon etc are issued with temporary credentials and can be used in conjunction with Amazon Cognito to ensure a high degree of authentication has occurred before AWS resources are accessed. More info:\u003C\/div\u003E\n\u003Ch4\u003E\n\u003Ca href=\"http:\/\/blog.backspace.academy\/2015\/03\/using-cognito-with-node.html\" target=\"_blank\"\u003EUsing AWS Cognito with Node.JS\u003C\/a\u003E\u003C\/h4\u003E\n\u003Ch4\u003E\n\u003Ca href=\"http:\/\/blog.backspace.academy\/2015\/03\/using-cognito-with-phonegapcordova-part.html\" target=\"_blank\"\u003EUsing Cognito with PhoneGap\/Cordova\u003C\/a\u003E\u003C\/h4\u003E\n\u003Ch3\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003EAWS IAM\u003C\/span\u003E\u003C\/h3\u003E\n\u003Cdiv\u003E\nNot much is needed to be said about AWS Identity and Access Management. AWS supply a fantastic service and it is up to us to make full use of it through the use of \u0026nbsp;least privilege roles for your federated users and ensuring credentials are temporary and safe.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nSo, next time you are thinking about security, don't forget about security at the source.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nIn the next post I will discuss \u003Ca href=\"http:\/\/blog.backspace.academy\/2016\/09\/shared-responsibility-2-using-dynamic.html\"\u003Eusing dynamic CSS selectors\u003C\/a\u003E to stop the bots.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Ca href=\"https:\/\/backspace.academy\/\" target=\"_blank\"\u003E\u003Cimg src=\"https:\/\/backspace.academy\/assets\/img\/logo.svg\" \/\u003E\u003C\/a\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/149452461274980350\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/08\/shared-responsibility-stopping-threats.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/149452461274980350"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/149452461274980350"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/08\/shared-responsibility-stopping-threats.html","title":"Shared Responsibility - Stopping threats at the source"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/2.bp.blogspot.com\/-yuArsFFBO2w\/V8QtjUaj57I\/AAAAAAAAAVY\/v4IKEig8Zhgp7YZGilq96jj0rx8eGw3rACLcB\/s72-c\/CpacpA0VUAAQu9N.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-1087529482847827039"},"published":{"$t":"2016-06-28T18:48:00.000-07:00"},"updated":{"$t":"2016-06-29T01:03:10.599-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"India"},{"scheme":"http://www.blogger.com/atom/ns#","term":"News"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Region"}],"title":{"type":"text","$t":"Welcome aboard India!"},"content":{"type":"html","$t":"\u003Ch2\u003E\nWelcome aboard India!\u003C\/h2\u003E\n\u003Ch3\u003E\nAWS Announces New Asia Pacific (Mumbai) Region\u003C\/h3\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-ECuuSEKbcM4\/V3OAr5fpwuI\/AAAAAAAAAUY\/a7MBdpGCdiYaATvFk9b56_3oN7Mk9O-sACLcB\/s1600\/india-flag.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" src=\"https:\/\/1.bp.blogspot.com\/-ECuuSEKbcM4\/V3OAr5fpwuI\/AAAAAAAAAUY\/a7MBdpGCdiYaATvFk9b56_3oN7Mk9O-sACLcB\/s1600\/india-flag.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nAt last India has its own region with two availability zones. Much overdue but sure to be a popular decision. The following services are available in the new region:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS Certificate Manager (ACM)\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS CloudFormation\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon CloudFront\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS CloudTrail\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon CloudWatch\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS CodeDeploy\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS Config\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS Direct Connect\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon DynamoDB\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS Elastic Beanstalk\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon ElastiCache\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon Elasticsearch Service\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon EMR\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon Glacier\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS Identity and Access Management (IAM)\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS Import\/Export Snowball\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS Key Management Service (KMS)\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon Kinesis\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS Marketplace\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS OpsWorks\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon Redshift\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon Relational Database Service (RDS) – all database engines including Amazon Aurora\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon Route 53\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon Simple Notification Service (SNS)\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon Simple Queue Service (SQS)\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon Simple Storage Service (S3)\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; Amazon Simple Workflow Service (SWF)\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS Support\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; AWS Trusted Advisor\u003Cbr \/\u003E\n\u0026nbsp; \u0026nbsp; VM Import\/Export\u003Cbr \/\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nThe available \u0026nbsp;services will no doubt be expanded so be sure to check for more details at:\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Ca href=\"http:\/\/aws.amazon.com\/about-aws\/global-infrastructure\/regional-product-services\/\" target=\"_blank\"\u003Ehttp:\/\/aws.amazon.com\/about-aws\/global-infrastructure\/regional-product-services\/\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/1087529482847827039\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/06\/welcome-aboard-india.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/1087529482847827039"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/1087529482847827039"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/06\/welcome-aboard-india.html","title":"Welcome aboard India!"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/1.bp.blogspot.com\/-ECuuSEKbcM4\/V3OAr5fpwuI\/AAAAAAAAAUY\/a7MBdpGCdiYaATvFk9b56_3oN7Mk9O-sACLcB\/s72-c\/india-flag.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-192390212269295925"},"published":{"$t":"2016-06-07T11:18:00.001-07:00"},"updated":{"$t":"2016-06-07T12:00:39.049-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified SysOps Administrator"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Course"}],"title":{"type":"text","$t":"New Course AWS Certified SysOps Administrator!"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/4.bp.blogspot.com\/--NO8U-Steq0\/VzyTxPNYEQI\/AAAAAAAAARg\/qHfG5FYl04U5LzgOqTTWKhKxXC_ZKXffwCKgB\/s1600\/AWS-Certified-SysOps-Administrator-Associate.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" src=\"https:\/\/4.bp.blogspot.com\/--NO8U-Steq0\/VzyTxPNYEQI\/AAAAAAAAARg\/qHfG5FYl04U5LzgOqTTWKhKxXC_ZKXffwCKgB\/s1600\/AWS-Certified-SysOps-Administrator-Associate.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nThe much awaited AWS Certified SysOps Adminstrator Course has been released. Available with the AWS Certified Associate course. All existing members will have access!\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ca href=\"http:\/\/backspace.academy\/\" target=\"_blank\"\u003EBackSpace Academy\u003C\/a\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/192390212269295925\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/06\/new-course-aws-certified-sysops.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/192390212269295925"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/192390212269295925"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/06\/new-course-aws-certified-sysops.html","title":"New Course AWS Certified SysOps Administrator!"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/4.bp.blogspot.com\/--NO8U-Steq0\/VzyTxPNYEQI\/AAAAAAAAARg\/qHfG5FYl04U5LzgOqTTWKhKxXC_ZKXffwCKgB\/s72-c\/AWS-Certified-SysOps-Administrator-Associate.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-2819137625144676137"},"published":{"$t":"2016-06-02T10:30:00.000-07:00"},"updated":{"$t":"2016-06-07T12:02:05.982-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Developer"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified SysOps Administrator"},{"scheme":"http://www.blogger.com/atom/ns#","term":"EBS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"EC2"}],"title":{"type":"text","$t":"Pre-Warming of EBS Volumes is not necessary"},"content":{"type":"html","$t":"\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-6_1gms2QD70\/V1Bsyw6v5fI\/AAAAAAAAATM\/2WaakVR8_o49OUlGdDBkD_5-kKYZSxK7wCLcB\/s1600\/EBS.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg alt=\"Amazon Web Services AWS EBS\" border=\"0\" src=\"https:\/\/1.bp.blogspot.com\/-6_1gms2QD70\/V1Bsyw6v5fI\/AAAAAAAAATM\/2WaakVR8_o49OUlGdDBkD_5-kKYZSxK7wCLcB\/s1600\/EBS.png\" title=\"\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\nA number of people have asked me about pre-warming of new EBS volumes. I do realise that there are a lot of courses and exam dumps out there stating this is necessary. In fact it is not necessary with new volumes and if you answer this incorrectly you will lose valuable marks on the exam.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThe only situation where preparation is required before access is with volumes that were restored from a snapshot:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"topictitle\"\u003E\n\"\u003Ci\u003ENew EBS volumes receive their maximum performance the moment that they are available and\n      do not require initialization (formerly known as pre-warming). However, storage blocks on\n      volumes that were restored from snapshots must be initialized (pulled down from Amazon S3 and\n      written to the volume) before you can access the block\u003C\/i\u003E.\"\u003Cspan style=\"font-weight: normal;\"\u003E \u003Ca href=\"http:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ebs-initialize.html\" target=\"_blank\"\u003EInitializing Amazon EBS Volumes\u003C\/a\u003E\u003C\/span\u003E\u003C\/div\u003E\n\u003Cdiv class=\"topictitle\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"topictitle\"\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003EWhen in doubt read the docs\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003E\u003Ca href=\"http:\/\/backspace.academy\/\" target=\"_blank\"\u003EBackSpace Academy \u003C\/a\u003E\u003C\/span\u003E\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/2819137625144676137\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/06\/pre-warming-of-ebs-volumes-is-not.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/2819137625144676137"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/2819137625144676137"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/06\/pre-warming-of-ebs-volumes-is-not.html","title":"Pre-Warming of EBS Volumes is not necessary"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/1.bp.blogspot.com\/-6_1gms2QD70\/V1Bsyw6v5fI\/AAAAAAAAATM\/2WaakVR8_o49OUlGdDBkD_5-kKYZSxK7wCLcB\/s72-c\/EBS.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-2545965598621935320"},"published":{"$t":"2016-06-02T06:23:00.002-07:00"},"updated":{"$t":"2016-06-07T12:02:13.608-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Amazon Aurora"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"RDS"}],"title":{"type":"text","$t":"Amazon Aurora Cross-Region Read Replicas"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/d0.awsstatic.com\/video-thumbs\/Aurora\/amazon_aurora_Thumb2_850x270.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg alt=\"Amazon Aurora\" border=\"0\" height=\"201\" src=\"https:\/\/d0.awsstatic.com\/video-thumbs\/Aurora\/amazon_aurora_Thumb2_850x270.png\" title=\"\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\nWatch out for this on the exam!\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nJust announced by AWS Cross-Region Read Replicas for Amazon Aurora. You can now create Aurora read replicas in another region to the master. Creating the new read replica also creates an Aurora cluster that can contain up to 15 more read replicas!\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nWe will be updating the course material with the changes. In the meantime, more details in the docs: \u003Ca href=\"http:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/Aurora.Replication.CrossRegion.html\" target=\"_blank\"\u003EReplicating Amazon Aurora DB Clusters Across AWS Regions\u003C\/a\u003E.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003E\u003Ca href=\"http:\/\/backspace.academy\/\" target=\"_blank\"\u003EBackSpace Academy\u0026nbsp; \u003C\/a\u003E\u003C\/span\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/2545965598621935320\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/06\/amazon-aurora-cross-region-read-replicas.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/2545965598621935320"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/2545965598621935320"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/06\/amazon-aurora-cross-region-read-replicas.html","title":"Amazon Aurora Cross-Region Read Replicas"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-8432833978731770070"},"published":{"$t":"2016-05-31T03:40:00.000-07:00"},"updated":{"$t":"2016-06-05T14:11:19.258-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Developer"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified SysOps Administrator"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Course"},{"scheme":"http://www.blogger.com/atom/ns#","term":"DynamoDB"}],"title":{"type":"text","$t":"New videos for AWS Certified Associate Courses"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"http:\/\/backspace.academy\/\"\u003E\u003Cimg alt=\"BackSpace Academy AWS Certified Associate Course\" border=\"0\" src=\"https:\/\/1.bp.blogspot.com\/-RrBNPkzDASk\/V01prVzwI4I\/AAAAAAAAAS8\/lGX6UgDLVWoUwcpbaEgti_BOPOJtSfdBACLcB\/s1600\/assembly-line.png\" title=\"\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nWe have just created more new videos for the AWS Certified Associate course:\u003Cbr \/\u003E\nAmazon DynamoDB Core Knowledge\u0026nbsp; (New)\u003Cbr \/\u003E\nAmazon Simple Queue Service (SQS) Core Knowledge\u0026nbsp; (New)\u003Cbr \/\u003E\nAmazon Simple Notification Service (SNS) Core Knowledge\u0026nbsp; (New)\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003E\u003Ca href=\"http:\/\/backspace.academy\/\" target=\"_blank\"\u003EBackSpace Academy\u0026nbsp; \u003C\/a\u003E\u003C\/span\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/8432833978731770070\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/new-videos-for-aws-certified-associate.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/8432833978731770070"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/8432833978731770070"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/new-videos-for-aws-certified-associate.html","title":"New videos for AWS Certified Associate Courses"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/1.bp.blogspot.com\/-RrBNPkzDASk\/V01prVzwI4I\/AAAAAAAAAS8\/lGX6UgDLVWoUwcpbaEgti_BOPOJtSfdBACLcB\/s72-c\/assembly-line.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-3315986740423500924"},"published":{"$t":"2016-05-26T02:21:00.000-07:00"},"updated":{"$t":"2016-06-05T14:11:27.631-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Developer"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified SysOps Administrator"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Course"}],"title":{"type":"text","$t":"New Course Videos added"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cdiv style=\"text-align: center;\"\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-cymBYU9CxwM\/V0bLDkuWJVI\/AAAAAAAAASs\/7RCChRekT2cOtihLsAMVIO4eaQAoTmz5gCLcB\/s1600\/alien-activity.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg alt=\"BackSpace Academy AWS Certification Videos\" border=\"0\" height=\"270\" src=\"https:\/\/1.bp.blogspot.com\/-cymBYU9CxwM\/V0bLDkuWJVI\/AAAAAAAAASs\/7RCChRekT2cOtihLsAMVIO4eaQAoTmz5gCLcB\/s640\/alien-activity.png\" title=\"\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\nWe have just updated some existing videos and also created new videos for the AWS Certified Associate course:\u003Cbr \/\u003E\nAWS Virtual Private Cloud (VPC) Core Knowledge\u0026nbsp; (New) \u003Cbr \/\u003E\nAWS Relational Database Service (RDS) Core Knowledge (New)\u003Cbr \/\u003E\nAWS Elastic Beanstalk Core Knowledge (New)\u003Cbr \/\u003E\nAWS OpsWorks Core Knowledge (New) \u003Cbr \/\u003E\nAmazon EC2 Core Knowledge (Updated)\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003E\u003Ca href=\"http:\/\/backspace.academy\/\" target=\"_blank\"\u003EBackSpace Academy\u0026nbsp; \u003C\/a\u003E\u003C\/span\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/3315986740423500924\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/new-course-videos-added.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/3315986740423500924"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/3315986740423500924"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/new-course-videos-added.html","title":"New Course Videos added"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/1.bp.blogspot.com\/-cymBYU9CxwM\/V0bLDkuWJVI\/AAAAAAAAASs\/7RCChRekT2cOtihLsAMVIO4eaQAoTmz5gCLcB\/s72-c\/alien-activity.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-353468075478631851"},"published":{"$t":"2016-05-19T06:37:00.002-07:00"},"updated":{"$t":"2016-06-05T14:11:40.336-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Developer"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified SysOps Administrator"},{"scheme":"http://www.blogger.com/atom/ns#","term":"ELB"},{"scheme":"http://www.blogger.com/atom/ns#","term":"News"}],"title":{"type":"text","$t":"AWS Certificate Manager rolling out to new regions"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"http:\/\/docs.aws.amazon.com\/acm\/latest\/userguide\/images\/acm_intro.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg alt=\"AWS Certificate Manager\" border=\"0\" src=\"http:\/\/docs.aws.amazon.com\/acm\/latest\/userguide\/images\/acm_intro.png\" title=\"\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nPreviously you would need buy your SSL certificates outside of AWS and then convert them to the format for AWS and then upload to your ELB. Life is much easier now with AWS Certficate Manager that provides this service along with the cetificates for free! How cool is that?\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThe service has been rolled out to most regions so you may get a question on it in the exam.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nAWS Certificate Manager is a service that lets you easily provision, \nmanage, and deploy Secure Sockets Layer\/Transport Layer Security \n(SSL\/TLS) certificates for use with AWS services. SSL\/TLS certificates \nare used to secure network communications and establish the identity of \nwebsites over the Internet. AWS Certificate Manager removes the \ntime-consuming manual process of purchasing, uploading, and renewing \nSSL\/TLS certificates. With AWS Certificate Manager, you can quickly \nrequest a certificate, deploy it on AWS resources such as Elastic Load \nBalancers or Amazon CloudFront distributions, and let AWS Certificate \nManager handle certificate renewals. SSL\/TLS certificates provisioned \nthrough AWS Certificate Manager are free. You pay only for the AWS \nresources you create to run your application.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nMore details at \u003Ca href=\"https:\/\/aws.amazon.com\/certificate-manager\/\" target=\"_blank\"\u003Ehttps:\/\/aws.amazon.com\/certificate-manager\/\u0026nbsp;\u003C\/a\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003E\u003Ca href=\"http:\/\/backspace.academy\/\" target=\"_blank\"\u003EBackSpace Academy\u0026nbsp; \u003C\/a\u003E\u003C\/span\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/353468075478631851\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/aws-certificate-manager-rolling-out-to.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/353468075478631851"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/353468075478631851"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/aws-certificate-manager-rolling-out-to.html","title":"AWS Certificate Manager rolling out to new regions"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-7968219697969552725"},"published":{"$t":"2016-05-19T03:19:00.000-07:00"},"updated":{"$t":"2016-06-05T14:11:54.929-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Developer"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified SysOps Administrator"},{"scheme":"http://www.blogger.com/atom/ns#","term":"EC2"},{"scheme":"http://www.blogger.com/atom/ns#","term":"ECS"}],"title":{"type":"text","$t":"ECS Auto Service Scaling"},"content":{"type":"html","$t":"Watch for this on the exam! An ECS tutorial will be released with the SysOps videos.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch1 id=\"Amazon_EC2_Container_Service_Supports_Automatic_Service_Scaling\"\u003E\n\u003Ca href=\"https:\/\/www.blogger.com\/null\" name=\"Amazon_EC2_Container_Service_Supports_Automatic_Service_Scaling\"\u003EAmazon EC2 Container Service Supports Automatic Service Scaling\u003C\/a\u003E\u003C\/h1\u003E\n\u003Cdiv class=\"aws-text-box\"\u003E\n\u003Cdiv class=\"  \"\u003E\nAmazon EC2 Container Service (Amazon ECS) can now \nautomatically scale container-based applications by dynamically growing \nand shrinking the number of tasks run by an Amazon ECS service.\u003C\/div\u003E\n\u003C\/div\u003E\nPreviously, when your application experienced a load spike \nyou had to manually scale the number of tasks in your Amazon ECS \nservice.\u003Cbr \/\u003E\nNow, you can automatically scale an Amazon ECS service \nbased on any Amazon CloudWatch metric. For example, you can use \nCloudWatch metrics published by Amazon ECS, such as each service’s \naverage CPU and memory usage. You can also use CloudWatch metrics \npublished by other services or use custom metrics that are specific to \nyour application. For example, a web service could increase the number \nof tasks based on Elastic Load Balancing metrics like SurgeQueueLength, \nwhile a batch job could increase the number of tasks based on Amazon SQS\n metrics like ApproximateNumberOfMessagesVisible.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003E\u003Ca href=\"http:\/\/backspace.academy\/\" target=\"_blank\"\u003EBackSpace Academy\u0026nbsp; \u003C\/a\u003E\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Ch1 id=\"Amazon_EC2_Container_Service_Supports_Automatic_Service_Scaling\"\u003E\n\u0026nbsp;\u003C\/h1\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/7968219697969552725\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/ecs-auto-service-scaling.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/7968219697969552725"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/7968219697969552725"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/ecs-auto-service-scaling.html","title":"ECS Auto Service Scaling"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-7566912086578515288"},"published":{"$t":"2016-05-19T03:13:00.003-07:00"},"updated":{"$t":"2016-06-05T14:12:04.894-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified SysOps Administrator"},{"scheme":"http://www.blogger.com/atom/ns#","term":"EC2"},{"scheme":"http://www.blogger.com/atom/ns#","term":"News"}],"title":{"type":"text","$t":"New EC2 instance X1"},"content":{"type":"html","$t":"Watch out for this on the exam!\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch1 id=\"Now_available:_X1_instances,_the_largest_Amazon_EC2_memory-optimized_instance_with_2_TB_of_memory\"\u003E\n\u003Ca href=\"https:\/\/www.blogger.com\/null\" name=\"Now_available:_X1_instances,_the_largest_Amazon_EC2_memory-optimized_instance_with_2_TB_of_memory\"\u003EX1 instances, the largest Amazon EC2 memory-optimized instance with 2 TB of memory\u003C\/a\u003E\u003C\/h1\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nX1 instances extend the \nelasticity, simplicity, and cost savings of the AWS cloud to \nenterprise-grade applications with large dataset requirements. X1 \ninstances are ideal for running in-memory databases like SAP HANA, big \ndata processing engines like Apache Spark or Presto, and high \nperformance computing (HPC) applications. X1 instances are certified by \nSAP to run production environments of the next-generation Business Suite\n S\/4HANA, Business Suite on HANA (SoH), Business Warehouse on HANA (BW),\n and Data Mart Solutions on HANA on the AWS cloud.\u003Cbr \/\u003E\nX1 instances offer 2 TB of DDR4 based memory, 8x the memory\n offered by any other Amazon EC2 instance. Each X1 instance is powered \nby four Intel® Xeon® E7 8880 v3 (Haswell) processors and offers 128 \nvCPUs. In addition, X1 instances offer 10 Gbps of dedicated bandwidth to\n Amazon Elastic Block Store (Amazon EBS) and are EBS-optimized by default at no additional cost.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003E\u003Ca href=\"http:\/\/backspace.academy\/\" target=\"_blank\"\u003EBackSpace Academy\u0026nbsp; \u003C\/a\u003E\u003C\/span\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/7566912086578515288\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/new-ec2-instance-x1.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/7566912086578515288"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/7566912086578515288"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/new-ec2-instance-x1.html","title":"New EC2 instance X1"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-6831917124757131716"},"published":{"$t":"2016-05-17T13:07:00.004-07:00"},"updated":{"$t":"2016-06-07T12:02:32.289-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Developer"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified SysOps Administrator"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Course"}],"title":{"type":"text","$t":"AWS Certified SysOps Exam Engine"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-Mb5CFR78bOw\/VzylT4UtrtI\/AAAAAAAAASM\/58iAJPrmYyk-ETEtNVmlkWKj-W5KJ-49wCLcB\/s1600\/aws_certified.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"198\" src=\"https:\/\/1.bp.blogspot.com\/-Mb5CFR78bOw\/VzylT4UtrtI\/AAAAAAAAASM\/58iAJPrmYyk-ETEtNVmlkWKj-W5KJ-49wCLcB\/s640\/aws_certified.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003C\/div\u003E\n\u003Cbr \/\u003E\nWe have just added the Exam Engine for the AWS Certified SysOps Associate course!\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThe exam engine is included with the Associate courses. All existing paid customers will receive access to the exam engine.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThe course videos and material will be released in the next week.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003E\u003Ca href=\"http:\/\/backspace.academy\/\" target=\"_blank\"\u003EBackSpace Academy\u0026nbsp; \u003C\/a\u003E\u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/6831917124757131716\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/aws-certified-sysops-exam-engine.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6831917124757131716"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6831917124757131716"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/aws-certified-sysops-exam-engine.html","title":"AWS Certified SysOps Exam Engine"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/1.bp.blogspot.com\/-Mb5CFR78bOw\/VzylT4UtrtI\/AAAAAAAAASM\/58iAJPrmYyk-ETEtNVmlkWKj-W5KJ-49wCLcB\/s72-c\/aws_certified.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-1480093616716496261"},"published":{"$t":"2016-05-06T14:48:00.004-07:00"},"updated":{"$t":"2016-06-07T12:03:04.073-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Developer"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified SysOps Administrator"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Course"}],"title":{"type":"text","$t":"2016 Updated Courses!"},"content":{"type":"html","$t":"\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/1.bp.blogspot.com\/-Gw-W6bjnrhI\/Vy0P9GlWvLI\/AAAAAAAAAQw\/P9QLJd_o17wwL44hsWuUlzkt0Vo_H3kYgCLcB\/s1600\/aws_associate.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"401\" src=\"https:\/\/1.bp.blogspot.com\/-Gw-W6bjnrhI\/Vy0P9GlWvLI\/AAAAAAAAAQw\/P9QLJd_o17wwL44hsWuUlzkt0Vo_H3kYgCLcB\/s640\/aws_associate.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nMajor changes to the format of our courses! One payment enables access to all associate courses and exam engines.\u003Cbr \/\u003E\nCourse have been updated to 2016 and format has been changed to make study easier. Core AWS subjects that are relevant to all streams are in a separate course and then the specific subjects for the three streams are in separate courses.\u003Cbr \/\u003E\nNext week we will be adding the SysOps Administrator exam engine followed by the course material the following week. This will also be added to any existing customers for free.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cspan style=\"font-weight: normal;\"\u003E\u003Ca href=\"http:\/\/backspace.academy\/\" target=\"_blank\"\u003EBackSpace Academy\u0026nbsp; \u003C\/a\u003E\u003C\/span\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/1480093616716496261\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/2016-updated-courses.html#comment-form","title":"1 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/1480093616716496261"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/1480093616716496261"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2016\/05\/2016-updated-courses.html","title":"2016 Updated Courses!"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/1.bp.blogspot.com\/-Gw-W6bjnrhI\/Vy0P9GlWvLI\/AAAAAAAAAQw\/P9QLJd_o17wwL44hsWuUlzkt0Vo_H3kYgCLcB\/s72-c\/aws_associate.png","height":"72","width":"72"},"thr$total":{"$t":"1"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-6545454393433846449"},"published":{"$t":"2015-11-03T00:12:00.000-08:00"},"updated":{"$t":"2016-06-07T12:03:13.749-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Amazon Inspector"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Amazon QuickSight"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Android"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS IoT"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Mobile Hub"},{"scheme":"http://www.blogger.com/atom/ns#","term":"EC2"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Internet of Things"},{"scheme":"http://www.blogger.com/atom/ns#","term":"IOS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Kinesis Firehose"},{"scheme":"http://www.blogger.com/atom/ns#","term":"MariaDB"},{"scheme":"http://www.blogger.com/atom/ns#","term":"News"},{"scheme":"http://www.blogger.com/atom/ns#","term":"RDS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"WAF"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Web Application Firewall"}],"title":{"type":"text","$t":"What a month in AWS!"},"content":{"type":"html","$t":"\u003Cdiv class=\"MsoNormal\"\u003E\nIt is certainly hard keeping up with AWS releases! Here are\nsome of the highlights:\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\nAmazon RDS Cross-Account Snapshot Sharing. \u003Co:p\u003E\u003C\/o:p\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nWatch out for this one on the certification exam!\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nRegular database snapshots have always been a part of any good\nAWS administrator’s routine. Now the service is even better with the ability to\nshare snapshots across different accounts.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nOrganisations should have multiple separate linked accounts\nfor a number of reasons; security, separation from production environments,\ncost visibility etc. Now you can take snapshots of your production environment and\ncopy to a development account for testing without any risk.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\nEC2 Run Command. \u003Co:p\u003E\u003C\/o:p\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nWatch out for this one on the certification exam!\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nThis new feature will help you to administer your instances\n(no matter how many you have) in a manner that is both easy and secure.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nThis greatly increases security by allowing commands to be run\nremotely using the console without having to login through a bastion host.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\nEC2 Spot Blocks\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nWatch out for this one on the certification exam!\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nNow you can create spot instances that run for a fixed period\nof time from 1 to 6 hours.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\nMariaDB on AWS RDS\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nWatch out for this one on the certification exam!\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nWe now have another database in the RDS suite. MariaDB is a\nfork from MySQL and can provide some additional capabilities.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\nAWS WAF - Web Application Firewall\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nWatch out for this one on the certification exam!\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nAnother tool in your AWS security arsenal. Deploy custom and\napplication-specific rules in minutes that block common attack patterns, such\nas SQL injection or cross-site scripting.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Ch2\u003E\n\u003Co:p\u003E\u0026nbsp;\u003C\/o:p\u003E\u003C\/h2\u003E\n\u003Ch3\u003E\nAmazon Inspector – Released in preview\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nAmazon Inspector is an automated security assessment\nservice. This allows you to inspect your applications for a range of security\nvulnerabilities.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\nAmazon Kinesis Firehose \u003Co:p\u003E\u003C\/o:p\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nLoad streaming data quickly and easily into Amazon S3 and\nAmazon Redshift to enable real time analytics.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\nAmazon QuickSight. Status – Released in preview\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nAmazon’s new Business Intelligence tools for analysis of\ndata from Amazon EMR, Amazon RDS, Amazon DynamoDB, Amazon Kinesis, Amazon S3\nand Amazon Redshift. QuickSight utilises SPICE (Super Fast In-Memory\nCalculation Engine) to return results from large datasets in rapid time.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\nAWS IoT – Released in beta\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/h3\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nAWS IoT (Internet of Things) provide cloud services for\nembedded devices. Tiny devices can use AWS Lambda, Amazon Kinesis, Amazon S3,\nAmazon Machine Learning, and Amazon DynamoDB etc to provide powerful capabilities\nfor many applications.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\nMany embedded processor suppliers including Intel, Microchip\nPIC, TI, BeagleBone, Avnet, Marvell, MediaTek, Renesas, Dragonboard and Seeeduino\nprovide starter kits to get you started.\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Ch3\u003E\nAWS Mobile Hub – Released in beta\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/h3\u003E\nThis service streamlines the process of creating mobile IOS\nand Android apps that use AWS services.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nWe will be updating our \u003Ca href=\"http:\/\/backspace.academy\/\"\u003Ebackspace.academy\u003C\/a\u003E\u0026nbsp;certification courses to reflect all the changes.\u003Cbr \/\u003E\n\u003Cdiv class=\"MsoNormal\"\u003E\n\u003Co:p\u003E\u003C\/o:p\u003E\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/6545454393433846449\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/11\/what-month-in-aws.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6545454393433846449"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6545454393433846449"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/11\/what-month-in-aws.html","title":"What a month in AWS!"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-6069946327865799055"},"published":{"$t":"2015-10-24T19:41:00.001-07:00"},"updated":{"$t":"2016-05-18T10:04:32.249-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android"},{"scheme":"http://www.blogger.com/atom/ns#","term":"app"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Developer"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Course"},{"scheme":"http://www.blogger.com/atom/ns#","term":"IOS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"SysOps Administration"}],"title":{"type":"text","$t":"Study on the go with the new BackSpace Academy mobile site!"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"http:\/\/2.bp.blogspot.com\/-i62c0irBQoU\/VixNA4s8YiI\/AAAAAAAAAQY\/hSEQJ-bZO2U\/s1600\/iphonecase1.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" height=\"320\" src=\"https:\/\/2.bp.blogspot.com\/-i62c0irBQoU\/VixNA4s8YiI\/AAAAAAAAAQY\/hSEQJ-bZO2U\/s320\/iphonecase1.png\" width=\"164\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\nDue to popular demand we are introducing two platforms for doing the BackSpace AWS Certification prep courses. The BackSpace Academy mobile site for IOS and Android.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nWhen you go to \u003Ca href=\"https:\/\/user.backspace.academy\/\"\u003Ehttps:\/\/user.backspace.academy\u003C\/a\u003E you will be automatically directed to the mobile site if you are using a mobile phone.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nGreat for studying practice exams on the go!"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/6069946327865799055\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/10\/study-on-go-with-new-backspace-academy.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6069946327865799055"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6069946327865799055"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/10\/study-on-go-with-new-backspace-academy.html","title":"Study on the go with the new BackSpace Academy mobile site!"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/2.bp.blogspot.com\/-i62c0irBQoU\/VixNA4s8YiI\/AAAAAAAAAQY\/hSEQJ-bZO2U\/s72-c\/iphonecase1.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-6011095084369445591"},"published":{"$t":"2015-09-22T07:11:00.000-07:00"},"updated":{"$t":"2016-05-18T10:04:42.393-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Developer"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Certification"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Course"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Development"}],"title":{"type":"text","$t":"**New Course Release** AWS Certified Developer Associate Level"},"content":{"type":"html","$t":"We have just released our latest course\u0026nbsp;\u003Ci\u003EAWS Certified Developer Associate Level\u003C\/i\u003E!\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nWith a focus on not only answering questions correctly, but on learning how to build the next generation of Cloud connected apps using the JavaScript SDK in the browser and NodeJS SDK on the server.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nAdvanced hands-on video labs include:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cul\u003E\n\u003Cli\u003ESetting up a NodeJS Development Environment on AWS EC2\u003C\/li\u003E\n\u003Cli\u003ECreating a Low Cost Sync Database for JavaScript Applications with AWS\u003C\/li\u003E\n\u003Cli\u003EProgramming and Deployment using AWS CloudFormation\u003C\/li\u003E\n\u003Cli\u003EProgramming Amazon SQS and SNS using the AWS NodeJS SDK\u003C\/li\u003E\n\u003Cli\u003EProgramming AWS DynamoDB using the AWS NodeJS SDK\u003C\/li\u003E\n\u003Cli\u003EProgramming AWS ElastiCache Redis using the AWS NodeJS SDK\u003C\/li\u003E\n\u003Cli\u003EProgramming AWS Lambda\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cdiv\u003E\nProfessionally created lab notes for all labs.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nExpert system based exam engine with a question pool of over 800 questions!\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nFull coverage and testing of all knowledge required for certification.\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ciframe allowfullscreen=\"\" class=\"YOUTUBE-iframe-video\" data-thumbnail-src=\"https:\/\/i.ytimg.com\/vi\/E05G5JhyzUc\/0.jpg\" frameborder=\"0\" height=\"266\" src=\"https:\/\/www.youtube.com\/embed\/E05G5JhyzUc?feature=player_embedded\" width=\"320\"\u003E\u003C\/iframe\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nCheck it out now at \u003Ca href=\"http:\/\/backspace.academy\/\"\u003Ebackspace.academy\u003C\/a\u003E !\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/6011095084369445591\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/09\/new-course-release-aws-certified.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6011095084369445591"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/6011095084369445591"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/09\/new-course-release-aws-certified.html","title":"**New Course Release** AWS Certified Developer Associate Level"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/img.youtube.com\/vi\/E05G5JhyzUc\/default.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-3263155378691128703"},"published":{"$t":"2015-09-17T05:30:00.000-07:00"},"updated":{"$t":"2015-09-17T05:31:23.938-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Certification"},{"scheme":"http://www.blogger.com/atom/ns#","term":"S3"},{"scheme":"http://www.blogger.com/atom/ns#","term":"SysOps Administration"}],"title":{"type":"text","$t":"New S3 Storage Class"},"content":{"type":"html","$t":"AWS has just announced another storage class type for S3.\u003Cbr \/\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv\u003E\nAmazon S3 Standard - Infrequent Access (Standard - IA) is an Amazon S3 storage class for data that is accessed less frequently, but requires rapid access when needed. Standard - IA offers the high durability, throughput, and low latency of Amazon S3 Standard, with a low per GB storage price and per GB retrieval fee. This combination of low cost and high performance make Standard - IA ideal for long-term storage, backups, and as a data store for disaster recovery. The Standard - IA storage class is set at the object level and can exist in the same bucket as Standard, allowing you to use lifecycle policies to automatically transition objects between storage classes without any application changes.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nThe following table summarizes the durability and availability offered by each of the storage classes.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ctable border=\"0\" cellspacing=\"0\" style=\"border-collapse: collapse; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-spacing: 0px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-width: 1px 0px 0px 1px; color: #444444; font-family: 'Open Sans', 'Lucida Grande', 'Helvetica Neue', Arial; font-size: 16px; margin-bottom: 10px;\" summary=\"\"\u003E\u003Cthead\u003E\n\u003Ctr\u003E\u003Cth style=\"background-color: #eeeeee; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; color: #333333; padding: 5px; vertical-align: top;\"\u003EStorage Class\u003C\/th\u003E\u003Cth style=\"background-color: #eeeeee; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; color: #333333; padding: 5px; vertical-align: top;\"\u003EDurability (designed for)\u003C\/th\u003E\u003Cth style=\"background-color: #eeeeee; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; color: #333333; padding: 5px; vertical-align: top;\"\u003EAvailability (designed for)\u003C\/th\u003E\u003Cth style=\"background-color: #eeeeee; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; color: #333333; padding: 5px; vertical-align: top;\"\u003E\u003Cspan class=\"bold\"\u003EOther Considerations\u003C\/span\u003E\u003C\/th\u003E\u003C\/tr\u003E\n\u003C\/thead\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\nSTANDARD\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\n99.999999999%\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\n99.99%\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\nNone\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\nSTANDARD_IA\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\n99.999999999%\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\n99.9%\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\nThere is a retrieval fee associated with STANDARD_IA objects which makes it most suitable for infrequently accessed data. For pricing information, see\u0026nbsp;\u003Ca class=\"ulink\" href=\"http:\/\/aws.amazon.com\/s3\/pricing\/\" style=\"color: #996633; text-decoration: none;\" target=\"_blank\"\u003EAmazon S3 Pricing\u003C\/a\u003E.\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\nGLACIER\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\n99.999999999%\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\n99.99% (after you restore objects)\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003EGLACIER objects are not available for real-time access. You must first restore archived objects before you can access them and restoring objects can take 3-4 hours. For more information, see\u0026nbsp;\u003Ca class=\"xref\" href=\"http:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/dev\/object-archival.html#restore-glacier-objects-concepts\" style=\"color: #996633; text-decoration: none;\" title=\"Restoring Archived Objects\"\u003ERestoring Archived Objects\u003C\/a\u003E.\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\nRRS\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\n99.99%\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\n99.99%\u003C\/div\u003E\n\u003C\/td\u003E\u003Ctd style=\"border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-width: 0px 1px 1px 0px; padding: 5px; vertical-align: top;\"\u003E\u003Cdiv style=\"line-height: 1.5em;\"\u003E\nNone\u003C\/div\u003E\n\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\n\u003C\/div\u003E\n\u003Cdiv\u003E\n\u003Cbr \/\u003E\nOur certification courses will be updated this week with the changes.\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/3263155378691128703\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/09\/new-s3-storage-class.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/3263155378691128703"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/3263155378691128703"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/09\/new-s3-storage-class.html","title":"New S3 Storage Class"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-1657666838003290104"},"published":{"$t":"2015-07-08T07:03:00.000-07:00"},"updated":{"$t":"2015-07-08T07:03:48.466-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AutoScaling"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Certification"},{"scheme":"http://www.blogger.com/atom/ns#","term":"EC2"},{"scheme":"http://www.blogger.com/atom/ns#","term":"ELB"},{"scheme":"http://www.blogger.com/atom/ns#","term":"VPC"}],"title":{"type":"text","$t":"Important changes by AWS to Auto Scaling Policies"},"content":{"type":"html","$t":"Today AWS announced the introduction of\u0026nbsp;new auto scaling policies with steps. This is a significant change as no longer does auto scaling need to be a single step response to a CloudWatch alarm. You can now have many steps enabling small changes in capacity to be made in response to small changes in demand and likewise for large changes. The result is highly reactive and smooth response to demand.\u003Cbr \/\u003E\nWe have updated our documentation \"Lab Notes - Highly Available and Fault Tolerant Architecture for Web Applications inside a VPC\" to v1.02 to reflect this change. Please make sure you understand this before sitting the AWS certification exam.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cimg height=\"326\" src=\"https:\/\/media.amazonwebservices.com\/blog\/2015\/as_create_stepped_group_5.png\" width=\"640\" \/\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/1657666838003290104\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/07\/important-changes-by-aws-to-auto.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/1657666838003290104"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/1657666838003290104"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/07\/important-changes-by-aws-to-auto.html","title":"Important changes by AWS to Auto Scaling Policies"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-4603622075690903012.post-8032246423054109558"},"published":{"$t":"2015-07-07T19:54:00.000-07:00"},"updated":{"$t":"2015-07-07T19:54:45.660-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS"},{"scheme":"http://www.blogger.com/atom/ns#","term":"AWS Certified Solutions Architect"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Certification"},{"scheme":"http://www.blogger.com/atom/ns#","term":"IAM"}],"title":{"type":"text","$t":"New Video lab - Using AWS Identity and Access Management (IAM)"},"content":{"type":"html","$t":"We have added a new lab video to the Amazon IAM subject of the AWS Certified Solutions Architect Associate course.\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nUsing AWS Identity and Access Management (IAM)\u003Cbr \/\u003E\n\u003Cul\u003E\n\u003Cli\u003ECreating users and groups\u0026nbsp;\u003C\/li\u003E\n\u003Cli\u003ECreating IAM roles.\u003C\/li\u003E\n\u003Cli\u003ECreating an account password policy.\u003C\/li\u003E\n\u003Cli\u003EDownloading a credentials report.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cdiv\u003E\n\u003Ca href=\"http:\/\/backspace.academy\/\"\u003Ebackspace.academy\u003C\/a\u003E\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http:\/\/learn-aws.blogspot.com\/feeds\/8032246423054109558\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/07\/new-video-lab-using-aws-identity-and.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/8032246423054109558"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/4603622075690903012\/posts\/default\/8032246423054109558"},{"rel":"alternate","type":"text/html","href":"http:\/\/learn-aws.blogspot.com\/2015\/07\/new-video-lab-using-aws-identity-and.html","title":"New Video lab - Using AWS Identity and Access Management (IAM)"}],"author":[{"name":{"$t":"BackSpace Academy"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/15061292652079774775"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"thr$total":{"$t":"0"}}]}});