Checking in code for rt 7.27.3 version

This commit is contained in:
Vinay Aggarwal
2021-10-04 13:05:03 -07:00
parent 161f222b2a
commit 4cb7e10617
393 changed files with 31569 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
# asciidoctor image
FROM asciidoctor/docker-asciidoctor
LABEL "version"="1.0"
# Setup entrypoint
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

View File

@@ -0,0 +1,33 @@
# Asciidoctor GitHub Action
To use this action add the below config to **.github/workflows/adocs-build.yml**
```
name: build adocs
on:
push:
branches:
- master
- main
jobs:
adoc_build:
runs-on: ubuntu-18.04
name: asciidoctor -D docs --backend=html5 -o index.html -a toc2 docs/index.adoc
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Get build container
id: adocbuild
uses: path-to-/.actions/asciidoctor-action
with:
program: "asciidoctor -D docs --backend=html5 -o index.html docs/index.adoc"
- name: Print execution time
run: echo "Time ${{ steps.adocbuild.outputs.time }}"
- name: Deploy docs to ghpages
uses: peaceiris/actions-gh-pages@v3
with:
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
publish_branch: gh-pages
publish_dir: ./
```

View File

@@ -0,0 +1,20 @@
name: 'build asciidoctor action'
author: 'Tony Vattathil'
description: 'asciidoctor Build action'
branding:
icon: 'file'
color: 'green'
inputs:
program:
description: 'asciidoctor '
required: true
default: 'asciidoctor -D docs --backend=html5 -o index.html -a toc2 ddocs/index.adoc'
runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.program }}
outputs:
time:
description: 'Action Completed'

View File

@@ -0,0 +1,4 @@
#!/bin/bash
# entrypoint.sh
set -e
bash -c "$@"

View File

@@ -0,0 +1,4 @@
FROM python:3.8-buster
RUN pip install cfn-lint
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

View File

@@ -0,0 +1,19 @@
name: 'Customized cfn-lint action for AWS Quick Start org use'
author: 'Andrew Glenn'
branding:
icon: 'file-text'
color: 'green'
inputs:
program:
description: "cfnlint"
required: true
runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.program }}
outputs:
time:
description: 'Action Completed'

View File

@@ -0,0 +1,3 @@
#!/bin/bash
set -e
bash -c "$@"

View File

@@ -0,0 +1,24 @@
name: main-documentation
on:
push:
branches:
- develop
jobs:
lint:
runs-on: ubuntu-18.04
name: lint CFN templates
steps:
- name: Checkout (develop)
uses: actions/checkout@v2
with:
path: checked_out_repo
- name: Checkout (custom rules)
uses: actions/checkout@v2
with:
path: team_custom_rules
- name: Run local actions
id: cfnlint_custom
uses: ./docs/boilerplate/.actions/cfnlint-action
with:
program: "./docs/boilerplate/.utils/cfnlint_custom.sh"

View File

@@ -0,0 +1,38 @@
name: main-documentation
on:
push:
branches:
- master
- main
jobs:
build-adocs:
runs-on: ubuntu-18.04
name: asciidoc builder
steps:
- name: Checkout (main)
uses: actions/checkout@v2
- name: Get new doc updates
run: |
wget https://raw.githubusercontent.com/aws-quickstart/quickstart-documentation-base-common/main/.utils/configure_git_env.sh
chmod +x configure_git_env.sh
./configure_git_env.sh
- name: Setup python
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Generate dynamic content.
run: ./docs/boilerplate/.utils/generate_dynamic_content.sh
- name: Run local actions
id: adoc
uses: ./docs/boilerplate/.actions/asciidoctor-action
with:
program: "./docs/boilerplate/.utils/build_docs.sh"
- name: Stage and Push changes to gh-pages branch.
run: ./docs/boilerplate/.utils/commit_and_push_to_ghpages.sh
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
- name: Configure gh-pages source and trigger build if necessary.
run: ./docs/boilerplate/.utils/config_and_trigger_gh-pages.sh
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

View File

@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 30"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#f90;fill-rule:evenodd;}</style></defs><title>AWS-Logo_White-Color</title><path class="cls-1" d="M14.09,10.85a4.7,4.7,0,0,0,.19,1.48,7.73,7.73,0,0,0,.54,1.19.77.77,0,0,1,.12.38.64.64,0,0,1-.32.49l-1,.7a.83.83,0,0,1-.44.15.69.69,0,0,1-.49-.23,3.8,3.8,0,0,1-.6-.77q-.25-.42-.51-1a6.14,6.14,0,0,1-4.89,2.3,4.54,4.54,0,0,1-3.32-1.19,4.27,4.27,0,0,1-1.22-3.2A4.28,4.28,0,0,1,3.61,7.75,6.06,6.06,0,0,1,7.69,6.46a12.47,12.47,0,0,1,1.76.13q.92.13,1.91.36V5.73a3.65,3.65,0,0,0-.79-2.66A3.81,3.81,0,0,0,7.86,2.3a7.71,7.71,0,0,0-1.79.22,12.78,12.78,0,0,0-1.79.57,4.55,4.55,0,0,1-.58.22l-.26,0q-.35,0-.35-.52V2a1.09,1.09,0,0,1,.12-.58,1.2,1.2,0,0,1,.47-.35A10.88,10.88,0,0,1,5.77.32,10.19,10.19,0,0,1,8.36,0a6,6,0,0,1,4.35,1.35,5.49,5.49,0,0,1,1.38,4.09ZM7.34,13.38a5.36,5.36,0,0,0,1.72-.31A3.63,3.63,0,0,0,10.63,12,2.62,2.62,0,0,0,11.19,11a5.63,5.63,0,0,0,.16-1.44v-.7a14.35,14.35,0,0,0-1.53-.28,12.37,12.37,0,0,0-1.56-.1,3.84,3.84,0,0,0-2.47.67A2.34,2.34,0,0,0,5,11a2.35,2.35,0,0,0,.61,1.76A2.4,2.4,0,0,0,7.34,13.38Zm13.35,1.8a1,1,0,0,1-.64-.16,1.3,1.3,0,0,1-.35-.65L15.81,1.51a3,3,0,0,1-.15-.67.36.36,0,0,1,.41-.41H17.7a1,1,0,0,1,.65.16,1.4,1.4,0,0,1,.33.65l2.79,11,2.59-11A1.17,1.17,0,0,1,24.39.6a1.1,1.1,0,0,1,.67-.16H26.4a1.1,1.1,0,0,1,.67.16,1.17,1.17,0,0,1,.32.65L30,12.39,32.88,1.25A1.39,1.39,0,0,1,33.22.6a1,1,0,0,1,.65-.16h1.54a.36.36,0,0,1,.41.41,1.36,1.36,0,0,1,0,.26,3.64,3.64,0,0,1-.12.41l-4,12.86a1.3,1.3,0,0,1-.35.65,1,1,0,0,1-.64.16H29.25a1,1,0,0,1-.67-.17,1.26,1.26,0,0,1-.32-.67L25.67,3.64,23.11,14.34a1.26,1.26,0,0,1-.32.67,1,1,0,0,1-.67.17Zm21.36.44a11.28,11.28,0,0,1-2.56-.29,7.44,7.44,0,0,1-1.92-.67,1,1,0,0,1-.61-.93v-.84q0-.52.38-.52a.9.9,0,0,1,.31.06l.42.17a8.77,8.77,0,0,0,1.83.58,9.78,9.78,0,0,0,2,.2,4.48,4.48,0,0,0,2.43-.55,1.76,1.76,0,0,0,.86-1.57,1.61,1.61,0,0,0-.45-1.16A4.29,4.29,0,0,0,43,9.22l-2.41-.76A5.15,5.15,0,0,1,38,6.78a3.94,3.94,0,0,1-.83-2.41,3.7,3.7,0,0,1,.45-1.85,4.47,4.47,0,0,1,1.19-1.37A5.27,5.27,0,0,1,40.51.29,7.4,7.4,0,0,1,42.6,0a8.87,8.87,0,0,1,1.12.07q.57.07,1.08.19t.95.26a4.27,4.27,0,0,1,.7.29,1.59,1.59,0,0,1,.49.41.94.94,0,0,1,.15.55v.79q0,.52-.38.52a1.76,1.76,0,0,1-.64-.2,7.74,7.74,0,0,0-3.2-.64,4.37,4.37,0,0,0-2.21.47,1.6,1.6,0,0,0-.79,1.48,1.58,1.58,0,0,0,.49,1.18,4.94,4.94,0,0,0,1.83.92L44.55,7a5.08,5.08,0,0,1,2.57,1.6A3.76,3.76,0,0,1,47.9,11a4.21,4.21,0,0,1-.44,1.93,4.4,4.4,0,0,1-1.21,1.47,5.43,5.43,0,0,1-1.85.93A8.25,8.25,0,0,1,42.05,15.62Z"/><path class="cls-2" d="M45.19,23.81C39.72,27.85,31.78,30,25,30A36.64,36.64,0,0,1,.22,20.57c-.51-.46-.06-1.09.56-.74A49.78,49.78,0,0,0,25.53,26.4,49.23,49.23,0,0,0,44.4,22.53C45.32,22.14,46.1,23.14,45.19,23.81Z"/><path class="cls-2" d="M47.47,21.21c-.7-.9-4.63-.42-6.39-.21-.53.06-.62-.4-.14-.74,3.13-2.2,8.27-1.57,8.86-.83s-.16,5.89-3.09,8.35c-.45.38-.88.18-.68-.32C46.69,25.8,48.17,22.11,47.47,21.21Z"/></svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,771 @@
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment @import statement to use as custom stylesheet */
@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
dfn{font-style:italic}
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#34478c;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
ul.square{list-style-type:square}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
abbr{text-transform:none}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
blockquote cite::before{content:"\2014 \0020"}
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
:not(pre)>code.nobreak{word-wrap:normal}
:not(pre)>code.nowrap{white-space:nowrap}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{
border-bottom:1px solid #e7e7e9;
padding-bottom:.5em;
width: 230px;
}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{
font-family: "Work Sans", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
text-decoration:none;
color:#ccc;
display: block;
font-size:1rem;
line-height: 2rem;
}
#toc a:hover{color:#e6e6e6}
#toc a:active{
text-decoration:none;
color:#777;
}
#toctitle{
padding-top:0;
overflow:hidden;
background:#283e5b;
border-bottom: 4px solid #435c7c;
width:320px;
height:154px;
top:0;
left:0;
color: #283e5b;
}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
#toc.toc2{margin-top:0!important;background:#1c222a;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;/*! padding:1.25em 1em; */height:100%;overflow:auto;padding-right: 0px;}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{
font-size:1.375em;
background-repeat: no-repeat;
background-size: 160.8px 136.483px;
background-position: center;
}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:100%;background:#1c222a;padding:1.25em}
#footer-text{color:rgba(255,255,255,.8);line-height:1.44;/*! background: #e6e6e6; */}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
.exampleblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child{margin-bottom:0}
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
.sidebarblock>:first-child{margin-top:0}
.sidebarblock>:last-child{margin-bottom:0}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
pre.pygments .lineno::before{content:"";margin-right:-.125em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
table.tableblock{max-width:100%;border-collapse:separate}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
table.frame-all{border-width:1px}
table.frame-sides{border-width:0 1px}
table.frame-topbot,table.frame-ends{border-width:1px 0}
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
ul.checklist{margin-left:.625em}
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
.gist .file-data>table td.line-data{width:99%}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
/* ------------------------- QS CSS entries ---------------------------- */
@font-face {
font-family: 'Amazon Ember Light';
src :
local('Amazon Ember Light'),
local('AmazonEmberLight'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_lt-019e0ec3f9b521056e66e31fdcbc8323e5cd1938._V299195751_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_lt-bc9ed0fce860a46f3cb061034280c23400e6e8b6._V299195751_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Light';
font-weight: 700;
src :
local('Amazon Ember Light'),
local('AmazonEmberLight-Bold'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Light';
font-style : italic;
src :
local('Amazon Ember Light'),
local('AmazonEmberLight-Italic'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-96be47a559388a2b219577124589435c09a361fe._V299195751_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-b561f11b5c8be92ac17f6b713dd9d4b6e2f00c8d._V299195751_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Light';
font-style : italic;
font-weight: 700;
src :
local('Amazon Ember Light'),
local('AmazonEmberLight-BoldItalic'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-96be47a559388a2b219577124589435c09a361fe._V299195751_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_ltit-b561f11b5c8be92ac17f6b713dd9d4b6e2f00c8d._V299195751_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Regular';
src :
local('Amazon Ember Regular'),
local('AmazonEmberRegular'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rg-fd81bacb6a659a8c8c95828226b74594ab985060._V299195749_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rg-0acf3bc8b64d470d8888d84741a19533394654c6._V299195749_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Regular';
font-weight: 700;
src :
local('Amazon Ember Regular'),
local('AmazonEmberRegular-Bold'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Regular';
font-style : italic;
src :
local('Amazon Ember Regular'),
local('AmazonEmberRegular-Italic'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rgit-af980fe9c64fc17ece72cba4e3e7fdf54babeea6._V299195748_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_rgit-4fae4842b3446774d86579b9b024858a848644e8._V299195748_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Regular';
font-style : italic;
font-weight: 700;
src :
local('Amazon Ember Regular'),
local('AmazonEmberRegular-BoldItalic'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Medium';
src :
local('Amazon Ember Medium'),
local('AmazonEmberMedium'),
url('https://m.media-amazon.com/images/G/01/amazonservices/fonts/amazonember_md_base-webfont._V525237381_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/amazonservices/fonts/amazonember_md_base-webfont._V525237386_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Medium';
font-weight: 700;
src :
local('Amazon Ember Medium'),
local('AmazonEmberMedium-Bold'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Medium';
font-style : italic;
src :
local('Amazon Ember Medium'),
local('AmazonEmberMedium-Italic'),
url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_mdit-webfont._V522331917_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_mdit-webfont._V522331917_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Medium';
font-style : italic;
font-weight: 700;
src :
local('Amazon Ember Medium'),
local('AmazonEmberMedium-BoldItalic'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Heavy';
src :
local('Amazon Ember Heavy'),
local('AmazonEmberHeavy'),
url('https://m.media-amazon.com/images/G/01/acs/fonts/amazonember_he-webfont._V278446113_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/acs/fonts/amazonember_he-webfont._V278446115_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Heavy';
font-weight: 700;
src :
local('Amazon Ember Heavy'),
local('AmazonEmberHeavy-Bold'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Heavy';
font-style : italic;
src :
local('Amazon Ember Heavy'),
local('AmazonEmberHeavy-Italic'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Heavy';
font-style : italic;
font-weight: 700;
src :
local('Amazon Ember Heavy'),
local('AmazonEmberHeavy-BoldItalic'),
url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_heit-webfont._V522331917_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/agdm/fonts/amazonember/amazonember_heit-webfont._V522331917_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Thin';
src :
local('Amazon Ember Thin'),
local('AmazonEmberThin'),
url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thin-webfont._V282715032_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thin-webfont._V282715033_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Thin';
font-weight: 700;
src :
local('Amazon Ember Thin'),
local('AmazonEmberThin-Bold'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-46b91bda68161c14e554a779643ef4957431987b._V2_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bd-b605252f87b8b3df5ae206596dac0938fc5888bc._V2_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Thin';
font-style : italic;
src :
local('Amazon Ember Thin'),
local('AmazonEmberThin-Italic'),
url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thinit-webfont._V282715033_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/mobile-apps/devportal2/content/alexa/prize/20160810/fonts/AmazonEmber/amazonember-thinit-webfont._V282715032_.woff') format('woff');
}
@font-face {
font-family: 'Amazon Ember Thin';
font-style : italic;
font-weight: 700;
src :
local('Amazon Ember Thin'),
local('AmazonEmberThin-BoldItalic'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-80ff7aba37dd1ff5a6b90233a19e3a780a96dc2f._V2_.woff2') format('woff2'),
url('https://m.media-amazon.com/images/G/01/AUIClients/AmazonUIBaseCSS-amazonember_bdit-57598ce426a612be5a1d15eee08252668fca5e7a._V2_.woff') format('woff');
}
.tip {
border-top: 30px solid rgba(92, 184, 92, 0.8);
background: #E6F9E6;
}
.note {
border-top: 30px solid #6AB0DE;
background: #E7F2FA;
}
.warning {
border-top: 30px solid #F0B37E;
background: #FFF2DB;
}
.caution {
border-top: 30px solid rgba(217, 83, 79, 0.8);
background: #FAE2E2;
}
.important {
border-top: 30px solid rgba(217, 83, 79, 0.8);
background: #FAE2E2;
}
#content {
max-width: 100rem;
padding-left: 5rem;
padding-right: 5rem;
}
body {
font-family: "Amazon Ember Regular", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
}
/* added */
h1,
h2,
h3,
h4,
h5,
h6 {
margin : 0.85rem 0 1.7rem 0;
text-rendering: optimizeLegibility;
color: #ec7211;
}
p {
margin: 1rem 0;
}
/* QS Table of Contents */
#toc {
overflow-x: hidden !important;
}
#toc>ul li {
padding : 0.3rem 0.6rem;
margin-top : 0;
line-height: 1;
}
#toc>ul li a {
line-height: 1.6;
}
#toc a {
/* TOC details */
font-family : "Amazon Ember Light", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
margin-left : -1rem;
margin-right : -1rem;
padding-left : 1rem;
padding-right: 1rem;
background : transparent;
box-sizing : border-box;
cursor : pointer;
font-weight : 300 !important;
}
#toc.toc2 #toctitle{
background-image: url('images/AWS-Logo.svg');
}
/* QS Tables */
table.tableblock .title,
.imageblock .title {
font-family : "Amazon Ember Light", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif;
font-size: 1.1rem;
color: #34478c;
}
table p {
margin: 0rem;
}
/* Add border around hyperlink images */
a img {
border: 1px solid #A4A4A4;
}
.preview_mode {
border-color:#e0e0dc;
-webkit-box-shadow:0 1px 4px #e0e0dc;
box-shadow:0 1px 4px #e0e0dc;
background:#ffffb3;
padding-bottom: 2rem;
}
.preview_mode .tableblock {
background:#ffffb3;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

View File

@@ -0,0 +1,15 @@
:quickstart-project-name: quickstart-documentation-base
:partner-product-name: Example Product Name
:partner-product-short-name: Example Product Name
:partner-company-name: Example Company Name, Ltd.
:doc-month: May
:doc-year: 2020
:partner-contributors: John Doe and Jane Doe - {partner-company-name}
:quickstart-contributors: Jim Smith - AWS Global Partner SA, AWS + Joe Jones - Technical Product Manager, AWS
:deployment_time: 30 minutes / 1 hour
:default_deployment_region: us-east-1
// Uncomment these two attributes if you are leveraging
// - an AWS Marketplace listing.
// Additional content will be auto-generated based on these attributes.
// :marketplace_subscription:
// :marketplace_listing_url: https://example.com/

View File

@@ -0,0 +1,23 @@
// Add steps as necessary for accessing the software, post-configuration, and testing. Dont include full usage instructions for your software, but add links to your product documentation for that information.
//Should any sections not be applicable, remove them
== Test the deployment
// If steps are required to test the deployment, add them here. If not, remove the heading
== Post deployment steps
// If Post-deployment steps are required, add them here. If not, remove the heading
== Best practices for using {partner-product-short-name} on AWS
// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
_Add any best practices for using the software._
== Security
// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
_Add any security-related information._
== Other useful information
//Provide any other information of interest to users, especially focusing on areas where AWS or cloud usage differs from on-premises usage.
_Add any other details that will help the customer use the software on AWS._

View File

@@ -0,0 +1,30 @@
Deploying this Quick Start for a new virtual private cloud (VPC) with
default parameters builds the following _{partner-product-short-name}_ environment in the
AWS Cloud.
// Replace this example diagram with your own. Send us your source PowerPoint file. Be sure to follow our guidelines here : http://(we should include these points on our contributors giude)
[#architecture1]
.Quick Start architecture for _{partner-product-short-name}_ on AWS
[link=images/architecture_diagram.png]
image::../images/architecture_diagram.png[Architecture,width=648,height=439]
As shown in Figure 1, the Quick Start sets up the following:
* A highly available architecture that spans two Availability Zones.*
* A VPC configured with public and private subnets, according to AWS
best practices, to provide you with your own virtual network on AWS.*
In the public subnets:
* Managed network address translation (NAT) gateways to allow outbound
internet access for resources in the private subnets.*
* A Linux bastion host in an Auto Scaling group to allow inbound Secure
Shell (SSH) access to EC2 instances in public and private subnets.*
In the private subnets:
// Add bullet points for any additional components that are included in the deployment. Make sure that the additional components are also represented in the architecture diagram.
* <describe any additional components>.
*The template that deploys the Quick Start into an existing VPC skips
the components marked by asterisks and prompts you for your existing VPC
configuration.

View File

@@ -0,0 +1,55 @@
// We need to work around Step numbers here if we are going to potentially exclude the AMI subscription
=== Sign in to your AWS account
. Sign in to your AWS account at https://aws.amazon.com with an IAM user role that has the necessary permissions. For details, see link:#_planning_the_deployment[Planning the deployment] earlier in this guide.
. Make sure that your AWS account is configured correctly, as discussed in the link:#_technical_requirements[Technical requirements] section.
// Optional based on Marketplace listing. Not to be edited
ifdef::marketplace_subscription[]
=== Subscribe to the {partner-product-short-name} AMI
This Quick Start requires a subscription to the AMI for {partner-product-short-name} in AWS Marketplace.
. Sign in to your AWS account.
. {marketplace_listing_url}[Open the page for the {partner-product-short-name} AMI in AWS Marketplace], and then choose *Continue to Subscribe*.
. Review the terms and conditions for software usage, and then choose *Accept Terms*. +
A confirmation page loads, and an email confirmation is sent to the account owner. For detailed subscription instructions, see the https://aws.amazon.com/marketplace/help/200799470[AWS Marketplace documentation^].
. When the subscription process is complete, exit out of AWS Marketplace without further action. *Do not* provision the software from AWS Marketplace—the Quick Start deploys the AMI for you.
endif::marketplace_subscription[]
// \Not to be edited
=== Launch the Quick Start
NOTE: You are responsible for the cost of the AWS services used while running this Quick Start reference deployment. There is no additional cost for using this Quick Start. For full details, see the pricing pages for each AWS service used by this Quick Start. Prices are subject to change.
. Sign in to your AWS account, and choose one of the following options to launch the AWS CloudFormation template. For help with choosing an option, see link:#_deployment_options[deployment options] earlier in this guide.
[cols=2*]
|===
^|http://qs_launch_link[Deploy {partner-product-short-name} into a new VPC on AWS^]
^|http://qs_template_link[View template^]
^|http://qs_launch_link[Deploy {partner-product-short-name} into an existing VPC on AWS^]
^|http://qs_template_link[View template^]
|===
WARNING: If youre deploying {partner-product-short-name} into an existing VPC, make sure that your VPC has two private subnets in different Availability Zones for the workload instances, and that the subnets arent shared. This Quick Start doesnt support https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html[shared subnets^]. These subnets require https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html[NAT gateways^] in their route tables, to allow the instances to download packages and software without exposing them to the internet.
Also, make sure that the domain name option in the DHCP options is configured as explained in the http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html[Amazon VPC documentation^]. You provide your VPC settings when you launch the Quick Start.
Each deployment takes about {deployment_time} to complete.
[start=2]
. Check the AWS Region thats displayed in the upper-right corner of the navigation bar, and change it if necessary. This is where the network infrastructure for {partner-product-short-name} will be built. The template is launched in the {default_deployment_region} Region by default.
// *Note:* This deployment includes Amazon EFS, which isnt currently supported in all AWS Regions. For a current list of supported Regions, see the https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html[endpoints and quotas webpage].
[start=3]
. On the *Create stack* page, keep the default setting for the template URL, and then choose *Next*.
. On the *Specify stack details* page, change the stack name if needed. Review the parameters for the template. Provide values for the parameters that require input. For all other parameters, review the default settings and customize them as necessary.
// In the following tables, parameters are listed by category and described separately for the two deployment options:
// * Parameters for deploying {partner-product-short-name} into a new VPC
// * Parameters for deploying {partner-product-short-name} into an existing VPC

View File

@@ -0,0 +1,8 @@
// There are generally two deployment options. If additional are required, add them here
This Quick Start provides two deployment options:
* *Deploy {partner-product-short-name} into a new VPC (end-to-end deployment)*. This option builds a new AWS environment consisting of the VPC, subnets, NAT gateways, security groups, bastion hosts, and other infrastructure components. It then deploys {partner-product-short-name} into this new VPC.
* *Deploy {partner-product-short-name} into an existing VPC*. This option provisions {partner-product-short-name} in your existing AWS infrastructure.
The Quick Start provides separate templates for these options. It also lets you configure Classless Inter-Domain Routing (CIDR) blocks, instance types, and {partner-product-short-name} settings, as discussed later in this guide.

View File

@@ -0,0 +1,21 @@
// Add any tips or answers to anticipated questions. This could include the following troubleshooting information. If you dont have any other Q&A to add, change “FAQ” to “Troubleshooting.”
== FAQ
*Q.* I encountered a *CREATE_FAILED* error when I launched the Quick Start.
*A.* If AWS CloudFormation fails to create the stack, we recommend that you relaunch the template with *Rollback on failure* set to *Disabled*. (This setting is under *Advanced* in the AWS CloudFormation console, *Options* page.) With this setting, the stacks state is retained and the instance is left running, so you can troubleshoot the issue. (For Windows, look at the log files in %ProgramFiles%\Amazon\EC2ConfigService and C:\cfn\log.)
// If youre deploying on Linux instances, provide the location for log files on Linux, or omit this sentence.
WARNING: When you set *Rollback on failure* to *Disabled*, you continue to incur AWS charges for this stack. Please make sure to delete the stack when you finish troubleshooting.
For additional information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html[Troubleshooting AWS CloudFormation^] on the AWS website.
*Q.* I encountered a size limitation error when I deployed the AWS CloudFormation templates.
*A.* We recommend that you launch the Quick Start templates from the links in this guide or from another S3 bucket. If you deploy the templates from a local copy on your computer or from a location other than an S3 bucket, you might encounter template size limitations. For more information about AWS CloudFormation quotas, see the http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html[AWS documentation^].
== Troubleshooting
<Steps for troubleshooting the deployment go here.>

View File

@@ -0,0 +1,13 @@
// Include details about the license and how they can sign up. If no license is required, clarify that.
These two paragraphs provide an example of the details you can provide. Provide links as appropriate.
Example content below:
_<license information>This Quick Start requires a license for {partner-product-short-name}. To use the Quick Start in your production environment, sign up for a license at <link>. When you launch the Quick Start, place the license key in an S3 bucket and specify its location._
_If you dont have a license, the Quick Start deploys with a trial license. The trial license gives you <n> days of free usage in a non-production environment. After this time, you can upgrade to a production license by following the instructions at <link>._
// Or, if the deployment uses an AMI, update this paragraph. If it doesnt, remove the paragraph.
_<AMI information>The Quick Start requires a subscription to the Amazon Machine Image (AMI) for {partner-product-short-name}, which is available from https://aws.amazon.com/marketplace/[AWS Marketplace^]. Additional pricing, terms, and conditions may apply. For instructions, see link:#step-2.-subscribe-to-the-software-ami[step 2] in the deployment section._

View File

@@ -0,0 +1,7 @@
// Replace the content in <>
// Identify your target audience and explain how/why they would use this Quick Start.
//Avoid borrowing text from third-party websites (copying text from AWS service documentation is fine). Also, avoid marketing-speak, focusing instead on the technical aspect.
This Quick Start reference deployment guide provides step-by-step instructions for deploying {partner-product-short-name} on the AWS Cloud.
This Quick Start is for users who <target audience and usage scenario>

View File

@@ -0,0 +1,13 @@
// If no preperation is required, remove all content from here
==== Prepare your AWS account
_Describe any setup required in the AWS account prior to template launch_
==== Prepare your {partner-company-name} account
_Describe any setup required in the partner portal/account prior to template launch_
==== Prepare for the deployment
_Describe any preparation required to complete the product build, such as obtaining licenses or placing files in S3_

View File

@@ -0,0 +1,5 @@
// Replace the content in <>
// Briefly describe the software. Use consistent and clear branding.
// Include the benefits of using the software on AWS, and provide details on usage scenarios.
<Describe how the software works on AWS.>

View File

@@ -0,0 +1,4 @@
The following Regions are currently supported by this Quick Start.
- _us-east-1 (N. Virginia)_ (EXAMPLE)
- _us-east-2 (Ohio)_ (EXAMPLE)

View File

@@ -0,0 +1,14 @@
// Replace the <n> in each row to specify the number of resources used in this deployment. Remove the rows for resources that arent used.
|===
|Resource |This deployment uses
// Space needed to maintain table headers
|VPCs |<n>
|Elastic IP addresses |<n>
|AWS Identity and Access Management (IAM) security groups |<n>
|IAM roles |<n>
|Auto Scaling groups |<n>
|Application Load Balancers |<n>
|Network Load Balancers |<n>
|<type> instances |<n>
|===

View File

@@ -0,0 +1,6 @@
// Replace the content in <>
// Describe or link to specific knowledge requirements; for example: “familiarity with basic concepts in the areas of networking, database operations, and data encryption” or “familiarity with <software>.”
This Quick Start assumes familiarity with <knowledge expectations>.

View File

@@ -0,0 +1,22 @@
# Copyright 2020-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Amazon Software License (the "License"). You may not use this file except in compliance with the License.
# A copy of the License is located at
#
# http://aws.amazon.com/asl/
#
# or in the "license" file accompanying this file.
# This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied.
# See the License for the specific language governing permissions and limitations under the License.
FROM asciidoctor/docker-asciidoctor
RUN apk add --no-cache \
aws-cli \
py3-pip \
python3
RUN wget https://raw.githubusercontent.com/aws-quickstart/quickstart-documentation-base-common/main/.utils/requirements.txt -O /tmp/req.txt
RUN ln -sf /usr/bin/pip3 /usr/bin/pip
RUN ln -sf /usr/bin/python3 /usr/bin/python
RUN pip3 install -r /tmp/req.txt
ENTRYPOINT ["dockerd-entrypoint.sh"]

View File

@@ -0,0 +1,14 @@
#!/bin/bash
set -e
ASCIIDOC_ATTRIBUTES=""
GITHUB_REPO_OWNER=$(echo ${GITHUB_REPOSITORY} | cut -d '/' -f 1)
if [ -d docs/images ]; then
mv docs/images images
fi
if [ "${GITHUB_REPO_OWNER}" == "aws-quickstart" ]; then
cp docs/boilerplate/.css/AWS-Logo.svg images/
if [ "${GITHUB_REF}" == "refs/heads/master" ] || [ "${GITHUB_REF}" == "refs/heads/main" ]; then
ASCIIDOC_ATTRIBUTES="-a production_build"
fi
fi
asciidoctor --base-dir docs/ --backend=html5 -o ../index.html -w --failure-level ERROR --doctype=book -a toc2 ${ASCIIDOC_ATTRIBUTES} docs/boilerplate/index.adoc

View File

@@ -0,0 +1,23 @@
#!/bin/bash
set -e
if [[ -d "${GITHUB_WORKSPACE}/team_custom_rules" ]]; then
# Install requirements for custom rules, plus the rules themselves.
cd ${GITHUB_WORKSPACE}/team_custom_rules
pip install -r requirements.txt
python setup.py install
cd ${GITHUB_WORKSPACE}
# back to normal
CFNLINT_ARGS="-a ${GITHUB_WORKSPACE}/team_custom_rules/qs_cfn_lint_rules"
echo "Using custom ruleset"
else
echo "NOT using custom ruleset"
fi
CFNLINT_JSON_OUT=$(mktemp)
set +e
cfn-lint ${CFNLINT_ARGS} -i W --templates templates/* --format json > ${CFNLINT_JSON_OUT}
CFNLINT_EXIT_CODE=$?
set -e
python docs/boilerplate/.utils/pretty_cfnlint_output.py ${CFNLINT_JSON_OUT}
exit ${CFNLINT_EXIT_CODE}

View File

@@ -0,0 +1,24 @@
#!/bin/bash
set -eu
repo_uri="https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
remote_name="doc-upstream"
main_branch=$(basename "$(git symbolic-ref --short refs/remotes/origin/HEAD)")
target_branch="gh-pages"
cd "$GITHUB_WORKSPACE"
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add -A
git add images
git add index.html
git commit -a -m "Updating documentation"
if [ $? -ne 0 ]; then
echo "nothing to commit"
exit 0
fi
git remote set-url origin ${repo_uri}
git push origin HEAD:${target_branch} --force

View File

@@ -0,0 +1,11 @@
#!/bin/bash
exit 0
# set -e
# curl -fsSL https://github.com/github/hub/raw/master/script/get | bash -s 2.14.1
# sudo apt-get install jq -y
# PAGES_STATUS=$(bin/hub api repos/${GITHUB_REPOSITORY}/pages | jq '.status' | sed -e 's/"//g')
# if [ "${PAGES_STATUS}" != "null" ]; then
# exit 0
# fi
# bin/hub api -H Accept:application/vnd.github.switcheroo-preview+json repos/${GITHUB_REPOSITORY}/pages -f {"source":{"branch":"gh-pages"}}

View File

@@ -0,0 +1,32 @@
#!/bin/bash -e
set -x
git remote update
git fetch
set +e
git remote set-head origin --auto
default_branch=$(basename "$(git symbolic-ref --short refs/remotes/origin/HEAD)")
doc_commit_id=$(git submodule | grep docs/boilerplate | cut -d - -f 2 | cut -f 1 -d " ")
git rev-parse --verify origin/gh-pages
CHECK_BRANCH=$?
set -e
if [[ $CHECK_BRANCH -ne 0 ]];then
git checkout -b gh-pages
git push origin gh-pages
else
git checkout gh-pages
# git checkout --track origin/gh-pages
fi
git rm -rf .
touch .gitmodules
git restore -s origin/${default_branch} docs
set +e
git rm -r docs/boilerplate -r
rm -rf docs/boilerplate
set -e
git restore -s origin/${default_branch} templates
git submodule add https://github.com/aws-quickstart/quickstart-documentation-base-common.git docs/boilerplate
cd docs/boilerplate
git checkout "${doc_commit_id}"
cd ../../
rm configure_git_env.sh
mv docs/images images

View File

@@ -0,0 +1,34 @@
#!/bin/bash -e
# # Work in progress.
# exit 1
BOILERPLATE_DIR="docs/boilerplate"
GENERATED_DIR="docs/generated"
SPECIFIC_DIR="docs/partner_editable"
# Creating directories.
mkdir -p ${GENERATED_DIR}/parameters
mkdir -p ${GENERATED_DIR}/regions
mkdir -p ${GENERATED_DIR}/services
mkdir -p ${SPECIFIC_DIR}
mkdir -p docs/images
mkdir -p .github/workflows
# Copying content.
rsync -avP ${BOILERPLATE_DIR}/.images/ docs/images/
rsync -avP ${BOILERPLATE_DIR}/.specific/ ${SPECIFIC_DIR}
# enabling workflow.
cp ${BOILERPLATE_DIR}/.actions/main-docs-build.yml .github/workflows/
# creating placeholders.
echo "// placeholder" > ${GENERATED_DIR}/parameters/index.adoc
echo "// placeholder" > ${GENERATED_DIR}/regions/index.adoc
echo "// placeholder" > ${GENERATED_DIR}/services/index.adoc
echo "// placeholder" > ${GENERATED_DIR}/services/metadata.adoc
touch .nojekyll
git add -A docs/
git add .github/
git add .nojekyll

View File

@@ -0,0 +1,44 @@
#!/bin/bash -e
# This file is meant to be the functional equalivent of the github actions workflow.
#
# // 5 env vars are required to use this.
# - DOCBUILD_BOILERPLATE_S3_BUCKET
# This defines the S3 bucketwhere a zip'd copy of *this repo* is located.
# Example Value: "my-bucket-name-here"
# - DOCBUILD_BOILERPLATE_S3_KEY
# This defines the S3 Object key for the above-mentioned ZIP file.
# Example Value: /path/to/my/file.zip
# - DOCBUILD_CONTENT_S3_BUCKET
# This defines the S3 bucket where a zip'd copy of repo to build is located.
# (can be the same bucket)
# Example value: "my-bucket-name-here"
# - DOCBUILD_CONTENT_S3_KEY
# This is the key where a ZIP of your content repo is located.
# Example Value: "/path/to/my/other_file.zip"
# - DOCBUILD_DESTINATION_S3_BUCKET
# Bucket to upload the generated content to.
# - DOCBUILD_DESTINATION_S3_KEY
# S3 Key prefix for the generated content
# - GITHUB_REPOSITORY
# Easy identifier of the project that documentation is being built for.
# - EX: jim-jimmerson/foobar
#
#
#
# Structure
# <project repo> --- Content repo is unzipped.
# docs/boilerplate -- Boilerplate repo is unzipped here.
DL_DIR=$(mktemp -d)
WORKING_DIR=$(mktemp -d)
aws s3 cp s3://${DOCBUILD_BOILERPLATE_S3_BUCKET}/${DOCBUILD_BOILERPLATE_S3_KEY} ${DL_DIR}/boilerplate.zip
aws s3 cp s3://${DOCBUILD_CONTENT_S3_BUCKET}/${DOCBUILD_CONTENT_S3_KEY} ${DL_DIR}/content.zip
unzip ${DL_DIR}/content.zip -d ${WORKING_DIR}
rm -rf ${WORKING_DIR}/docs/boilerplate
unzip ${DL_DIR}/boilerplate.zip -d ${WORKING_DIR}/docs/boilerplate
cd ${WORKING_DIR}
./docs/boilerplate/.utils/generate_dynamic_content.sh
./docs/boilerplate/.utils/build_docs.sh
aws s3 sync ${WORKING_DIR} s3://${DOCBUILD_DESTINATION_S3_BUCKET}/${DOCBUILD_DESTINATION_S3_KEY}/ --cache-control max-age=0,no-cache,no-store,must-revalidate --acl public-read

View File

@@ -0,0 +1,9 @@
#!/bin/bash
# Wrapper to generate parameter tables within asciidoc workflow.
set -e
#sudo apt-get install pandoc -y
pip3 install -r docs/boilerplate/.utils/requirements.txt;
echo "Gen tables"
python docs/boilerplate/.utils/generate_parameter_tables.py
echo "Gen metadata"
python docs/boilerplate/.utils/generate_metadata_attributes.py

View File

@@ -0,0 +1,28 @@
#!/usr/bin/env python
import io
import cfnlint
from pathlib import Path
def get_cfn(filename):
_decoded = cfnlint.decode.decode(filename, False)[0]
return _decoded
def fetch_metadata():
metadata_attributes = set()
for yaml_cfn_file in Path('./templates').glob('*.template*'):
template = get_cfn(Path(yaml_cfn_file))
if not template:
raise Exception(f"cfn-lint failed to load {yaml_cfn_file} without errors. Failure")
_resources = template['Resources']
for _resource in _resources.values():
_type = _resource['Type'].lower()
metadata_attributes.add(_type.split('::')[1])
metadata_attributes.add(_type.replace('::','_'))
with open('docs/generated/services/metadata.adoc', 'w') as f:
f.write('\n')
for attr in sorted(metadata_attributes):
f.write(f":template_{attr}:\n")
if __name__ == '__main__':
fetch_metadata()

View File

@@ -0,0 +1,116 @@
#!/usr/bin/env python
import io
import cfnlint
import datetime
from pathlib import Path
def get_cfn(filename):
_decoded = cfnlint.decode.decode(filename, False)[0]
return _decoded
def _generate_table_name_and_header(label_name):
data = []
data.append(f"\n.{label_name}")
data.append('[width="100%",cols="16%,11%,73%",options="header",]')
data.append("|===")
data.append("|Parameter label (name) |Default value|Description")
return "\n".join(data)
def _generate_per_label_table_entry(label, param, default, description):
data = []
if not label:
label = "**NO_LABEL**"
data.append(f"|{label}")
data.append(f"(`{param}`)|`{default}`|{description}")
return '\n'.join(data)
def just_pass():
template_entrypoints = {}
template_order = {}
found_files_with_glob_pattern=False
for yaml_cfn_file in Path('./templates').glob('*.template*'):
found_files_with_glob_pattern=True
print(f"Working on {yaml_cfn_file}")
template = get_cfn(Path(yaml_cfn_file))
if not template:
raise Exception(f"cfn-lint failed to load {yaml_cfn_file} without errors. Failure")
entrypoint = template.get('Metadata', {}).get('QuickStartDocumentation', {}).get('EntrypointName')
if not entrypoint:
print(f"- No documentation entrypoint found. Continuing.")
continue
order = template.get('Metadata',{}).get('QuickStartDocumentation',{}).get('Order')
if not order:
print(f"- No documentation order found. Assigning x.")
order = 'x'
_pf = Path(yaml_cfn_file).stem + ".adoc"
p_file = f"docs/generated/parameters/{_pf}"
template_entrypoints[p_file.split('/')[-1]] = entrypoint
template_order[p_file.split('/')[-1]] = str(order)
label_mappings = {}
reverse_label_mappings = {}
parameter_mappings = {}
parameter_labels = {}
no_groups = {}
def determine_optional_value(param):
optional = template['Metadata'].get('QuickStartDocumentation', {}).get('OptionalParameters')
if optional and (param in optional):
return '__Optional__'
return '**__Requires input__**'
for label in template['Metadata']['AWS::CloudFormation::Interface']['ParameterGroups']:
label_name = label['Label']['default']
label_params = label['Parameters']
label_mappings[label_name] = label_params
for ln in label_params:
reverse_label_mappings[ln] = label_name
for label_name, label_data in template['Metadata']['AWS::CloudFormation::Interface']['ParameterLabels'].items():
parameter_labels[label_name] = label_data.get('default')
for param_name, param_data in template['Parameters'].items():
if param_data.get('Default') == '':
param_data['Default'] = '**__Blank string__**'
parameter_mappings[param_name] = param_data
if not reverse_label_mappings.get(param_name):
no_groups[param_name] = param_data
adoc_data = ""
for label_name, label_params in label_mappings.items():
header = _generate_table_name_and_header(label_name)
adoc_data += header
for lparam in label_params:
param_data = _generate_per_label_table_entry(
parameter_labels.get(lparam, ''),
lparam,
parameter_mappings[lparam].get('Default', determine_optional_value(lparam)),
parameter_mappings[lparam].get('Description', 'NO_DESCRIPTION')
)
adoc_data += param_data
adoc_data += "\n|==="
print(f"- Generating: {p_file}")
with open (p_file, 'w') as p:
p.write(adoc_data)
if not found_files_with_glob_pattern:
raise Exception("No files matching templates/*.template.(json|yaml|yml) were found. Unable to build documentation. Exiting.")
if not template_entrypoints:
raise Exception("No documentation entrypoints (Metadata => QuickStartDocumentation => EntrypointName) were found. Unable to build documentation. Exiting.")
with open('docs/generated/parameters/index.adoc', 'w') as f:
for template_file, order in sorted(template_order.items(), key=lambda x: x[1]):
print (f"Index - {order} - {template_entrypoints.get(template_file)} - {template_file}")
f.write(f"\n=== {template_entrypoints.get(template_file)}\n")
f.write(f"include::{template_file}[]\n")
if __name__ == '__main__':
print("---")
print("> Milton, don't be greedy. Let's pass it along and make sure everyone gets a piece.")
print("> Can I keep a piece, because last time I was told that...")
print("> Just pass.")
print("---")
just_pass()
print("---")

View File

@@ -0,0 +1,32 @@
#!/usr/bin/env python
import sys
import json
fn = sys.argv[1]
severity_to_icon = {
'Warning':u'\u270B',
'Error':u'\u274C'
}
results = {}
with open(fn) as f:
x = json.load(f)
for rule_match in x:
_fn = rule_match['Filename']
_sl = rule_match['Location']['Start']['LineNumber']
_el = rule_match['Location']['End']['LineNumber']
_msg = rule_match['Message']
_lvl = rule_match['Level']
_rid = rule_match['Rule']['Id']
try:
results[_fn][_sl] = (_lvl, _rid, _msg)
except KeyError:
results[_fn] = {_sl:(_lvl, _rid, _msg)}
for k in sorted(results.keys()):
print('\n{}'.format(k))
for l,v in results[k].items():
print("- {} [{}] ({}) | Line: {} - {}".format(severity_to_icon.get(v[0]), v[0].upper(), v[1], l, v[2]))

View File

@@ -0,0 +1,5 @@
requests
cfn-lint
pathlib
datetime
ruamel.yaml

View File

@@ -0,0 +1,2 @@
* @aws-quickstart/sa
/.specific/* @aws-quickstart/tw @aws-quickstart/sa

View File

@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -0,0 +1,112 @@
[.text-center]
[discrete]
== {partner-product-name} on the AWS Cloud
:doctitle: {partner-product-name} on the AWS Cloud
:!toc:
[.text-left]
include::../{includedir}/introduction.adoc[]
== Overview
include::../{includedir}/overview.adoc[]
== {partner-product-name} on AWS
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/product_description.adoc`**_
[.preview_mode]
|===
a|
endif::production_build[]
include::../{specificdir}/product_description.adoc[]
ifndef::production_build[]
|===
endif::production_build[]
== Cost
include::../{includedir}/cost.adoc[]
ifndef::disable_licenses[]
== Software licenses
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/licenses.adoc`**_
[.preview_mode]
|===
a|
endif::production_build[]
include::../{specificdir}/licenses.adoc[]
ifndef::production_build[]
|===
endif::production_build[]
endif::disable_licenses[]
== Architecture
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/architecture.adoc`**_
[.preview_mode]
|===
a|
endif::production_build[]
include::../{specificdir}/architecture.adoc[]
ifndef::production_build[]
|===
endif::production_build[]
== Planning the deployment
include::../{includedir}/planning_deployment.adoc[]
== Deployment steps
include::../{includedir}/deployment_steps.adoc[]
// == Parameters
// include::../{generateddir}/parameters/index.adoc[]
// additional_info.adoc contains 3 sections: Best Practice, Security & Other information
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/additional_info.adoc`**_
++++
<div class="preview_mode">
++++
endif::production_build[]
include::../{specificdir}/additional_info.adoc[]
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/faq_troubleshooting.adoc`**_
++++
<div class="preview_mode">
++++
endif::production_build[]
include::../{specificdir}/faq_troubleshooting.adoc[]
ifndef::production_build[]
++++
</div>
++++
endif::production_build[]
ifdef::parameters_as_appendix[]
== Parameter reference
include::../{generateddir}/parameters/index.adoc[]
endif::parameters_as_appendix[]
== Send us feedback
To post feedback, submit feature ideas, or report bugs, use the *Issues* section of the https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] for this Quick Start. If youd like to submit code, please review the https://aws-quickstart.github.io/[Quick Start Contributors Guide^].
== Quick Start reference deployments
See the https://aws.amazon.com/quickstart/[AWS Quick Start home page].
== GitHub repository
You can visit our https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] to download
the templates and scripts for this Quick Start, to post your comments,
and to share your customizations with others.
'''
include::../{includedir}/disclaimer.adoc[]

View File

@@ -0,0 +1,11 @@
You are responsible for the cost of the AWS services used while running
this Quick Start. There is no additional cost for
using the Quick Start.
The AWS CloudFormation template for this Quick Start includes
configuration parameters that you can customize. Some of the settings,
such as the instance type, affect the cost of deployment. For cost estimates,
see the pricing pages for each AWS service you use. Prices are subject to change.
TIP: After you deploy the Quick Start, enable the https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-reports-gettingstarted-turnonreports.html[AWS Cost and Usage Report^] to deliver billing metrics to an Amazon Simple Storage Service (Amazon S3) bucket in your account. It provides cost estimates based on usage throughout each month and aggregates the data at the end of the month. For more information about the report, see the https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-reports-costusage.html[AWS documentation^].

View File

@@ -0,0 +1,42 @@
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/deploy_steps.adoc`**_
++++
<div class="preview_mode">
++++
endif::production_build[]
include::../{specificdir}/deploy_steps.adoc[]
ifndef::production_build[]
++++
</div>
++++
endif::production_build[]
ifndef::custom_number_of_deploy_steps[]
ifndef::parameters_as_appendix[]
In the following tables, parameters are listed by category and described separately for the deployment options. When you finish reviewing and customizing the parameters, choose *Next*.
endif::parameters_as_appendix[]
NOTE: Unless you are customizing the Quick Start templates for your own deployment projects, we recommend that you keep the default settings for the parameters labeled `Quick Start S3 bucket name`, `Quick Start S3 bucket
Region`, and `Quick Start S3 key prefix`. Changing these parameter settings automatically updates code references to point to a new Quick Start location. For more information, see the https://aws-quickstart.github.io/option1.html[AWS Quick Start Contributors Guide^].
ifndef::parameters_as_appendix[]
// Parameter tables linked in here
include::../{generateddir}/parameters/index.adoc[]
endif::parameters_as_appendix[]
[start=5]
. On the options page, you can https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html[specify tags^] (key-value pairs) for resources in your stack and https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html[set advanced options^]. When youre done, choose *Next*.
. On the *Review* page, review and confirm the template settings. Under *Capabilities*, select the two check boxes to acknowledge that the template creates IAM resources and might require the ability to automatically expand macros.
. Choose *Create stack* to deploy the stack.
ifndef::partner-product-short-name[. Monitor the status of the stack. When the status is *CREATE_COMPLETE*, the {partner-product-name} deployment is ready.]
ifdef::partner-product-short-name[. Monitor the status of the stack. When the status is *CREATE_COMPLETE*, the {partner-product-short-name} deployment is ready.]
. Use the values displayed in the *Outputs* tab for the stack, as shown in <<cfn_outputs>>, to view the created resources.
:xrefstyle: short
[#cfn_outputs]
ifndef::partner-product-short-name[.{partner-product-name} outputs after successful deployment]
ifdef::partner-product-short-name[.{partner-product-short-name} outputs after successful deployment]
[link=images/cfn_outputs.png]
image::../images/cfn_outputs.png[cfn_outputs,width=648,height=439]
endif::custom_number_of_deploy_steps[]

View File

@@ -0,0 +1,7 @@
© 2020, Amazon Web Services Inc., or its affiliates, and {partner-company-name}. All rights reserved.
== Notices
This document is provided for informational purposes only. It represents AWSs current product offerings and practices as of the date of issue of this document, which are subject to change without notice. Customers are responsible for making their own independent assessment of the information in this document and any use of AWSs products or services, each of which is provided “as is” without warranty of any kind, whether expressed or implied. This document does not create any warranties, representations, contractual commitments, conditions, or assurances from AWS, its affiliates, suppliers, or licensors. The responsibilities and liabilities of AWS to its customers are controlled by AWS agreements, and this document is not part of, nor does it modify, any agreement between AWS and its customers.
The software included with this paper is licensed under the Apache License, version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at http://aws.amazon.com/apache2.0/ or in the accompanying "license" file. This code is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either expressed or implied. See the License for specific language governing permissions and limitations.

View File

@@ -0,0 +1,14 @@
:imagesdir: images
:includedir: boilerplate
:specificdir: partner_editable
:generateddir: generated
:icons: font
:toc2: left
:toc-title:
:toclevels: 2
:stylesheet: {includedir}/.css/quickstart.css
:project_cfn:
:template_services_ec2:
include::{specificdir}/_settings.adoc[]
:title: {partner-product-name} on the AWS Cloud
ifdef::project_cfn[include::{includedir}/_layout_cfn.adoc[]]

View File

@@ -0,0 +1,40 @@
[.text-center]
[discrete]
== Quick Start Reference Deployment
[.text-center]
image::../images/aws-quickstart-graphic.png[QS,80,80]
ifndef::production_build[]
[.text-center]
[discrete]
=== DRAFT DOCUMENT / UNOFFICIAL GUIDANCE
_**This portion of the deployment guide is located at `docs/{specificdir}/__settings_.adoc`**_
[.preview_mode]
|===
a|
endif::production_build[]
[.text-center]
*{doc-month}, {doc-year}* +
ifdef::partner-contributors[]
_{partner-contributors}_ +
endif::partner-contributors[]
_{quickstart-contributors}_
[.text-left]
ifndef::production_build[]
|===
endif::production_build[]
TIP: Visit our https://github.com/aws-quickstart/{quickstart-project-name}[GitHub repository^] for source files and to post feedback,
report bugs, or submit feature ideas for this Quick Start.
ifdef::partner-company-name[]
[.text-left]
This Quick Start was created by {partner-company-name} in collaboration with Amazon Web Services (AWS). http://aws.amazon.com/quickstart/[Quick Starts^] are automated reference deployments that use AWS CloudFormation templates to deploy key technologies on AWS, following AWS best practices.
endif::[]
ifndef::partner-company-name[]
[.text-left]
This Quick Start was created by Amazon Web Services (AWS). http://aws.amazon.com/quickstart/[Quick Starts^] are automated reference deployments that use AWS CloudFormation templates to deploy key technologies on AWS, following AWS best practices.
endif::[]

View File

@@ -0,0 +1,18 @@
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/overview_target_and_usage.adoc`**_
[.preview_mode]
|===
a|
endif::production_build[]
include::../{specificdir}/overview_target_and_usage.adoc[]
ifndef::production_build[]
|===
endif::production_build[]
ifdef::partner-company-name[]
NOTE: Amazon may share who uses AWS
Quick Starts with the AWS Partner Network (APN) Partner that
collaborated with AWS on the content of the Quick Start.
endif::partner-company-name[]

View File

@@ -0,0 +1,122 @@
=== Specialized knowledge
This deployment guide requires a moderate level of familiarity with
AWS services. If youre new to AWS, visit the
https://aws.amazon.com/getting-started/[Getting Started Resource Center^]
and the https://aws.amazon.com/training/[AWS Training and Certification
website]. These sites provide materials for learning how to design,
deploy, and operate your infrastructure and applications on the AWS
Cloud.
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/specialized_knowledge.adoc`**_
[.preview_mode]
|===
a|
endif::production_build[]
include::../{specificdir}/specialized_knowledge.adoc[]
ifndef::production_build[]
|===
endif::production_build[]
=== AWS account
If you dont already have an AWS account, create one at https://aws.amazon.com/[https://aws.amazon.com^] by following the on-screen instructions. Part of the sign-up process involves receiving a phone call and entering a PIN using the phone keypad.
Your AWS account is automatically signed up for all AWS services. You are charged only for the services you use.
ifndef::disable_requirements[]
=== Technical requirements
Before you launch the Quick Start, your account must be configured as specified in the following table. Otherwise, deployment might fail.
endif::disable_requirements[]
==== Resource limits
// http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html[Resources] a|
If necessary, request https://console.aws.amazon.com/servicequotas/home?region=us-east-2#!/[service quota increases^] for the following resources. You might need to request increases if your existing deployment currently uses these resources, and this Quick Start deployment could result in exceeding the default quotas. The https://console.aws.amazon.com/servicequotas/home?region=us-east-2#!/[Service Quotas console^] displays your usage and quotas for some aspects of some services. For more information, see the https://docs.aws.amazon.com/servicequotas/latest/userguide/intro.html[AWS documentation^].
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/service_limits.adoc`**_
++++
<div class="preview_mode">
++++
endif::production_build[]
include::../{specificdir}/service_limits.adoc[]
ifndef::production_build[]
++++
</div>
++++
endif::production_build[]
include::../{generateddir}/services/metadata.adoc[]
ifndef::disable_regions[]
// We can also pull in regions automatically.
==== Supported Regions
ifdef::template_not_all_regions[]
This deployment includes <service>, which isnt currently supported in https://aws.amazon.com/about-aws/global-infrastructure/[all AWS Regions^].
endif::template_not_all_regions[]
ifdef::auto_populate_regions[]
The following Regions are currently supported by this Quick Start.
include::../{generateddir}/regions/index.adoc[]
endif::auto_populate_regions[]
ifndef::auto_populate_regions[]
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/regions.adoc`**_
++++
<div id="preview_mode">
++++
endif::production_build[]
include::../{specificdir}/regions.adoc[]
ifndef::production_build[]
++++
</div>
++++
endif::production_build[]
endif::auto_populate_regions[]
TIP: Certain Regions are available on an opt-in basis. Refer to the AWS Documentation on https://docs.aws.amazon.com/general/latest/gr/rande-manage.html[Managing Regions^] for more information.
endif::disable_regions[]
ifdef::template_ec2[]
==== EC2 key pairs
ifndef::production_build[====]
ifndef::production_build[_This section is conditional on EC2 instances being used in the Cloudformation Templates_]
ifndef::production_build[====]
Make sure that at least one https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[Amazon EC2 key pair^] exists in your AWS account in the Region where you plan to deploy the Quick Start. Make note of the key pair name. You need it during deployment. To create a key pair, follow the https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[instructions in the AWS documentation^].
For testing or proof-of-concept purposes, we recommend creating a new key pair instead of using one thats already being used by a production instance.
endif::template_ec2[]
==== IAM permissions
//todo: scope of least-privilege
Before launching the Quick Start, you must log in to the AWS Management Console with https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html[IAM permissions^] for the resources and actions the templates deploy.
The _AdministratorAccess_ managed policy within IAM provides sufficient permissions, although your organization may choose to use a custom policy with more restrictions.
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/pre-reqs.adoc`**_
[.preview_mode]
|===
a|
endif::production_build[]
include::../{specificdir}/pre-reqs.adoc[]
ifndef::production_build[]
|===
endif::production_build[]
==== Deployment options
ifndef::production_build[]
_**This portion of the deployment guide is located at `docs/{specificdir}/deployment_options.adoc`**_
[.preview_mode]
|===
a|
endif::production_build[]
include::../{specificdir}/deployment_options.adoc[]
ifndef::production_build[]
|===
endif::production_build[]

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

View File

@@ -0,0 +1,14 @@
:quickstart-project-name: quickstart-aws-vpc
:partner-product-name: Amazon VPC
:partner-company-name:
:doc-month: July
:doc-year: 2020
:partner-contributors:
:quickstart-contributors: Santiago Cardenas, AWS Quick Start team
:deployment_time: 5 minutes
:default_deployment_region: us-west-2
// Uncomment these two attributes if you are leveraging
// - an AWS Marketplace listing.
// Additional content will be auto-generated based on these attributes.
// :marketplace_subscription:
// :marketplace_listing_url: https://example.com/

View File

@@ -0,0 +1,302 @@
// Add steps as necessary for accessing the software, post-configuration, and testing. Dont include full usage instructions for your software, but add links to your product documentation for that information.
//Should any sections not be applicable, remove them
== Add AWS services or other applications
// If Post-deployment steps are required, add them here. If not, remove the heading
After you use this Quick Start to build your VPC environment, you can deploy additional
Quick Starts or deploy your own applications on top of this AWS infrastructure. If you
decide to extend your AWS environment with https://aws.amazon.com/quickstart/[additional Quick Starts] for trial or production
use, we recommend that you choose the option to deploy the Quick Start into an existing
VPC, where that option is available.
If you decide to deploy additional private subnets with dedicated network ACLs, make sure
you review the configuration and adjust it accordingly. By default, the custom ACLs are
configured to allow all inbound and outbound traffic to flow in order to facilitate the
deployment of additional infrastructure. For more information, see https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html[Network ACLs] and
https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Appendix_NACLs.html[Recommended Network ACL Rules for Your VPC] in the Amazon VPC documentation.
== Best practices for using {partner-product-name} on AWS
// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
The architecture built by this Quick Start supports AWS best practices for high availability
and security. The Quick Start provides:
* Up to four Availability Zones for high availability and disaster recovery. (AWS
recommends maximizing your use of Availability Zones to isolate a data center outage.)
Availability Zones are geographically distributed within a region and spaced for best
insulation and stability in the event of a natural disaster.
* Separate subnets for unique routing requirements. AWS recommends using public
subnets for external-facing resources and private subnets for internal resources. For
each Availability Zone, this Quick Start provisions one public subnet and one private
subnet by default. (If you need public subnets only, you can disable the creation of the
private subnets.) For subnet sizing strategies, see the next section.
* Additional layer of security. AWS recommends using network ACLs as firewalls to
control inbound and outbound traffic at the subnet level. This Quick Start provides an
option to create a network ACL protected subnet in each Availability Zone. These
network ACLs provide individual controls that you can customize as a second layer of
defense.
We recommend that you use network ACLs sparingly for the following reasons: they can
be complex to manage, they are stateless, every IP address must be explicitly opened in
each (inbound/outbound) direction, and they affect a complete subnet. We recommend
that you use security groups more often than network ACLs, and create and apply these
based on a schema that works for your organization. Some examples are server roles and
application roles. For more information about security groups and network ACLs, see
the link:#_security[Security] section later in this guide.
* Independent route tables configured for every private subnet to control the flow of
traffic within and outside the Amazon VPC. The public subnets share a single routing
table, because they all use the same Internet gateway as the sole route to communicate
with the Internet.
* Highly available NAT gateways deployed, that offer major advantages in terms of deployment,
availability, and maintenance over NAT instances. For more information see the http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-comparison.html[comparison]
provided in the Amazon VPC documentation.
* Spare capacity for additional subnets, to support your environment as it grows or
changes over time.
For additional information about these best practices, see the following documentation:
* http://d0.awsstatic.com/aws-answers/AWS_Single_VPC_Design.pdf[AWS Single VPC Design] from the AWS Answers website
* http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html[Your VPC and Subnets] in the Amazon VPC documentation
* https://medium.com/aws-activate-startup-blog/practical-vpc-design-8412e1a18dcc[Practical VPC Design] in the AWS Startups blog
* http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html[Network ACLs] in the Amazon VPC documentation
=== Subnet Sizing
In this Quick Start, the sizing of CIDR blocks used in the subnets is based on a typical
deployment, where private subnets would have roughly double the number of instances
found in public subnets. However, during deployment, you can use the CIDR block
parameters to resize the CIDR scopes to meet your architectural needs.
In the default subnet allocation, the VPC is divided into subnet types and then further
segmented per Availability Zone, as illustrated in link:#_architecture[Figure 1]. The Quick Start provides the
following default CIDR block sizes to maximize capacity:
[cols="60,40a", options="header",grid=none, frame=topbot, stripes=even]
|===
| VPC
^| 10.0.0.0/16
|Private subnets A
^|10.0.0.0/17
|
|
[cols="2,1", grid=rows, frame=topbot]
!===
! Availability Zone 1
^! 10.0.0.0/19
! Availability Zone 2
^! 10.0.32.0/19
! Availability Zone 3
^! 10.0.64.0/19
! Availability Zone 4
^! 10.0.96.0/19
!===
|Public subnets
^|10.0.128.0/18
|
|
[cols="2,1", grid=rows, frame=topbot]
!===
! Availability Zone 1
^! 10.0.128.0/20
! Availability Zone 2
^! 10.0.144.0/20
! Availability Zone 3
^! 10.0.160.0/20
! Availability Zone 4
^! 10.0.176.0/20
!===
|Private subnets B with
dedicated custom network
ACL
^|10.0.192.0/19
|
|
[cols="2,1", grid=rows, frame=topbot]
!===
! Availability Zone 1
^! 10.0.192.0/21
! Availability Zone 2
^! 10.0.200.0/21
! Availability Zone 3
^! 10.0.208.0/21
! Availability Zone 4
^! 10.0.216.0/21
!===
|Spare subnet capacity
^|10.0.224.0/19
|
|
[cols="2,1", grid=rows, frame=topbot]
!===
! Availability Zone 1
^! 10.0.224.0/21
! Availability Zone 2
^! 10.0.232.0/21
! Availability Zone 3
^! 10.0.240.0/21
! Availability Zone 4
^! 10.0.248.0/21
!===
|===
Alternatively, there may be situations where you would want to separate the CIDR scopes
by dividing the VPC into Availability Zones and then into subnet types. The recommended
CIDR blocks to maximize capacity for this scenario are as follows:
[cols="60,40a", options="header",grid=none, frame=topbot, stripes=even]
|===
| VPC
^| 10.0.0.0/16
|Availability Zone 1
^|10.0.0.0/18
|
|
[cols="2,1", grid=rows, frame=topbot]
!===
! Private subnet A
^! 10.0.0.0/19
! Public subnet
^! 10.0.32.0/20
! Private subnet B
^! 10.0.48.0/21
! Spare subnet capacity
^! 10.0.56.0/21
!===
|Availability Zone 2
^|10.0.64.0/18
|
|
[cols="2,1", grid=rows, frame=topbot]
!===
! Private subnet A
^! 10.0.64.0/19
! Public subnet
^! 10.0.96.0/20
! Private subnet B
^! 10.0.112.0/21
! Spare subnet capacity
^! 10.0.120.0/21
!===
|Availability Zone 3
^|10.0.128.0/18
|
|
[cols="2,1", grid=rows, frame=topbot]
!===
! Private subnet A
^! 10.0.128.0/19
! Public subnet
^! 10.0.160.0/20
! Private subnet B
^! 10.0.176.0/21
! Spare subnet capacity
^! 10.0.184.0/21
!===
|Availability Zone 4
^|10.0.192.0/18
|
|
[cols="2,1", grid=rows, frame=topbot]
!===
! Private subnet A
^! 10.0.192.0/19
! Public subnet
^! 10.0.224.0/20
! Private subnet B
^! 10.0.240.0/21
! Spare subnet capacity
^! 10.0.248.0/21
!===
|===
To customize the CIDR ranges for this scenario or to implement your own segmentation
strategy, you can configure the Quick Start parameters described in link:#_launch_a_new_vpc[Launch a new VPC]. For more
information about VPC and subnet sizing, see the https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html#VPC_Sizing[AWS documentation].
== Security
// Provide post-deployment best practices for using the technology on AWS, including considerations such as migrating data, backups, ensuring high performance, high availability, etc. Link to software documentation for detailed information.
=== Public and Private Subnets
This Quick Start provisions one public and one private subnet in each Availability Zone by
default. You can also choose to add additional private subnets with dedicated network
ACLs.
A public subnet is directly routable to the Internet via a route in the route table that points
to the Internet gateway. This type of subnet allows the use of Elastic IPs and public IPs, and
(if the security group and network ACLs permit) a public subnet is reachable from the
Internet. A public subnet is useful as a DMZ infrastructure for web servers and for Internetfacing Elastic Load Balancing (ELB) load balancers.
Private subnets can indirectly route to the Internet via a NAT gateway.
NAT Gateways reside in a public subnet in order to route directly to the Internet.
Instances in a private subnet are not externally reachable from outside the Amazon VPC,
regardless of whether they have a public or Elastic IP address attached. A private subnet is
useful for application servers and databases.
=== Using Security Groups and Network ACLs
The following table describes the differences between security groups and network ACLs:
|===
|Security group |Network ACL
// Space needed to maintain table headers
|Operates at the instance level (first layer of defense) |Operates at the subnet level (second layer of defense)
|Supports allow rules only |Supports allow rules and deny rules
|Is stateful: Return traffic is automatically allowed, regardless of any rules|Is stateless: Return traffic must be explicitly allowed by rules
|We evaluate all rules before deciding whether to allow traffic|We process rules in numerical order when deciding whether to allow traffic
|Applies to an instance only if someone specifies the security group when launching the instance, or associates the security group with the instance later on| Automatically applies to all instances in the subnets it's associated with (backup layer of defense, so you don't have to rely on someone specifying the security group)
|===
The network ACLs in this Quick Start are configured as follows:
* All public and private subnets are associated with the same default network ACL, which
is automatically created for all VPCs on AWS. This network ACL allows all inbound and
outbound traffic. As you deploy instances and services, you should associate them with
security groups and allow only the traffic and ports needed for your application.
* Each additional private subnet is associated with a custom network ACL (1:1 ratio).
These network ACLs are initially configured to allow all inbound and outbound traffic to
facilitate the deployment of additional instances and services. As with the other subnets,
you should use security groups to secure the environment internally, and you can lock
down the custom network ACLs during or after deployment as required by your
application.
== Other useful information
//Provide any other information of interest to users, especially focusing on areas where AWS or cloud usage differs from on-premises usage.
=== AWS services
* http://aws.amazon.com/documentation/cloudformation/[AWS CloudFormation]
* Amazon EC2
** http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/[User guide for Microsoft Windows]
** https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/[User guide for Linux:]
* http://aws.amazon.com/documentation/vpc/[Amazon VPC]
** https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html[Security groups]
** https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html[Network ACLs]
** http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html[NAT gateways]
* Best practices for implementing VPCs
** http://d0.awsstatic.com/aws-answers/AWS_Single_VPC_Design.pdf[AWS Single VPC Design]
** http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html[Your VPC and Subnets]
** https://medium.com/aws-activate-startup-blog/practical-vpc-design-8412e1a18dcc[Practical VPC Design]
=== Quick Start reference deployments
* https://aws.amazon.com/quickstart/[AWS Quick Start home page]
=== GitHub Repository
You can visit our https://fwd.aws/rdXz7[GitHub repository] to download the templates and scripts for this Quick
Start, to post your comments, and to share your customizations with others.

View File

@@ -0,0 +1,34 @@
Deploying this Quick Start for a new virtual private cloud (VPC) with
*default parameters* builds the following _{partner-product-name}_ environment in the
AWS Cloud.
// Replace this example diagram with your own. Send us your source PowerPoint file. Be sure to follow our guidelines here : http://(we should include these points on our contributors giude)
[#architecture1]
.Quick Start architecture for _{partner-product-name}_ on AWS
[link=images/architecture_diagram.png]
image::../images/architecture_diagram.png[Architecture,width=648,height=439]
NOTE: The IP addresses exclude five addresses from each subnet that are reserved and unavailable for use *
As shown in Figure 1, the Quick Start sets up the following:
The AWS CloudFormation template sets up the virtual network and creates networking
resources.
The template creates a Multi-AZ, multi-subnet VPC infrastructure with managed NAT
gateways in the public subnet for each Availability Zone. You can also create additional
private subnets with dedicated custom network access control lists (ACLs). Default subnet
sizes are based on a typical deployment but can be reconfigured, as discussed in the
link:#_subnet_sizing[Subnet Sizing] section.
The Quick Start also includes VPC endpoints, which provide a secure, reliable connection to
Amazon S3 without requiring an Internet gateway, a NAT gateway, or a virtual private
gateway. With these endpoints, you can access S3 resources from within the VPC created by
the Quick Start. These endpoints are valid only for the AWS Region in which you launch the
Quick Start.
The Quick Start uses the default endpoint policy, which gives any user or service within the
VPC full access to Amazon S3 resources. This policy supplements any IAM user policies or
S3 bucket policies that you may have in place.
The Quick Start also enables Domain Name System (DNS) resolution in the VPC. For more
information about VPC endpoints, see the https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html[AWS documentation].

View File

@@ -0,0 +1,52 @@
// We need to work around Step numbers here if we are going to potentially exclude the AMI subscription
=== Sign in to your AWS account
. Sign in to your AWS account at https://aws.amazon.com with an IAM user role that has the necessary permissions. For details, see link:#_planning_the_deployment[Planning the deployment] earlier in this guide.
. Make sure that your AWS account is configured correctly, as discussed in the link:#_technical_requirements[Technical requirements] section.
// Optional based on Marketplace listing. Not to be edited
ifdef::marketplace_subscription[]
=== Subscribe to the {partner-product-name} AMI
This Quick Start requires a subscription to the AMI for {partner-product-name} in AWS Marketplace.
. Sign in to your AWS account.
. {marketplace_listing_url}[Open the page for the {partner-product-name} AMI in AWS Marketplace], and then choose *Continue to Subscribe*.
. Review the terms and conditions for software usage, and then choose *Accept Terms*. +
A confirmation page loads, and an email confirmation is sent to the account owner. For detailed subscription instructions, see the https://aws.amazon.com/marketplace/help/200799470[AWS Marketplace documentation^].
. When the subscription process is complete, exit out of AWS Marketplace without further action. *Do not* provision the software from AWS Marketplace—the Quick Start deploys the AMI for you.
endif::marketplace_subscription[]
// \Not to be edited
=== Launch the Quick Start
NOTE: You are responsible for the cost of the AWS services used while running this Quick Start reference deployment. There is no additional cost for using this Quick Start. For full details, see the pricing pages for each AWS service used by this Quick Start. Prices are subject to change.
. Sign in to your AWS account, and choose the following option to launch the AWS CloudFormation template.
[cols=2*]
|===
^|https://fwd.aws/mm853[Deploy {partner-product-name} on AWS^]
^|link:=../../templates/aws-vpc.template.yaml[View template^]
|===
Also, make sure that the domain name option in the DHCP options is configured as explained in the http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html[Amazon VPC documentation^]. You provide your VPC settings when you launch the Quick Start.
Each deployment takes about {deployment_time} to complete.
[start=2]
. Check the AWS Region thats displayed in the upper-right corner of the navigation bar, and change it if necessary. This is where the network infrastructure for {partner-product-name} will be built. The template is launched in the {default_deployment_region} Region by default.
// *Note:* This deployment includes Amazon EFS, which isnt currently supported in all AWS Regions. For a current list of supported Regions, see the https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html[endpoints and quotas webpage].
[start=3]
. On the *Create stack* page, keep the default setting for the template URL, and then choose *Next*.
. On the *Specify stack details* page, change the stack name if needed. Review the parameters for the template. Provide values for the parameters that require input. For all other parameters, review the default settings and customize them as necessary. For example, you can change the network configuration parameters if you
want to reconfigure the subnet segmentation used for the VPC, as discussed earlier in
the link:#_subnet_sizing[Subnet Sizing] section.
// In the following tables, parameters are listed by category and described separately for the two deployment options:
// * Parameters for deploying {partner-product-name} into a new VPC
// * Parameters for deploying {partner-product-name} into an existing VPC

View File

@@ -0,0 +1,5 @@
// There are generally two deployment options. If additional are required, add them here
This Quick Start provides one deployment option:
* *Deploy a new VPC (end-to-end deployment)*. This option builds a new AWS environment consisting of the VPC, subnets, NAT gateways, security groups, and other infrastructure components.

View File

@@ -0,0 +1,23 @@
// Add any tips or answers to anticipated questions. This could include the following troubleshooting information. If you dont have any other Q&A to add, change “FAQ” to “Troubleshooting.”
== FAQ
*Q.* I encountered a *CREATE_FAILED* error when I launched the Quick Start.
*A.* If AWS CloudFormation fails to create the stack, we recommend that you relaunch the template with *Rollback on failure* set to *No*. (This setting is under *Advanced* in the AWS CloudFormation console, *Options* page.) With this setting, the stacks state is retained and the instance is left running, so you can troubleshoot the issue. (For Windows, look at the log files in %ProgramFiles%\Amazon\EC2ConfigService and C:\cfn\log.)
// If youre deploying on Linux instances, provide the location for log files on Linux, or omit this sentence.
WARNING: When you set *Rollback on failure* to *Disabled*, you continue to incur AWS charges for this stack. Please make sure to delete the stack when you finish troubleshooting.
For additional information, see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html[Troubleshooting AWS CloudFormation^] on the AWS website.
*Q.* I encountered a size limitation error when I deployed the AWS CloudFormation templates.
*A.* We recommend that you launch the Quick Start templates from the links in this guide or from another S3 bucket. If you deploy the templates from a local copy on your computer or from a location other than an S3 bucket, you might encounter template size limitations. For more information about AWS CloudFormation quotas, see the http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html[AWS documentation^].
== Troubleshooting
The following table lists specific *CREATE_FAILED* error messages you might encounter.
If you encounter a template validation error during deployment, check for a mismatch in the values of the *Availability Zones* and *Number of Availability Zones* parameters. If you select more Availability Zones than you request, the AWS CloudFormation template wont validate. Correct the parameters so that theyre in sync, and redeploy the Quick Start.

View File

@@ -0,0 +1,3 @@
// Include details about the license and how they can sign up. If no license is required, clarify that.
There are no licencing requirements for this Quick Start

View File

@@ -0,0 +1,11 @@
// Replace the content in <>
// Identify your target audience and explain how/why they would use this Quick Start.
//Avoid borrowing text from third-party websites (copying text from AWS service documentation is fine). Also, avoid marketing-speak, focusing instead on the technical aspect.
This Quick Start provides a networking foundation for AWS Cloud infrastructures. It
deploys an Amazon Virtual Private Cloud (Amazon VPC) according to AWS best practices
and guidelines. Amazon VPC is the networking layer for Amazon Elastic Compute Cloud
(Amazon EC2) and provides a private, isolated section of the AWS Cloud where you can
launch AWS services and other resources in a virtual network. For a discussion of best
design practices for Amazon VPC environments, see the documentation and articles listed
in the link:#_other_useful_information[Other useful information] section.

View File

@@ -0,0 +1 @@
// If no preperation is required, remove all content from here

View File

@@ -0,0 +1,17 @@
// Replace the content in <>
// Briefly describe the software. Use consistent and clear branding.
// Include the benefits of using the software on AWS, and provide details on usage scenarios.
The Amazon VPC architecture includes public and private subnets. The first set of private
subnets share the default network access control list (ACL) from the Amazon VPC, and a
second, optional set of private subnets includes dedicated custom network ACLs per subnet.
Optionally you may choose to deploy a completely public VPC (no private subnets), or a completely private VPC (no public subnets).
The Quick Start divides the Amazon VPC address space in a predictable manner across
multiple Availability Zones, and deploys NAT gateways for outbound Internet access.
You can use this Quick Start as a building block for your own deployments. You can scale it
up or down by adding or removing subnets and Availability Zones according to your needs,
and add other infrastructure components and software layers to complete your AWS
environment.

View File

@@ -0,0 +1,29 @@
[cols=3*,options="header"]
|===
|Code
|Name
| Opt-in Status
|us-east-2 |US East (Ohio) |Not required
|us-east-1 |US East (N. Virginia) |Not required
|us-west-1 |US West (N. California) |Not required
|us-west-2 |US West (Oregon) |Not required
|af-south-1 |Africa (Cape Town) |Required
|ap-east-1 |Asia Pacific (Hong Kong) |Required
|ap-south-1 |Asia Pacific (Mumbai) |Not required
|ap-northeast-3 |Asia Pacific (Osaka-Local) |Not required
|ap-northeast-2 |Asia Pacific (Seoul) |Not required
|ap-southeast-1 |Asia Pacific (Singapore) |Not required
|ap-southeast-2 |Asia Pacific (Sydney) |Not required
|ap-northeast-1 |Asia Pacific (Tokyo) |Not required
|ca-central-1 |Canada (Central) |Not required
|eu-central-1 |Europe (Frankfurt) |Not required
|eu-west-1 |Europe (Ireland) |Not required
|eu-west-2 |Europe (London) |Not required
|eu-south-1 |Europe (Milan) |Required
|eu-west-3 |Europe (Paris) |Not required
|eu-north-1 |Europe (Stockholm) |Not required
|me-south-1 |Middle East (Bahrain) |Required
|sa-east-1 |South America (São Paulo) |Not required
|===

View File

@@ -0,0 +1,7 @@
// Replace the <n> in each row to specify the number of resources used in this deployment. Remove the rows for resources that arent used.
|===
|Resource |This deployment uses
// Space needed to maintain table headers
|VPCs |1
|===

View File

@@ -0,0 +1,6 @@
// Replace the content in <>
// Describe or link to specific knowledge requirements; for example: “familiarity with basic concepts in the areas of networking, database operations, and data encryption” or “familiarity with <software>.”
This Quick Start assumes familiarity with VPC architecure and CloudFormation.