anchor.diff:  * Documentation:
       ** http://asciidoctor.org[AsciiDoctor^] markup and transformation is used to create the documentation
   
  -=== Diagram
   
  -image::architecture.png[align="center"]
   
   === Documentation Links
  -////
  -PDF Generation gives an error if you try to use icons
  -////
  +
   ifdef::backend-html5[]
   === icon:file-pdf-o[] pass:[<a href="./raptor-devops.pdf" target="_blank">PDF Version</a>]
   === icon:file-code-o[] https://github.com/ICFI/raptor-devops[Source^]
  
positive.code:     which can be followed from the *PipelineURL* link. Verify the redeployment by checking the timestamp of the api
      application again after the pipeline completes.
  
  ==== Steps to Undeploy
  
  When finished with the solution follow the steps below to remove all resources provisioned.
  
  
negative.code: * *Push a Change* Make a change to any of the project code, commit and then push it back to GitHub and shortly thereafter
      the build and deploy process will automatically restart and if tests pass the application will be redeployed.
  
  == Review Deployment
  
  Once the initial five CloudFormation infrastructure stacks have completed deployment navigate to the Outputs tab of the parent
  stack (raptor-devops) and open the *PipelineURL* link to watch the CI/CD process in action. Code Pipeline performs a
  three-step process to build and deploy the project.
  
  . Code Pipeline checks out the code from the _forked_ GitHub project and sets a hook so when future commits are pushed the pipeline will
      be notified.
  . Code Pipeline next uses a Code Build project build and package the api application artifact
      ** Compiles the code into a war file using a Docker container
      ** Creates a Docker image containing the application for use when deploying to ECS
      ** Pushes the application to ECR, which we're using to host our private container images
  
          pre_build:
            commands:
              - $(aws ecr get-login)
              - TAG="$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | head -c 8)"
          build:
            commands:
              - docker run --rm -v "$(pwd)":/tmp/api -w /tmp/api maven:3.5-jdk-8 mvn -pl app/api verify
              - docker build -t api app/api
              - docker tag api:latest "${REPOSITORY_URI}:${TAG}"
          post_build:
            commands:
              - docker push "${REPOSITORY_URI}:${TAG}"
  
  . The last step is Code Pipeline pulls the newly created application container image from ECR and either deploys
      the CloudFormation service stack that launches the api or if already deployed performs an update to launch
      the version that corresponds with the latest code commit.
  . Once the Code Pipeline has completed the first deployment you'll be able to use the other two links listed in the
      Outputs tab to view the deployed application.
      ** *GreetingUrl:* This link is to the `/greet` endpoint of the api application deployed as a container within ECS.
          The output is in json format as the application function is that as an api providing information to possibly
          many different front-end UIs.
      ** *VersionUrl:* When the application is built timestamp and other information is captured and written into the
          final artifact to allow for version information to be discoverable. Notice that the timestamp shows that
          the application was just built on demand when you launched the stack.
  