{"id":354,"date":"2019-04-12T21:13:22","date_gmt":"2019-04-12T21:13:22","guid":{"rendered":"https:\/\/bootstrap-it.com\/blog\/?p=354"},"modified":"2019-04-12T21:13:22","modified_gmt":"2019-04-12T21:13:22","slug":"administrating-aws-resources-productively-using-the-aws-cli","status":"publish","type":"post","link":"https:\/\/bootstrap-it.com\/blog\/?p=354","title":{"rendered":"Administrating AWS resources productively using the AWS CLI"},"content":{"rendered":"<div id=\"s-share-buttons\" class=\"horizontal-w-c-circular s-share-w-c\"><a href=\"http:\/\/www.facebook.com\/sharer.php?u=https:\/\/bootstrap-it.com\/blog\/?p=354\" target=\"_blank\" title=\"Share to Facebook\" class=\"s3-facebook hint--top\"><\/a><a href=\"http:\/\/twitter.com\/intent\/tweet?text=Administrating AWS resources productively using the AWS CLI&url=https:\/\/bootstrap-it.com\/blog\/?p=354\" target=\"_blank\"  title=\"Share to Twitter\" class=\"s3-twitter hint--top\"><\/a><a href=\"http:\/\/reddit.com\/submit?url=https:\/\/bootstrap-it.com\/blog\/?p=354&title=Administrating AWS resources productively using the AWS CLI\" target=\"_blank\" title=\"Share to Reddit\" class=\"s3-reddit hint--top\"><\/a><a href=\"http:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/bootstrap-it.com\/blog\/?p=354\" target=\"_blank\" title=\"Share to LinkedIn\" class=\"s3-linkedin hint--top\"><\/a><a href=\"mailto:?Subject=Administrating%20AWS%20resources%20productively%20using%20the%20AWS%20CLI&Body=Here%20is%20the%20link%20to%20the%20article:%20https:\/\/bootstrap-it.com\/blog\/?p=354\" title=\"Email this article\" class=\"s3-email hint--top\"><\/a><\/div>\n<p><em>This article is adapted from my new&nbsp;<\/em><a href=\"https:\/\/pluralsight.pxf.io\/c\/1191769\/424552\/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fautomating-aws-operations-aws-cli\" rel=\"noreferrer noopener\" target=\"_blank\"><em>Pluralsight course: Automating AWS Operations with the AWS CLI.<\/em><\/a><\/p>\n\n\n\n<p>I\u2019ll bet you\u2019ve already got some stuff running on AWS and you made it happen using the browser console. But I\u2019ll also bet that you already suspect that clicking your way through layers and layers of configuration pages isn\u2019t always going to be the best approach. If fact, the AWS CLI is a better way that\u2019ll get the exact same work done, but with a whole lot less effort.<\/p>\n\n\n\n<p>Let me quickly demonstrate. Suppose you want to launch an Amazon Linux instance from EC2. To get it up and running, you\u2019ll need to\u2026<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Load the EC2 Dashboard page<\/li><li>Click Launch Instance<\/li><li>Select an AMI from the AMI page<\/li><li>Select an instance type from the Instance Type page<\/li><li>Set network, IAM, life cycle behavior, and user data settings on the Configure Instance Details page<\/li><li>Select one or more storage volumes on the Add Storage page<\/li><li>Add tags on the Add Tags page<\/li><li>Select or configure a security group on the\u200a\u2014\u200await for it\u200a\u2014\u200aConfigure Security Group page<\/li><li>And finally review and launch your instance on the page named (what else?) Review and Launch<\/li><\/ul>\n\n\n\n<p>And don\u2019t forget clicking through the pop up where you\u2019ll confirm your key pair and then heading back to the EC2 Instances dashboard to get your instance data (like IP addresses).<\/p>\n\n\n\n<p>Sound like fun to you? Will it still sound like fun if you\u2019re working with a slow internet connection? And how about if you need to perform variations of this process a half dozen times a week?<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*ni2PeZgp3gOxxCmUU9Yq_g.png\" alt=\"\"\/><figcaption>The keyboard: all you really need to manage your AWS&nbsp;stuff<\/figcaption><\/figure>\n\n\n\n<p>Want to see how you\u2019d fire up that configuration using the AWS CLI from a Bash shell (which you can run within Linux, macOS, and now even Windows 10)? Note how I used back slashes to tell Bash that the command isn\u2019t complete yet. Hitting Enter gets the whole mess up and running.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">aws ec2 run-instances --image-id ami-04681a1dbd79675a5 \\<br> --count 1 \\<br> --instance-type r5d.large \\<br> --key-name MyKeyPair \\<br> --security-group-ids sg-007e43f80a1758f29 \\<br> --subnet-id subnet-970ec9f0 \\<br> --user-data file:\/\/my_script.sh \\<br> --tag-specifications \\<br> \u2018ResourceType=instance,Tags=[{Key=backend,Value=inventory1}]\u2019<\/pre>\n\n\n\n<p>That precise command won\u2019t work for you if you just paste it into your terminal and run it. The security group and subnet IDs are specific to my account, and you probably haven\u2019t got a key pair called MyKeyPair or a script file called my_script.sh. But that does show you that, once you\u2019ve done some basic up-front research to get all the right values and confirmed that it works, you\u2019ll be able to save the command into a script file that you can modify and run whenever necessary. This can drop a five minute process down to a couple of seconds.<\/p>\n\n\n\n<p>The best place to go for up-to-date CLI installation instructions for your operating system is&nbsp;<a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/userguide\/installing.html\" rel=\"noreferrer noopener\" target=\"_blank\">this AWS documentation page<\/a>. Your best bet will normally be the Python package manager approach using PIP.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*yLJTJPliRWHIL0Mg1IsHKg.png\" alt=\"\"\/><figcaption>The AWS CLI Installation Page<\/figcaption><\/figure>\n\n\n\n<p>Getting your CLI configured to securely access and administrate your AWS account resources is fairly straightforward. Although you will first need to generate (and copy\/record) an access key for your AWS user from the My Security Credentials link in the account drop down menu back in the console. When that\u2019s done, simply type \u201caws configure\u201d at the command prompt and enter the Access Key ID and Secret Access Key you got from My Security Credentials. You can optionally choose default region and output format values.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">worker@workstation:~$ aws configure<br>AWS Access Key ID [****************KB2Q]: <br>AWS Secret Access Key [****************W\/Cu]: <br>Default region name [us-east-1]: <br>Default output format [text]: <br>worker@workstation:~$<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"929d\">AWS CLI Syntax&nbsp;Patterns<\/h4>\n\n\n\n<p>You\u2019re now all set to begin. Let\u2019s start by breaking the command syntax down into its component parts and illustrate how it all works using practical examples. After the aws command prefix, a CLI command is made up of&nbsp;<strong>options<\/strong>&nbsp;(which, as the name suggests, are optional),&nbsp;<strong>commands<\/strong>,&nbsp;<strong>subcommands<\/strong>, and&nbsp;<strong>parameters<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">aws [options] &lt;command&gt; &lt;subcommand&gt; [parameters]<\/pre>\n\n\n\n<p>This example will return all the EC2 AMI images officially maintained by Amazon that run the CentOS Linux operating system.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">aws --output table ec2 describe-images \\<br> --filters \u201cName=description,Values=*CentOS*\u201d \\<br> \u201cName=owner-alias,Values=amazon\u201d<\/pre>\n\n\n\n<p>It uses the&nbsp;<strong>output<\/strong>&nbsp;option, giving it the value of \u201c<em>table<\/em>\u201d to display text output in tables. The top-level&nbsp;<strong>command<\/strong>&nbsp;here is ec2. Most\u200a\u2014\u200aif not all\u200a\u2014\u200atop-level commands will invoke specific AWS services. s3, iam, and dynamodb are other examples.<\/p>\n\n\n\n<p>The&nbsp;<strong>subcommand<\/strong>&nbsp;is&nbsp;<em>describe-images<\/em>, which will return data related to all the Amazon Machine Images currently available to use for your EC2 instances. That would return an awful lot of data, as there are many hundreds of AMIs and each one of them is represented by a lot of metadata. So you\u2019ll want to narrow down the search just a bit. For that, I provided two values to the\u200a\u2014\u200afilters parameter: the image description should contain the word&nbsp;<em>CentOS<\/em>\u200a\u2014\u200acapitalizing the c, o, and s since this will be case sensitive, and the owner-alias value must equal&nbsp;<em>amazon<\/em>.<\/p>\n\n\n\n<p>You\u2019ll often run&nbsp;<em>describe-<\/em>based subcommands to get important resource IDs that you can then plug into your actual action commands. That CentOS image ID would typically be used as part of an ec2&nbsp;<em>run-instances<\/em>&nbsp;command to actually launch an instance.<\/p>\n\n\n\n<p>Besides describe and run, other common subcommands will begin with verbs like create, delete, enable, disable, modify, request, stop, and terminate.<\/p>\n\n\n\n<p><strong>Options<\/strong>&nbsp;include&nbsp;<em>region<\/em>,&nbsp;<em>output<\/em>, and&nbsp;<em>profile<\/em>\u200a\u2014\u200awhich you\u2019ve already seen\u200a\u2014\u200aplus&nbsp;<em>dry-run<\/em>, which will do nothing, but instead display the output your command would generate&nbsp;<em>if<\/em>&nbsp;it were actually run. This can be very useful when you\u2019re not sure you\u2019ve got the syntax quite right. Let\u2019s try running that ec2 run-instances command from above, but this time adding&nbsp;<em>dry-run<\/em>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"c29b\">S3 Example<\/h4>\n\n\n\n<p>It\u2019s time for a little S3 magic. I\u2019ve got a business that needs a simple website without any database access or javascript bells and whistles. Just some regular, run of the mill, HTML5 goodness. So I\u2019m going to create, carefully configure, and populate my bucket so that it\u2019ll work as a static website\u200a\u2014\u200aor, in other words, so that incoming traffic will automatically be directed to the index.html file I\u2019ve created.<\/p>\n\n\n\n<p>Although it won\u2019t play any role in this demo, I\u2019m eventually going to want to set up a&nbsp;.com domain name in Amazon\u2019s Route 53 that points to the site, so I\u2019ll need to create an S3 bucket with exactly that name\u200a\u2014\u200a.com and all. I make a bucket using&nbsp;<em>mb<\/em>&nbsp;and a globally unique bucket name.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ aws s3 mb s3:\/\/mysite548.com<\/pre>\n\n\n\n<p>The bucket will have to be publicly readable, so I\u2019ll use&nbsp;<em>s3api put-bucket-acl<\/em>, along with the&nbsp;<em>bucket<\/em>&nbsp;and&nbsp;<em>acl<\/em>&nbsp;parameters. The latter of those will take the value&nbsp;<em>public-read<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ aws s3api put-bucket-acl --bucket mysite548.com --acl public-read<\/pre>\n\n\n\n<p>Next I\u2019ll use s3 sync to move all the contents of my current local directory up to my bucket. I\u2019ve created three files:&nbsp;<em>index.html<\/em>&nbsp;is the default web page and&nbsp;<em>error.html<\/em>&nbsp;will be the page that\u2019s loaded when a non-existent resource is requested. There\u2019s also a small image to help prettify the demonstration. The&nbsp;<em>acl public-read<\/em>&nbsp;parameter will give the files themselves the same permissions as the bucket.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ aws s3 sync . s3:\/\/mysite548.com --acl public-read<\/pre>\n\n\n\n<p>Finally, I\u2019ll define the purpose of those html files for S3 using \u201cs3 website\u201d. The&nbsp;<em>index-document<\/em>&nbsp;and&nbsp;<em>error-document<\/em>&nbsp;parameters simply point to the relevant files. You don\u2019t need to use those specific filenames, by the way, that\u2019s just me. I\u2019ll confirm that operation using s3api get-bucket-website.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ aws s3 website s3:\/\/mysite548.com\/ --index-document index.html --error-document error.html<br>$ aws s3api get-bucket-website --bucket mysite548.com<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"8708\">What\u2019s Next?<\/h4>\n\n\n\n<p>The command syntax of the AWS CLI is fairly intuitive. Nevertheless, you will often need help getting it exactly right. As I show in&nbsp;<a href=\"https:\/\/pluralsight.pxf.io\/c\/1191769\/424552\/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fautomating-aws-operations-aws-cli\" rel=\"noreferrer noopener\" target=\"_blank\">the Pluralsight course<\/a>, you can get excellent guidance from the&nbsp;<em>help<\/em>&nbsp;system at the command line, or from the&nbsp;<a href=\"https:\/\/docs.aws.amazon.com\/cli\/latest\/reference\/index.html#cli-aws\" rel=\"noreferrer noopener\" target=\"_blank\">AWS online documentation<\/a>. My&nbsp;<a href=\"https:\/\/www.manning.com\/books\/learn-amazon-web-services-in-a-month-of-lunches?a_aid=bootstrap-it&amp;amp;a_bid=1c1b5e27\" rel=\"noreferrer noopener\" target=\"_blank\">Learn Amazon Web Services in a Month of Lunches book<\/a>&nbsp;also contains useful guidance and examples.<\/p>\n\n\n\n<p><em>This article is an excerpt adapted from my new&nbsp;<\/em><a href=\"https:\/\/pluralsight.pxf.io\/c\/1191769\/424552\/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fautomating-aws-operations-aws-cli\" rel=\"noreferrer noopener\" target=\"_blank\"><em>Pluralsight course, Automating AWS Operations with the AWS CLI.<\/em><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article is adapted from my new&nbsp;Pluralsight course: Automating AWS Operations with the AWS CLI. I\u2019ll bet you\u2019ve already got some stuff running on AWS and you made it happen using the browser console. But I\u2019ll also bet that you&hellip; <a href=\"https:\/\/bootstrap-it.com\/blog\/?p=354\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":355,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-354","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.2.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Administrating AWS resources productively using the AWS CLI - Bootstrap IT<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bootstrap-it.com\/blog\/?p=354\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Administrating AWS resources productively using the AWS CLI - Bootstrap IT\" \/>\n<meta property=\"og:description\" content=\"This article is adapted from my new&nbsp;Pluralsight course: Automating AWS Operations with the AWS CLI. I\u2019ll bet you\u2019ve already got some stuff running on AWS and you made it happen using the browser console. But I\u2019ll also bet that you&hellip; Continue Reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bootstrap-it.com\/blog\/?p=354\" \/>\n<meta property=\"og:site_name\" content=\"Bootstrap IT\" \/>\n<meta property=\"article:published_time\" content=\"2019-04-12T21:13:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bootstrap-it.com\/blog\/wp-content\/uploads\/aws-cli.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"564\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"dbclin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@davidbclinton\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"dbclin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/bootstrap-it.com\/blog\/?p=354\",\"url\":\"https:\/\/bootstrap-it.com\/blog\/?p=354\",\"name\":\"Administrating AWS resources productively using the AWS CLI - Bootstrap IT\",\"isPartOf\":{\"@id\":\"https:\/\/bootstrap-it.com\/blog\/#website\"},\"datePublished\":\"2019-04-12T21:13:22+00:00\",\"dateModified\":\"2019-04-12T21:13:22+00:00\",\"author\":{\"@id\":\"https:\/\/bootstrap-it.com\/blog\/#\/schema\/person\/ae0fb1d5b3b01558b92b6426d77766ec\"},\"breadcrumb\":{\"@id\":\"https:\/\/bootstrap-it.com\/blog\/?p=354#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/bootstrap-it.com\/blog\/?p=354\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/bootstrap-it.com\/blog\/?p=354#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/bootstrap-it.com\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Administrating AWS resources productively using the AWS CLI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/bootstrap-it.com\/blog\/#website\",\"url\":\"https:\/\/bootstrap-it.com\/blog\/\",\"name\":\"Bootstrap IT\",\"description\":\"Learn technology using technology\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/bootstrap-it.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/bootstrap-it.com\/blog\/#\/schema\/person\/ae0fb1d5b3b01558b92b6426d77766ec\",\"name\":\"dbclin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/bootstrap-it.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a93785d437350478a7f1dfcbec58d26bc28e0124e405179acbe1b4325c09f90a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a93785d437350478a7f1dfcbec58d26bc28e0124e405179acbe1b4325c09f90a?s=96&d=mm&r=g\",\"caption\":\"dbclin\"},\"sameAs\":[\"http:\/\/bootstrap-it.com\/\",\"dbclinton\",\"https:\/\/twitter.com\/davidbclinton\"],\"url\":\"https:\/\/bootstrap-it.com\/blog\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Administrating AWS resources productively using the AWS CLI - Bootstrap IT","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bootstrap-it.com\/blog\/?p=354","og_locale":"en_US","og_type":"article","og_title":"Administrating AWS resources productively using the AWS CLI - Bootstrap IT","og_description":"This article is adapted from my new&nbsp;Pluralsight course: Automating AWS Operations with the AWS CLI. I\u2019ll bet you\u2019ve already got some stuff running on AWS and you made it happen using the browser console. But I\u2019ll also bet that you&hellip; Continue Reading &rarr;","og_url":"https:\/\/bootstrap-it.com\/blog\/?p=354","og_site_name":"Bootstrap IT","article_published_time":"2019-04-12T21:13:22+00:00","og_image":[{"width":800,"height":564,"url":"https:\/\/bootstrap-it.com\/blog\/wp-content\/uploads\/aws-cli.png","type":"image\/png"}],"author":"dbclin","twitter_card":"summary_large_image","twitter_creator":"@davidbclinton","twitter_misc":{"Written by":"dbclin","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/bootstrap-it.com\/blog\/?p=354","url":"https:\/\/bootstrap-it.com\/blog\/?p=354","name":"Administrating AWS resources productively using the AWS CLI - Bootstrap IT","isPartOf":{"@id":"https:\/\/bootstrap-it.com\/blog\/#website"},"datePublished":"2019-04-12T21:13:22+00:00","dateModified":"2019-04-12T21:13:22+00:00","author":{"@id":"https:\/\/bootstrap-it.com\/blog\/#\/schema\/person\/ae0fb1d5b3b01558b92b6426d77766ec"},"breadcrumb":{"@id":"https:\/\/bootstrap-it.com\/blog\/?p=354#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bootstrap-it.com\/blog\/?p=354"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/bootstrap-it.com\/blog\/?p=354#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bootstrap-it.com\/blog"},{"@type":"ListItem","position":2,"name":"Administrating AWS resources productively using the AWS CLI"}]},{"@type":"WebSite","@id":"https:\/\/bootstrap-it.com\/blog\/#website","url":"https:\/\/bootstrap-it.com\/blog\/","name":"Bootstrap IT","description":"Learn technology using technology","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bootstrap-it.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/bootstrap-it.com\/blog\/#\/schema\/person\/ae0fb1d5b3b01558b92b6426d77766ec","name":"dbclin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bootstrap-it.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a93785d437350478a7f1dfcbec58d26bc28e0124e405179acbe1b4325c09f90a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a93785d437350478a7f1dfcbec58d26bc28e0124e405179acbe1b4325c09f90a?s=96&d=mm&r=g","caption":"dbclin"},"sameAs":["http:\/\/bootstrap-it.com\/","dbclinton","https:\/\/twitter.com\/davidbclinton"],"url":"https:\/\/bootstrap-it.com\/blog\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=354"}],"version-history":[{"count":1,"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/354\/revisions"}],"predecessor-version":[{"id":356,"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/354\/revisions\/356"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=\/wp\/v2\/media\/355"}],"wp:attachment":[{"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bootstrap-it.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}