├── .gitignore ├── .gitmodules ├── .hugo_build.lock ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── LICENSE-SAMPLECODE ├── LICENSE-SUMMARY ├── README.md ├── archetypes └── default.md ├── config.toml ├── content ├── 1_ModuleOne │ ├── 11_Foreword.md │ ├── 12_TechnicalIssue_Problem.md │ ├── 13_WhoWeAre.md │ ├── 14_WorkshopPrerequisites.md │ ├── 15_NextSteps.md │ └── _index.md ├── 2_ModuleTwo_Setup │ ├── 21_AWSAccountSetup.md │ ├── 21_AWSWorkshopStudio.md │ ├── 22_CreateAWorkspace.md │ ├── 23_CreateAnIAMroleForyourWorkspace.md │ ├── 24_AttachIAMRole.md │ ├── 25_ConfigureWorkshopSpecificRequirements.md │ └── _index.md ├── 3_ModuleThree │ ├── 31_PartnerSetup.md │ └── _index.md ├── 4_ModuleFour │ └── _index.md ├── _index.md └── getting-started │ ├── 01-aws-event │ └── index.en.md │ ├── 02-own-account │ └── index.en.md │ └── index.en.md ├── layouts ├── _default │ └── _markup │ │ └── render-link.html └── partials │ ├── favicon.html │ ├── logo.html │ └── menu-footer.html ├── pipeline └── webhosting │ ├── README.md │ ├── cloudfront-s3-website.yaml │ └── pipeline.yaml ├── review ├── dev-review.md └── partner_workshop_review.md ├── static ├── css │ └── theme-mine.css ├── images │ ├── 3-tier-web-app.png │ ├── console_access.png │ ├── enter-access-code.png │ ├── sign-in.png │ └── workshop-studio-tc.png └── infrastructure │ └── README.md └── webspec.yml /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | *.*~ 3 | project.lock.json 4 | .DS_Store 5 | *.pyc 6 | 7 | # User-specific files 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | build/ 21 | bld/ 22 | [Bb]in/ 23 | [Oo]bj/ 24 | msbuild.log 25 | msbuild.err 26 | msbuild.wrn 27 | 28 | # Visual Studio 29 | .vs/ 30 | .vscode/ 31 | 32 | # JetBrains IDEs 33 | .idea 34 | 35 | # Node Modules 36 | node_modules/ 37 | public/ 38 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "themes/hugo-theme-learn"] 2 | path = themes/hugo-theme-learn 3 | url = https://github.com/Pjv93/hugo-theme-learn.git 4 | -------------------------------------------------------------------------------- /.hugo_build.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-modernization-workshop-base/8966b7f7f558fe472620f692646d32aa737d751e/.hugo_build.lock -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 4 | opensource-codeofconduct@amazon.com with any additional questions or comments. 5 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | Thank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional 4 | documentation, we greatly value feedback and contributions from our community. 5 | 6 | Please read through this document before submitting any issues or pull requests to ensure we have all the necessary 7 | information to effectively respond to your bug report or contribution. 8 | 9 | 10 | ## Reporting Bugs/Feature Requests 11 | 12 | We welcome you to use the GitHub issue tracker to report bugs or suggest features. 13 | 14 | When filing an issue, please check existing open, or recently closed, issues to make sure somebody else hasn't already 15 | reported the issue. Please try to include as much information as you can. Details like these are incredibly useful: 16 | 17 | * A reproducible test case or series of steps 18 | * The version of our code being used 19 | * Any modifications you've made relevant to the bug 20 | * Anything unusual about your environment or deployment 21 | 22 | 23 | ## Contributing via Pull Requests 24 | Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that: 25 | 26 | 1. You are working against the latest source on the *main* branch. 27 | 2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already. 28 | 3. You open an issue to discuss any significant work - we would hate for your time to be wasted. 29 | 30 | To send us a pull request, please: 31 | 32 | 1. Fork the repository. 33 | 2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change. 34 | 3. Ensure local tests pass. 35 | 4. Commit to your fork using clear commit messages. 36 | 5. Send us a pull request, answering any default questions in the pull request interface. 37 | 6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation. 38 | 39 | GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and 40 | [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). 41 | 42 | 43 | ## Finding contributions to work on 44 | Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels (enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any 'help wanted' issues is a great place to start. 45 | 46 | 47 | ## Code of Conduct 48 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 49 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 50 | opensource-codeofconduct@amazon.com with any additional questions or comments. 51 | 52 | 53 | ## Security issue notifications 54 | If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. 55 | 56 | 57 | ## Licensing 58 | 59 | See the [LICENSE](LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. 60 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Attribution-ShareAlike 4.0 International Public License 2 | 3 | By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. 4 | 5 | Section 1 – Definitions. 6 | 7 | a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. 8 | 9 | b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. 10 | 11 | c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. 12 | 13 | d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. 14 | 15 | e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. 16 | 17 | f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. 18 | 19 | g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. 20 | 21 | h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. 22 | 23 | i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. 24 | 25 | j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. 26 | 27 | k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. 28 | 29 | l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. 30 | 31 | m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. 32 | 33 | Section 2 – Scope. 34 | 35 | a. License grant. 36 | 37 | 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: 38 | 39 | A. reproduce and Share the Licensed Material, in whole or in part; and 40 | 41 | B. produce, reproduce, and Share Adapted Material. 42 | 43 | 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 44 | 45 | 3. Term. The term of this Public License is specified in Section 6(a). 46 | 47 | 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. 48 | 49 | 5. Downstream recipients. 50 | 51 | A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. 52 | 53 | B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. 54 | 55 | C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 56 | 57 | 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). 58 | 59 | b. Other rights. 60 | 61 | 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 62 | 63 | 2. Patent and trademark rights are not licensed under this Public License. 64 | 65 | 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. 66 | 67 | Section 3 – License Conditions. 68 | 69 | Your exercise of the Licensed Rights is expressly made subject to the following conditions. 70 | 71 | a. Attribution. 72 | 73 | 1. If You Share the Licensed Material (including in modified form), You must: 74 | 75 | A. retain the following if it is supplied by the Licensor with the Licensed Material: 76 | 77 | i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); 78 | 79 | ii. a copyright notice; 80 | 81 | iii. a notice that refers to this Public License; 82 | 83 | iv. a notice that refers to the disclaimer of warranties; 84 | 85 | v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; 86 | 87 | B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and 88 | 89 | C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 90 | 91 | 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 92 | 93 | 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 94 | 95 | b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. 96 | 97 | 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. 98 | 99 | 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. 100 | 101 | 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. 102 | 103 | Section 4 – Sui Generis Database Rights. 104 | 105 | Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: 106 | 107 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; 108 | 109 | b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and 110 | 111 | c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. 112 | For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. 113 | 114 | Section 5 – Disclaimer of Warranties and Limitation of Liability. 115 | 116 | a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. 117 | 118 | b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. 119 | 120 | c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. 121 | 122 | Section 6 – Term and Termination. 123 | 124 | a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. 125 | 126 | b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 127 | 128 | 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 129 | 130 | 2. upon express reinstatement by the Licensor. 131 | 132 | c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. 133 | 134 | d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. 135 | 136 | e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. 137 | 138 | Section 7 – Other Terms and Conditions. 139 | 140 | a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. 141 | 142 | b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. 143 | 144 | Section 8 – Interpretation. 145 | 146 | a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. 147 | 148 | b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. 149 | 150 | c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. 151 | 152 | d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. 153 | -------------------------------------------------------------------------------- /LICENSE-SAMPLECODE: -------------------------------------------------------------------------------- 1 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | Copyright 2025 [partner's details if applicable]. All Rights Reserved. 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this 5 | software and associated documentation files (the "Software"), to deal in the Software 6 | without restriction, including without limitation the rights to use, copy, modify, 7 | merge, publish, distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so. 9 | 10 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 11 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 12 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 13 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 14 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 15 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 16 | -------------------------------------------------------------------------------- /LICENSE-SUMMARY: -------------------------------------------------------------------------------- 1 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | 3 | Copyright 2025 [partner's details if applicable]. All Rights Reserved. 4 | 5 | The documentation is made available under the Creative Commons Attribution-ShareAlike 4.0 International License. See the LICENSE file. 6 | 7 | The sample code within this documentation is made available under the MIT-0 license. See the LICENSE-SAMPLECODE file. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AWSWorkshop.io Base Workshop 2 | 3 | This is a base workshop. Clone and start from this repo to create your workshop. 4 | 5 | ## Versions 6 | * 2.0 7 | * Initial Release: 8 | Overhauled to add prescriptive guidance. Improved readability and ease of use by making the base more templatized. 9 | 10 | ## Description 11 | 12 | This is the base repo for building workshops with AWS. It utilizes the Hugo framework, which involves simple markdown and HTML elements. 13 | 14 | In this workshop, you are going to learn how to plan, build, and launch an AWS workshop. 15 | 16 | ## What is a workshop? 17 | 18 | An AWS workshop is a tool used to educate users and end customers on how to leverage partner solutions on their AWS workload. What better way to learn than to let customers get hands-on with building or instrumenting products or services in an actual AWS environment? 19 | 20 | A workshop format is used because it scales well, meaning you can deliver the content and message whenever and wherever the customer happens to be. Whether the customer is at work, home, or at an AWS event, they can get hands-on and learn about building products and solutions. 21 | 22 | ## High-Level Planning 23 | 24 | While creating your workshop, you will want to think about what you want to accomplish and how you want to educate users about your product. Depending on your needs, you will either build a new workshop or use an existing one and modify it as you see fit. 25 | 26 | You will want to create a high-level plan for your workshop and determine the problem you are looking to solve. Identifying key concepts that you want the customers to learn about is also ideal. Then, outlining what components and AWS services you are going to utilize is a key step. 27 | 28 | This will play a big role in creating the workflow that your customers will be following along with during the workshop. The workflow should be presented as a story and have an introduction, an educational body, and a conclusion that ties all the pieces together. A cleanup section will follow suit so that the customers can ensure their environments will not be charged after they finish the workshop. 29 | 30 | Determining what kind of event this workshop will be presented at is also important as it will help you have a way to capture leads, which should be the end goal in mind. (More details are covered in the workshop itself.) 31 | 32 | ## Types of Events 33 | 34 | Identifying whether your workshop will be a self-paced workshop or an AWS-hosted event will be crucial in your planning as well. If it’s a self-paced workshop, then having highly contextualized sections will be very important as there won’t be anyone there to answer questions. 35 | 36 | Making sure that the workshop itself has all relevant information or that clear references have been outlined for any documentation that will be needed to successfully complete the workshop is crucial to the workshop's overall success. 37 | 38 | ## Build 39 | 40 | In this section, you will be setting up your workflow, editing and building, testing your environments, and publishing the workshop if everything is prescriptive enough. Follow along to learn how to complete all of these tasks. 41 | 42 | ## Viewing the Workshop Locally 43 | 44 | To view and test your workshop locally before publishing, you'll need to set up your development environment. This allows you to preview changes in real time and ensure everything works as expected. 45 | 46 | ### Development Setup Guide 47 | 48 | Follow these steps to set up your local development environment: 49 | 50 | 1. **Clone the Repository** 51 | 52 | ```bash 53 | git clone https://github.com/aws-samples/[repository-name].git 54 | cd [repository-name] 55 | ``` 56 | 57 | 2. **Initialize and Update Git Submodules** 58 | The workshop uses Hugo themes as submodules. Initialize and update them with: 59 | 60 | ```bash 61 | git submodule init 62 | git submodule update 63 | ``` 64 | 65 | If you encounter issues where themes or submodules are not loading correctly, try running the following command to ensure everything is fully updated: 66 | 67 | ```bash 68 | git submodule update --recursive --remote 69 | ``` 70 | 71 | This command ensures all nested submodules are updated to their latest versions. 72 | 73 | If you accidentally cloned the repository without initializing submodules, you can run the following to initialize and update them in one step: 74 | 75 | ```bash 76 | git submodule update --init --recursive 77 | ``` 78 | 79 | ### Troubleshooting Submodules 80 | 81 | If submodules fail to initialize or update, try these steps: 82 | 83 | 1. **Verify submodule configuration** 84 | Run the following command to list all submodules and check if they are correctly set up: 85 | 86 | ```bash 87 | git config --file .gitmodules --list 88 | ``` 89 | 90 | 2. **Remove and re-add submodules** 91 | If submodules are still not working, remove and re-add them: 92 | 93 | ```bash 94 | git submodule deinit -f . 95 | rm -rf .git/modules/ 96 | git submodule update --init --recursive 97 | ``` 98 | 99 | 3. **Check for missing submodules in `.gitmodules`** 100 | If errors persist, open the `.gitmodules` file and verify that the submodules are correctly referenced. 101 | 102 | 4. **Ensure correct repository permissions** 103 | If your submodules are private, make sure you have the correct SSH or HTTPS access to pull them. 104 | 105 | By following these steps, you can resolve most common submodule issues and ensure that your workshop is correctly set up for local development. 106 | 107 | ### Start the Local Hugo Server 108 | Launch a local development server to preview your workshop: 109 | 110 | ```bash 111 | hugo server -D 112 | ``` 113 | 114 | This will start a local server at `http://localhost:1313/`, where you can view your workshop in real time. The `-D` flag ensures draft content is also displayed. 115 | 116 | ### Working with Workshop Content 117 | 118 | When making changes to your workshop content, the local server will automatically refresh to show your updates. This allows you to: 119 | 120 | - See how your markdown renders in the browser 121 | - Test navigation between pages 122 | - Verify that images and links work correctly 123 | - Check responsive design on different screen sizes 124 | 125 | If you encounter issues with the local preview: 126 | - Ensure all submodules are properly initialized 127 | - Try restarting the Hugo server 128 | - Clear your browser cache if changes aren't appearing 129 | 130 | Remember that any changes made locally will need to be committed and pushed to the repository to be reflected in the published version of your workshop. 131 | 132 | ## Launch 133 | 134 | With your workshop now being published, you can now identify some key go-to-market activities. 135 | 136 | ## FAQ 137 | 138 | Commonly asked questions along with tools, tips, and samples that might be relevant to your workshop. Modify this FAQ section as you best see fit for your specific workshop and your customer base. 139 | 140 | ## Authors 141 | 142 | Contributors' names and contact info: 143 | 144 | * Patrick Vassell (@Vassell, Patrick) 145 | * James Bland (@jamesbland123) 146 | * Eugene Mu (@eugenemu) 147 | 148 | ## License 149 | 150 | This project is licensed. See the LICENSE.md file for details. 151 | 152 | ## Acknowledgments 153 | 154 | * [Markdown Cheat Sheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) 155 | * [Learn Theme Markdown](https://learn.netlify.app/en/cont/markdown/) 156 | * [Menu Extras and Shortcuts](https://learn.netlify.app/en/cont/menushortcuts/) 157 | * [Using Font Awesome Emoji's to Help Your Page Pop](https://learn.netlify.app/en/cont/icons/) 158 | -------------------------------------------------------------------------------- /archetypes/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{ replace .Name "-" " " | title }}" 3 | date: {{ .Date }} 4 | --- 5 | 6 | -------------------------------------------------------------------------------- /config.toml: -------------------------------------------------------------------------------- 1 | baseURL = "/" 2 | languageCode = "en-US" 3 | defaultContentLanguage = "en" 4 | title = "AWS Modernization Workshop Sample" 5 | theme = "hugo-theme-learn" 6 | metaDataFormat = "yaml" 7 | defaultContentLanguageInSubdir= "false" 8 | uglyurls = "true" 9 | enableEmoji = true 10 | 11 | [params] 12 | # Prefix URL to edit current page. Will display an "Edit this page" button on top right hand corner of every page. 13 | # Useful to give opportunity to people to create merge request for your doc. 14 | # See the config.toml file from this documentation site to have an example. 15 | #editURL = "" 16 | # Author of the site, will be used in meta information 17 | author = "Patrick Vassell" 18 | # Description of the site, will be used in meta information 19 | description = "AWS Modernization Workshop" 20 | # Shows a checkmark for visited pages on the menu 21 | showVisitedLinks = true 22 | # Disable search function. It will hide search bar 23 | disableSearch = false 24 | # Javascript and CSS cache are automatically busted when new version of site is generated. 25 | # Set this to true to disable this behavior (some proxies don't handle well this optimization) 26 | disableAssetsBusting = false 27 | # Set this to true to disable copy-to-clipboard button for inline code. 28 | disableInlineCopyToClipBoard = false 29 | # A title for shortcuts in menu is set by default. Set this to true to disable it. 30 | disableShortcutsTitle = false 31 | # When using mulitlingual website, disable the switch language button. 32 | disableLanguageSwitchingButton = true 33 | # Hide breadcrumbs in the header and only show the current page title 34 | disableBreadcrumb = false 35 | # Hide Next and Previous page buttons normally displayed full height beside content 36 | disableNextPrev = false 37 | # Order sections in menu by "weight" or "title". Default to "weight" 38 | ordersectionsby = "weight" 39 | # Change default color scheme with a variant one. Can be "red", "blue", "green". 40 | themeVariant = "mine" 41 | # Add this line to ignore HTML warnings 42 | ignoreLogs = ['warning-goldmark-raw-html'] 43 | 44 | [outputs] 45 | home = [ "HTML", "RSS", "JSON"] 46 | 47 | [markup] 48 | defaultMarkdownHandler = "goldmark" 49 | [markup.goldmark] 50 | [markup.goldmark.renderer] 51 | unsafe = true 52 | 53 | [Languages] 54 | [Languages.en] 55 | title = "English" 56 | weight = 1 57 | languageName = "English" 58 | 59 | 60 | [[menu.shortcuts]] 61 | name = " Modernization Workshops" 62 | url = "https://awsworkshop.io" 63 | weight = 10 64 | 65 | [[menu.shortcuts]] 66 | name = " AWS Builders Library" 67 | url = "https://aws.amazon.com/builders-library/" 68 | weight = 11 69 | 70 | [[menu.shortcuts]] 71 | name = " Modernization with AWS" 72 | url = "https://aws.amazon.com/blogs/modernizing-with-aws/" 73 | weight = 20 74 | 75 | [[menu.shortcuts]] 76 | name = " EKS Workshop" 77 | url = "https://eksworkshop.com/" 78 | weight = 21 79 | 80 | [[menu.shortcuts]] 81 | name = " ECS Workshop" 82 | url = "https://ecsworkshop.com/" 83 | weight = 22 84 | 85 | [[menu.shortcuts]] 86 | name = " App Mesh Workshop" 87 | url = "https://www.appmeshworkshop.com/" 88 | weight = 23 -------------------------------------------------------------------------------- /content/1_ModuleOne/11_Foreword.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Foreword" # MODIFY THIS TITLE IF APPLICABLE 3 | chapter: true 4 | weight: 1 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES IF APPLICABLE 5 | --- 6 | 7 | # Foreword 8 | 9 | ## Submodule One Heading 10 | 11 | This paragraph block should be an explanation of an existing problem and how the partner has worked to achieve a solution for it. Example content guidance can be found at the bottom of this page. 12 | 13 | {{% notice info %}} 14 |

15 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 16 |

17 | {{% /notice %}} 18 | 19 | ### Next Section Heading 20 | This paragraph block can optionally be utilized to lead into the next section of the workshop. 21 | 22 | #### Example Content Guidance 23 | 24 | # The nature of software development has fundamentally changed 25 | 26 | Teams and organizations are releasing code at a record breaking pace and only getting faster. This is primarily attributed to these teams adopting and implementing modern concepts and practices, such as Continuous Delivery, Continuous Integration/Deployments (CI/CD) and DevOps into their software development processes. These modern concepts enable teams to better align development and delivery efforts resulting in teams collaborating around code and an increased awareness among collaborators no matter their role. -------------------------------------------------------------------------------- /content/1_ModuleOne/12_TechnicalIssue_Problem.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Technical Issue / Problem" # MODIFY THIS TITLE 3 | chapter: true 4 | weight: 2 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES IF APPLICABLE 5 | --- 6 | 7 | # Technical Issue / Problem 8 | 9 | ## Submodule Two Heading 10 | This paragraph block should be an introduction to the technical issue the solution is facing. An example of this can be seen at the bottom of this page.
11 | 12 | {{% notice info %}} 13 |

14 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 15 |

16 | {{% /notice %}} 17 | 18 | ### Next Section Heading 19 | This paragraph block can optionally be utilized to lead into the next section of the workshop. 20 | 21 | 22 | #### Example of content guidance 23 | 24 | # Deploy Without Worry 25 | 26 | ## Deployments with Kubernetes? 27 | 28 | Kubernetes (k8s) is a container orchestration platform allowing organizations to scale their services and workloads quickly. If you are working with containers or microservices, k8s may be a great use case for you. Kubenetes deployments are container image deployments which target k8s-based environments. 29 | 30 | Amazon has released a managed k8s service called Elastic Kubernetes Service (EKS). Amazon EKS helps you provide highly-available and secure clusters and automates key tasks such as patching, node provisioning, and updates. While AWS provides the platform on which to run your containerize applications deploying them in a scalable, repeatable and reliable way is where Harness comes in. 31 | 32 | 33 | ## How does Harness help with EKS deployments? 34 | 35 | Harness has first-class support for Kubernetes Resources. Harness can create scaffolding around Kubernetes Resources removing complexities around crafting your own resource definitions that are purpose made for deployments. Harness can offer granular deployment lifecycle support around different Kubernetes Resources supporting canary and blue/green deployments inside Kubernetes. 36 | 37 | ## Why is Canary deployment tricky with EKS deployments? 38 | 39 | Canary Deployments are a progressive delivery pattern for rolling out releases to a subset of users. Canary Deployments can be complex because of the multiple phases and the judgment call of when to promote or rollback a canary. The Harness Platform has smart verification taking away the manual toil in verification and enables seamless Canary Deployments. -------------------------------------------------------------------------------- /content/1_ModuleOne/13_WhoWeAre.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Who We Are" # MODIFY THIS TITLE 3 | chapter: true 4 | weight: 3 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES IF APPLICABLE 5 | --- 6 | 7 | # Who Are We? 8 | 9 | ## Submodule Three Heading 10 | This paragraph block should be a brief introduction to the partner, their history, goals, partnerships, and accolades.
11 | 12 | {{% notice info %}} 13 |

14 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 15 |

16 | {{% /notice %}} 17 | 18 | ### Next Section Heading 19 | This paragraph block can optionally be utilized to lead into the next section of the workshop. -------------------------------------------------------------------------------- /content/1_ModuleOne/14_WorkshopPrerequisites.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Workshop Prerequisites" # MODIFY THIS TITLE IF APPLICABLE 3 | chapter: true 4 | weight: 4 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES IF APPLICABLE 5 | --- 6 | 7 | # Workshop Prerequisites 8 | 9 | ## Submodule Four Heading 10 | 11 | This paragraph block should be an introduction to the submodule. Are there any prerequisites the user must perform to begin the workshop? Do they need to sign up for any external accounts or install any tools? An example of content guidance can be found at the bottom of this page. 12 | 13 | {{% notice info %}} 14 |

15 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 16 |

17 | {{% /notice %}} 18 | 19 | ### Next Section Heading 20 | This paragraph block can optionally be utilized to lead into the next section of the workshop. 21 | 22 | 23 | #### Example of content guidance 24 | 25 | # Workshop Prerequisites 26 | 27 | There are some prerequisites required for completing this workshop. 28 |
    29 |
  1. Create a GitHub account
  2. 30 |
  3. Create a Docker Hub account
  4. 31 |
  5. Create an AWS account
  6. 32 |
33 | 34 | {{% notice %}} 35 | Some of these may be skipped if you already have the required accounts and tools. 36 | {{% /notice %}} -------------------------------------------------------------------------------- /content/1_ModuleOne/15_NextSteps.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Workshop Next Steps" # MODIFY THIS TITLE TO REFLECT NEXT STEPS IF APPLICABLE 3 | chapter: true 4 | weight: 5 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES IF APPLICABLE 5 | --- 6 | 7 | # Workshop Next Steps 8 | 9 | ## Submodule Five Heading 10 | 11 | This paragraph block should be an brief explanation of the next steps to take after the prerequisites have been set up. Diagrams or code samples can be shown to give a visual explanation of what will be taking place during the building of the solution. An example of content guidance can be found at the bottom of this page. 12 | 13 | {{% notice info %}} 14 |

15 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 16 |

17 | {{% /notice %}} 18 | 19 | ### Next Section Heading 20 | This paragraph block can optionally be utilized to lead into the next section of the workshop. 21 | 22 | #### Example of content guidance 23 | 24 | # Configuring Your Solution 25 | 26 | While working through the workshop modules, you will progressively build a 3-tier web application by utilizing core AWS services. We will provide you with any code examples and any directions specific to the set up approach we will be utilizing.
27 | 28 | ![Architecture Diagram](/images/3-tier-web-app.png) 29 | 30 | {{% notice %}} 31 | Some of these may be skipped if you already have the required accounts and tools. 32 | {{% /notice %}} -------------------------------------------------------------------------------- /content/1_ModuleOne/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Introduction" 3 | chapter: true 4 | weight: 1 5 | --- 6 | 7 | # Introduction 8 | 9 | ## Learning Objectives 10 | 11 | This paragraph block should highlight the learning objectives of the workshop. A bulleted list works well for this purpose. 12 | 13 | ## Workshop Structure 14 | This paragraph block should be utilized to briefly explain the submodules that are going to be presented as well as the approximate total time for the workshop and individual submodules.
15 | 16 | For example: 17 | 24 | 25 | {{% notice info %}} 26 |

27 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 28 |

29 | {{% /notice %}} 30 | 31 | **REMOVE:** Every introduction page should include the following warning label. 32 | 33 | {{% notice warning %}} 34 | The examples and sample code provided in this workshop are intended to be consumed as instructional content. These will help you understand how various AWS services can be architected to build a solution while demonstrating best practices along the way. These examples are not intended for use in production environments. 35 | {{% /notice %}} 36 | 37 | ### Next Section Heading 38 | This paragraph block can optionally be utilized to lead into the next section of the workshop. -------------------------------------------------------------------------------- /content/2_ModuleTwo_Setup/21_AWSAccountSetup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Self-Guided Setup Instructions" # MODIFY THIS TITLE 3 | chapter: true 4 | weight: 1 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES 5 | --- 6 | 7 | 8 | 9 | 10 | # AWS Account Setup 11 | 12 | ## Submodule One Heading 13 | 14 | This paragraph block can be used to explain how to setup an AWS account. Example content guidance can be found at the bottom of the page. 15 | 16 | {{% notice info %}} 17 |

18 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 19 |

20 | {{% /notice %}} 21 | 22 | ### Next Section Heading 23 | This paragraph block can optionally be utilized to lead into the next section of the workshop. 24 | 25 | #### Example Content Guidance 26 | # Setting up your AWS account 27 | 28 | If you don’t already have an AWS account with Administrator access: create one now by clicking here. 29 | 30 | Once you have an AWS account, ensure you are following the remaining workshop steps as an IAM user with administrator access to the AWS account: Create a new IAM user to use for the workshop 31 | 32 | Enter the user details: create user 33 | 34 | Attach the AdministratorAccess IAM Policy: attach policy 35 | 36 | Click to create the new user: finish creation 37 | 38 | Take note of the login URL and save: login url 39 | -------------------------------------------------------------------------------- /content/2_ModuleTwo_Setup/21_AWSWorkshopStudio.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: At an AWS Guided Event 3 | weight: 02 4 | --- 5 | 6 | {{% notice info %}} 7 |

8 | This section only applies if you are participating in an AWS guided event. 9 |

10 | {{% /notice %}} 11 | 12 | ## AWS Workshop Studio 13 | 14 | AWS Workshop Studio allows AWS field teams to run Workshops, GameDays, Bootcamps, Immersion Days, and other events that require hands-on access to AWS accounts. 15 | 16 | Follow the steps below to gain access to your Workshop Studio AWS account: 17 | 18 | 1. Open AWS Workshop Studio at https://catalog.us-east-1.prod.workshops.aws/join/. 19 | 20 | 2. Choose your preferred sign-in method. For AWS guided events, choose **Email OTP**. 21 | 22 | ![Studio Signin](/static/images/sign-in.png) 23 | 24 | 3. Enter the code provided by the event organizer into the text box. You will usually find this code on a slide that is being shown, or a paper printout at your table. 25 | 26 | ![Enter Code](/static/images/enter-access-code.png) 27 | 28 | 4. Read and agree to the *Terms and Conditions* by selecting **I agree with the terms and conditions** and choose **Join Event**. 29 | 30 | ![Terms and Conditions](/static/images/workshop-studio-tc.png) 31 | 32 | You will be taken to the workshop instructions. You can access the console of your AWS account for the event by clicking the link in the sidebar. 33 | 34 | ![Console access](/static/images/console_access.png) 35 | 36 | 37 | ## Proceed to the workshop 38 | 39 | You are now ready for the workshop. -------------------------------------------------------------------------------- /content/2_ModuleTwo_Setup/22_CreateAWorkspace.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Create a Workspace" # MODIFY THIS TITLE 3 | chapter: true 4 | weight: 2 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES 5 | --- 6 | 7 | 8 | 9 | 10 | 11 | # Set Up The Workspace 12 | 13 | ## Submodule Two Heading 14 | 15 | This paragraph block can be used to explain how to create a workspace if necessary. Example content guidance can be found at the bottom of the page. 16 | 17 | {{% notice info %}} 18 |

19 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 20 |

21 | {{% /notice %}} 22 | 23 | ### Next Section Heading 24 | This paragraph block can optionally be utilized to lead into the next section of the workshop. 25 | 26 | #### Example Content Guidance 27 | 28 | # Set Up Your Workspace 29 | AWS Cloud9 is a cloud-based integrated development environment (IDE) that lets you write, run, and debug your code with just a browser. It includes a code editor, debugger, and terminal. Cloud9 comes prepackaged with essential tools for popular programming languages, including JavaScript, Python, PHP, and more, so you don’t need to install files or configure your laptop for this workshop. 30 | 31 | We will use Amazon Cloud9 to access our AWS accounts via the AWS CLI in this Workshop. There are a few steps to complete to set this up 32 | 33 | Create a new Cloud9 IDE environment 34 | Create an IAM role for your workspace 35 | Attach the IAM role to your workspace 36 | Configure workshop specific requirements 37 | 38 | 39 | ### Create a new Cloud9 IDE environment 40 | 41 | Within the AWS console, use the region drop list to select us-east-1 (N. Virginia). This will ensure the workshop script provisions the resources in this same region.. 42 | 43 | Navigate to the Cloud9 console or just search for it under the AWS console services menu. 44 | 45 | Click the Create environment button 46 | 47 | For the name use circleci-workshop, then click Next step 48 | 49 | Select the default instance type t2.micro 50 | 51 | Leave all the other settings as default and click Next step followed by Create environment 52 | 53 | Info: This will take about 1-2 minutes to provision 54 | 55 | 56 | ### Configure Cloud9 IDE environment 57 | 58 | When the environment comes up, customize the environment by: 59 | 60 | Close the welcome page tab 61 | 62 | Close the lower work area tab 63 | 64 | Open a new terminal tab in the main work area. 65 | 66 | Tip: If you don’t like this dark theme, you can change it from the View / Themes Cloud9 workspace menu. 67 | 68 | Tip: Cloud9 requires third-party-cookies. You can whitelist the specific domains. You are having issues with this, Ad blockers, javascript disabler, and tracking blockers should be disabled for the cloud9 domain, or connecting to the workspace might be impacted. 69 | -------------------------------------------------------------------------------- /content/2_ModuleTwo_Setup/23_CreateAnIAMroleForyourWorkspace.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Create an IAM Role for your workspace" # MODIFY THIS TITLE 3 | chapter: true 4 | weight: 3 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES 5 | --- 6 | 7 | 8 | 9 | 10 | # Create an IAM Role for your workspace 11 | 12 | ## Submodule Three Heading 13 | 14 | This paragraph block can be used to explain how to create a workspace if necessary. Example content guidance can be found at the bottom of the page. 15 | 16 | {{% notice info %}} 17 |

18 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 19 |

20 | {{% /notice %}} 21 | 22 | ### Next Section Heading 23 | This paragraph block can optionally be utilized to lead into the next section of the workshop. 24 | 25 | #### Example Content Guidance 26 | 27 | ### Create an IAM Role for your workspace 28 | 29 | Info: Starting from here, when you see command to be entered such as below, you will enter these commands into Cloud9 IDE. You can use the Copy to clipboard feature (right hand upper corner) to simply copy and paste into Cloud9. In order to paste, you can use Ctrl + V for Windows or Command + V for Mac. 30 | 31 | Follow this deep link to create an IAM role with Administrator access. 32 | Confirm that AWS service and EC2 are selected, then click Next to view permissions. 33 | Confirm that AdministratorAccess is checked, then click Next to review. 34 | Enter CircleCI-Workshop-Admin for the Name, and select Create Role createrole 35 | -------------------------------------------------------------------------------- /content/2_ModuleTwo_Setup/24_AttachIAMRole.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Attach IAM Role" # MODIFY THIS TITLE 3 | chapter: true 4 | weight: 4 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES 5 | --- 6 | 7 | 8 | 9 | 10 | # Attaching an IAM Role 11 | 12 | ## Submodule Four Heading 13 | 14 | This paragraph block can be used to explain how to attach an IAM role if necessary. Example content guidance can be found at the bottom of the page. 15 | 16 | {{% notice info %}} 17 |

18 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 19 |

20 | {{% /notice %}} 21 | 22 | ### Next Section Heading 23 | This paragraph block can optionally be utilized to lead into the next section of the workshop. 24 | 25 | #### Example Content Guidance 26 | ### Attach the IAM role to your instance 27 | Will need 28 | 29 | Follow this deep link to find your Cloud9 EC2 instance 30 | (https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#Instances:search=aws-cloud9-circleci-workshop;sort=desc:launchTime) 31 | 32 | Select the instance, then choose Actions / Security / Modify IAM role Attach IAM role 33 | 34 | Choose the role that we created in the previous step: CircleCI-Workshop-Admin. Find IAM role 35 | 36 | Click Save 37 | -------------------------------------------------------------------------------- /content/2_ModuleTwo_Setup/25_ConfigureWorkshopSpecificRequirements.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Configure workshop specific requirements" # MODIFY THIS TITLE 3 | chapter: true 4 | weight: 5 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES 5 | --- 6 | 7 | 8 | 9 | 10 | # Configuring Workshop Specific Requirements 11 | 12 | ## Submodule Five Heading 13 | 14 | This paragraph block can be used to explain how to configure any specific workshop requirements if necessary. Example content guidance can be found at the bottom of the page. 15 | 16 | {{% notice info %}} 17 |

18 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 19 |

20 | {{% /notice %}} 21 | 22 | ### Next Section Heading 23 | This paragraph block can optionally be utilized to lead into the next section of the workshop. 24 | 25 | 26 | #### Example Content Guidance 27 | # Configure Workspace 28 | 29 | Return to your workspace and click the gear icon (in top right corner), or click to open a new tab and choose “Open Preferences” 30 | 31 | Select AWS SETTINGS and turn off AWS managed temporary credentials 32 | 33 | Close the Preferences tab 34 | 35 | Turn off temp credentials 36 | 37 | Copy and run (paste with Ctrl+P or CMD+P) the commands below. 38 | 39 | Before running it, review what it does by reading through the comments. 40 | 41 | # Update awscli 42 | sudo pip install --upgrade awscli && hash -r 43 | 44 | # Install jq command-line tool for parsing JSON, and bash-completion 45 | sudo yum -y install jq gettext bash-completion moreutils 46 | 47 | # Install yq for yaml processing 48 | echo 'yq() { 49 | docker run --rm -i -v "${PWD}":/workdir mikefarah/yq yq "$@" 50 | }' | tee -a ~/.bashrc && source ~/.bashrc 51 | 52 | # Verify the binaries are in the path and executable 53 | for command in jq aws 54 | do 55 | which $command &>/dev/null && echo "$command in path" || echo "$command NOT FOUND" 56 | done 57 | 58 | # Remove existing credentials file. 59 | rm -vf ${HOME}/.aws/credentials 60 | 61 | # Set the ACCOUNT_ID and the region to work with our desired region 62 | export AWS_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region') 63 | test -n "$AWS_REGION" && echo AWS_REGION is "$AWS_REGION" || echo AWS_REGION is not set 64 | 65 | # Validate that our IAM role is valid. 66 | aws sts get-caller-identity --query Arn | grep CircleCI-Workshop-Admin -q && echo "IAM role valid" || echo "IAM role NOT valid" 67 | 68 | ## Warning If the IAM role is not valid, DO NOT PROCEED. Go back and confirm the steps on this page. 69 | -------------------------------------------------------------------------------- /content/2_ModuleTwo_Setup/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Self-Guided Workshop Setup" # MODIFY THIS TITLE IF APPLICABLE 3 | chapter: true 4 | weight: 2 5 | --- 6 | 7 | # Self-Guided Workshop Setup 8 | 9 | ## Module Two Heading 10 | 11 | This paragraph block should be an introduction to the module about the self-guided method of setting up the workshop. Some typical examples of the steps in this process this will involve setting up an AWS account, signing up for the partner platform, requesting marketplace credits, and provisioning both IAM roles and necessary AWS services. As with everything else, submodules can be added by copying and pasting files. An example of content guidance can be found at the bottom of the page. Extra module files can be added as necessary. 12 | 13 | {{% notice info %}} 14 |

15 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 16 |

17 | {{% /notice %}} 18 | 19 | **REMOVE:** Every introduction page should include the following warning label. 20 | 21 | {{% notice warning %}} 22 | The examples and sample code provided in this workshop are intended to be consumed as instructional content. These will help you understand how various AWS services can be architected to build a solution while demonstrating best practices along the way. These examples are not intended for use in production environments. 23 | {{% /notice %}} 24 | 25 | ### Next Section Heading 26 | This paragraph block can optionally be utilized to lead into the next section of the workshop. 27 | 28 | 29 | #### Example of content guidance 30 | 31 | # Self-Guided Workshop 32 | 33 | 34 | Welcome to the Self Guided Setup section! This workshop requires an AWS account where there is IAM user/identity that has proper permissions to set up the necessary AWS components to work through the workshop. Worried about costs associated with this workshop? Don’t worry, go to the next page and request some AWS credits to pay for any costs that may be incurred through this workshop! 35 | 36 | Here is a preview of what we will be setting up: 37 | 38 |
    39 |
  1. Creating an AWS account with proper permissions
  2. 40 |
  3. Create a workspace
  4. 41 |
  5. Creating an IAM role for your workspace
  6. 42 |
  7. Attaching an IAM Role
  8. 43 |
  9. Configure Workshop Specific Requirements
  10. 44 |
45 | -------------------------------------------------------------------------------- /content/3_ModuleThree/31_PartnerSetup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Partner Setup Instructions" # MODIFY THIS TITLE 3 | chapter: true 4 | weight: 1 # MODIFY THIS VALUE TO REFLECT THE ORDERING OF THE MODULES 5 | --- 6 | 7 | # Partner Setup Instructions 8 | 9 | ## Submodule One Heading 10 | 11 | This paragraph block should be an introduction to the submodule. 12 | 13 | ### Submodule One Subheading 14 | This paragraph block should be utilized to start the submodule.
15 | 16 | {{% notice info %}} 17 |

18 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 19 |

20 | {{% /notice %}} 21 | 22 | ### Next Section OR Conclusion Heading 23 | This paragraph block can be utilized to lead into the next section of the workshop (which might be a conclusion) or be a conclusion itself. 24 | 25 | #### Example Guidance Content Below 26 | 27 | 28 | # Do you require attendees to sign up for things? 29 | 30 | 31 | ### Introduction 32 | In this section, we are going to discuss tasks and concepts like retrieving access tokens and other configurations within some integration services. 33 | 34 | 35 | ### Docker Hub 36 | 37 | Docker Hub is a service provided by Docker for finding and sharing container images with your team. It is the world’s largest repository of container images with an array of content sources including container community developers, open source projects and independent software vendors (ISV) building and distributing their code in containers. 38 | 39 | 40 | ### Create a Docker Hub Access Token 41 | 42 | The pipeline will package the application into a Docker image. It then pushes that image a public Docker Hub image repository so that it will be available to the deployment segment of the pipeline. To push or upload the newly-built Docker image, the pipeline will need an access token to authorize transaction on your Docker Hub account. You will need to create a new access token (https://docs.docker.com/docker-hub/access-tokens/) and store it for use in later modules. To create your new access tokens: 43 | 44 | Log in to hub.docker.com 45 | Click your username in the top right corner and select Account Settings 46 | Select Security > New Access Token. 47 | Add a description for your token that indicates where the token will be used, or that sets a purpose for the token 48 | Copy the token that appears on the screen and record it in a safe location for use in future modules. Make sure you do this now! Once you close this prompt, Docker will never show the token again and you will have to create a new one 49 | 50 | Warning: Docker Hub credentials and access tokens must be protected and not shared with unauthorized parties to prevent exposure and unauthorized access. 51 | 52 | Now that you have created and safely recorded your new access token, let’s move to the next section and create a new Snyk Access token. 53 | 54 | ### Snyk 55 | Snyk is an open source security platform designed to help software-driven businesses enhance developer security. Snyk’s dependency scanner makes it the only solution that seamlessly and proactively finds, prioritizes, and fixes vulnerabilities and license violations in open source dependencies and container images. 56 | 57 | ### Create Snyk Access Token 58 | 59 | Visit your Snyk account (Account Settings > API Token section) (https://app.snyk.io/account) 60 | In the KEY field, select click to show, then select and copy your API token from the field 61 | Paste the token that appears on the screen in a safe location for use in future modules 62 | 63 | Warning: Your Snyk access token must be protected and not shared with unauthorized parties to prevent exposure and unauthorized access. 64 | 65 | You can read more about Snyk Access Token from their docs here. 66 | 67 | Great, you have created and safely stored your newly created Snyk access token, Now, let’s create the Terraform Cloud access token. 68 | 69 | 70 | ### Terraform Cloud 71 | 72 | Terraform Cloud is an application that helps teams use Terraform together. It manages Terraform runs in a consistent and reliable environment, and includes easy access to shared state and secret data, access controls for approving changes to infrastructure, a private registry for sharing Terraform modules, detailed policy controls for governing the contents of Terraform configurations, and more. 73 | 74 | You will be using Terraform Cloud to store the Terraform state of the infrastructures your pipeline will provision and deploy using Terraform in future modules. 75 | 76 | ### Create Terraform Cloud Access Token 77 | 78 | Create a `[Terraform Cloud ](https://app.terraform.io/signup/account)` account 79 | Create a new '[Terraform Cloud organization ] (https://learn.hashicorp.com/terraform/cloud-getting-started/signup#create-your-organization)' 80 | Create a new '[Terraform Cloud workspace ] (https://learn.hashicorp.com/terraform/cloud-getting-started/create-workspace)' named: arm-aws-ecs 81 | Click the CLI-driven workflow option 82 | In the workspace, click arm-aws-ecs > Settings > General then enable '[local execution mode] (https://www.terraform.io/docs/cloud/workspaces/settings.html#execution-mode)' 83 | Go to the '[User Settings section] (https://www.terraform.io/docs/cloud/users-teams-organizations/users.html#user-settings)' in the Terraform Cloud Dashboard 84 | In the User Settings section, Create a new '[Terraform API token] (https://www.terraform.io/docs/cloud/users-teams-organizations/users.html#api-tokens)' then copy and paste the token in a secure location for later use. 85 | 86 | Warning: Your Terraform Cloud API token must be protected and not shared with unauthorized parties to prevent exposure and unauthorized access. 87 | 88 | Great, you have created and safely stored your newly created Terraform Cloud API Token. -------------------------------------------------------------------------------- /content/3_ModuleThree/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Partner Setup" # MODIFY THIS TITLE IF APPLICABLE 3 | chapter: true 4 | weight: 3 5 | --- 6 | 7 | # Partner Setup 8 | 9 | ## Module Three Heading 10 | 11 | This paragraph block should be an introduction to the module about requirements the partner may need for their audience members. Examples include signing up for the partner platform or installing an agent. 12 | 13 | ### Module Three Subheading 14 | This paragraph block should be utilized to briefly explain the submodules.
15 | 16 | #### Partner Setup Instructions 17 | A brief overview of submodule one. 18 | 19 | {{% notice info %}} 20 |

21 | **REMOVE:** With the exception of _index.md, the module folders and filenames should be changed to better reflect their content, i.e. 1_Planning as the folder and 11_HowToBegin as the first submodule. Changing the "weight" value of the header is ultimately what reflects the order the modules are presented. 22 |

23 | {{% /notice %}} 24 | 25 | **REMOVE:** Every introduction page should include the following warning label. 26 | 27 | {{% notice warning %}} 28 | The examples and sample code provided in this workshop are intended to be consumed as instructional content. These will help you understand how various AWS services can be architected to build a solution while demonstrating best practices along the way. These examples are not intended for use in production environments. 29 | {{% /notice %}} 30 | 31 | ### Next Section Heading 32 | This paragraph block can optionally be utilized to lead into the next section of the workshop. -------------------------------------------------------------------------------- /content/4_ModuleFour/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Hugo Framework and Markdown" 3 | chapter: true 4 | weight: 4 5 | --- 6 | 7 | # Hugo Framework and Markdown 8 |
9 | 10 | ### Setting Up The Workshop: AWS Hosted Or Self-paced 11 | By utilizing the Hugo language localization settings, directing the workshop towards a specific setup can be simplified. The `Language` setting in the `config.toml` file will allow you to distinguish between having one option or both. Commenting out one of the languages will hide all files that are related to that setup. By default, only the self-guided setup will be enabled. To enable switching, set `disableLanguageSwitchingButton` to `false` in the `config.toml`. If you want to have only the Event Engine setup, set the `defaultContentLanguage` at the top of the `config.toml` file to `ee`. 12 | 13 | ### The Entry Point Of The Workshop And Naming Conventions 14 | All modifications should be done to files in the `content` folder. `_index.md` serves as the main entry point to your workshop. Adding modules can be done utilizing the format of `#_title` as a folder within `content`. By adding a number value to the title, this helps to keep the files structured in parity with the content of the workshop. A good practice for file naming is to have the folder be the module number and the submodule numbers add to that number reflecting their order. For example, the first module is `1_ModuleOne` and the submodules would be `11_SubmoduleOne`, `12_SubmoduleTwo`, and so forth.
15 | To ensure the modules and submodules follow the correct structure order, adjust the "weight" value in the heading of the file to reflect the order you wish to use. Three module examples are included in this template with the second being split based upon the method of setup. The same rules apply for submodules. `_index.md` will be the entry point of that module. Submodules should be named with the format of `{module number}{weight}_{title}.{language}.md`. For example, `11_Foreword.md` would be the first submodule of module one in the default language/setup. `31_PartnerSetup.ee.md` would be the first submodule of module 3 in the EventEngine language/setup. 16 | 17 | ### Working With Hugo Markdown and Shortcode 18 | The following links will supply you with all the reference documentation about Hugo markdown. For more experienced developers, inline HTML is also an option to add more customization. For example `

` inline will allow you to adjust your text placement. 19 | 20 | ### Markdown and Shortcode Resources 21 | {{% notice tip %}} 22 | The following links are your go-to resource for markdown and shortcode reference in building your workshop:
23 | * Markdown cheat sheet https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
24 | * Learn theme markdown https://learn.netlify.app/en/cont/markdown/
25 | * Menu extras and shortcuts https://learn.netlify.app/en/cont/menushortcuts/
26 | * Using Font Awesome Emoji's https://learn.netlify.app/en/cont/icons/ to help your page pop 27 | {{% /notice %}} 28 | 29 | ### Adding Images and Static Media 30 | Any images and static media to be included in the workshop need to be placed in the `static/images` folder. The format to display an image is as follows: `![Alternate Text](/images/imagename.jpg)`
31 | 32 | For example, the markdown for this dog is `![An adorable puppy](/images/dog.jpg)` and the image is in the `static/images` folder.
33 | ![An adorable puppy](/images/dog.jpg) 34 | 35 | ### Creating Links 36 | The format for creating links is `[Link Display Text](http://example.com)`. For example, this link [Hugo Framework](https://gohugo.io/about/what-is-hugo/) was created using `[Hugo Framework](https://gohugo.io/about/what-is-hugo/)`. 37 | 38 | ### The "More" Menu Section 39 | This section of the menu on the left is designed to add additional resources that are related to the workshop but not necessarily part of the workshop itself. To modify these links, edit the sections marked `[[menu.shortcuts]]` in the `config.toml` located in the root folder. The "name" portion will be what is displayed in the menu. The "url" should be the address of the link. The "weight" setting will adjust the display order, similar to the other "weight" settings utilized in indexes and modules mentioned previously. 40 | 41 | ### Ensuring Pages Appear In Both Setup Versions 42 | A shortcut to creating the workshop with different setup versions is utilizing the localization functionality of Hugo. By adding a secondary extension to the filename, this file will be included in the specific version of the workshop. Currently, the base utilizes the format `*.ee.md` to signify that the page is to be used in the AWS EventEngine setup. Much of the time, the files will be the same as the content only differs at specific points. It is necessary to add them, however, to make sure that the common content is duplicated across both versions. If you wish to change the secondary extension or default version, this can be done in the `config.toml` file in the heading and `[Languages]` sections. -------------------------------------------------------------------------------- /content/_index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "AWS Modernization Workshop Base Template" # MODIFY THIS TO BE THE TITLE OF YOUR WORKSHOP 3 | chapter: true 4 | weight: 1 5 | --- 6 | 7 | # AWS Modernization Workshop Base Template 8 |
9 | ![Partner Logo](/images/AWS_Logo.png) 10 |
11 | 12 | ## Welcome 13 | 14 | **REMOVE:** By utilizing this template, you can create your workshops with little coding knowledge. These workshops use the Hugo Framework and the hugo-theme-learn submodules. By writing content using simple markdown code, Hugo creates the necessary HTML for you. Examples of code, files, and folders here can be modified, copied, pasted, and deleted as necessary. Block sections of instruction that should be removed will be explicitly marked with **REMOVE**. Other sections should be modified to reflect the workshop. For guidance on how to utilize the Hugo framework and markdown, please refer to the module titled "Hugo Framework And Markdown". That module can be removed once building the workshop is complete. 15 | 16 | This paragraph block can give the high level overview of the learning goals and use cases of what the workshop is trying to teach. 17 | 18 | This paragraph block can be used to introduce the company and how the solution being taught addresses specific issues. 19 | 20 | 21 | 22 | {{% notice warning %}} 23 | The examples and sample code provided in this workshop are intended to be consumed as instructional content. These will help you understand how various AWS services can be architected to build a solution while demonstrating best practices along the way. These examples are not intended for use in production environments. 24 | {{% /notice %}} 25 | 26 | **REMOVE EVERYTHING BELOW:** Every introduction page should include the following warning label. 27 | 28 | 29 | # Hugo Framework and Markdown 30 |
31 | 32 | ### Setting Up The Workshop: AWS Hosted Or Self-paced 33 | By utilizing the Hugo language localization settings, directing the workshop towards a specific setup can be simplified. The `Language` setting in the `config.toml` file will allow you to distinguish between having one option or both. Commenting out one of the languages will hide all files that are related to that setup. By default, only the self-guided setup will be enabled. To enable switching, set `disableLanguageSwitchingButton` to `false` in the `config.toml`. If you want to have only the Event Engine setup, set the `defaultContentLanguage` at the top of the `config.toml` file to `ee`. 34 | 35 | ### The Entry Point Of The Workshop And Naming Conventions 36 | All modifications should be done to files in the `content` folder. `_index.md` serves as the main entry point to your workshop. Adding modules can be done utilizing the format of `#_title` as a folder within `content`. By adding a number value to the title, this helps to keep the files structured in parity with the content of the workshop. A good practice for file naming is to have the folder be the module number and the submodule numbers add to that number reflecting their order. For example, the first module is `1_ModuleOne` and the submodules would be `11_SubmoduleOne`, `12_SubmoduleTwo`, and so forth.
37 | To ensure the modules and submodules follow the correct structure order, adjust the "weight" value in the heading of the file to reflect the order you wish to use. Three module examples are included in this template with the second being split based upon the method of setup. The same rules apply for submodules. `_index.md` will be the entry point of that module. Submodules should be named with the format of `{module number}{weight}_{title}.{language}.md`. For example, `11_Foreword.md` would be the first submodule of module one in the default language/setup. `31_PartnerSetup.ee.md` would be the first submodule of module 3 in the EventEngine language/setup. 38 | 39 | ### Working With Hugo Markdown and Shortcode 40 | The following links will supply you with all the reference documentation about Hugo markdown. For more experienced developers, inline HTML is also an option to add more customization. For example `

` inline will allow you to adjust your text placement. 41 | 42 | ### Markdown and Shortcode Resources 43 | {{% notice tip %}} 44 | The following links are your go-to resource for markdown and shortcode reference in building your workshop:
45 | * Markdown cheat sheet https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
46 | * Learn theme markdown https://learn.netlify.app/en/cont/markdown/
47 | * Menu extras and shortcuts https://learn.netlify.app/en/cont/menushortcuts/
48 | * Using Font Awesome Emoji's https://learn.netlify.app/en/cont/icons/ to help your page pop 49 | {{% /notice %}} 50 | 51 | ### Adding Images and Static Media 52 | Any images and static media to be included in the workshop need to be placed in the `static/images` folder. The format to display an image is as follows: `![Alternate Text](/images/imagename.jpg)`
53 | 54 | For example, the markdown for this dog is `![An adorable puppy](/images/dog.jpg)` and the image is in the `static/images` folder.
55 | ![An adorable puppy](/images/dog.jpg) 56 | 57 | ### Creating Links 58 | The format for creating links is `[Link Display Text](http://example.com)`. For example, this link [Hugo Framework](https://gohugo.io/about/what-is-hugo/) was created using `[Hugo Framework](https://gohugo.io/about/what-is-hugo/)`. 59 | 60 | ### The "More" Menu Section 61 | This section of the menu on the left is designed to add additional resources that are related to the workshop but not necessarily part of the workshop itself. To modify these links, edit the sections marked `[[menu.shortcuts]]` in the `config.toml` located in the root folder. The "name" portion will be what is displayed in the menu. The "url" should be the address of the link. The "weight" setting will adjust the display order, similar to the other "weight" settings utilized in indexes and modules mentioned previously. 62 | 63 | ### Ensuring Pages Appear In Both Setup Versions 64 | A shortcut to creating the workshop with different setup versions is utilizing the localization functionality of Hugo. By adding a secondary extension to the filename, this file will be included in the specific version of the workshop. Currently, the base utilizes the format `*.ee.md` to signify that the page is to be used in the AWS EventEngine setup. Much of the time, the files will be the same as the content only differs at specific points. It is necessary to add them, however, to make sure that the common content is duplicated across both versions. If you wish to change the secondary extension or default version, this can be done in the `config.toml` file in the heading and `[Languages]` sections. 65 | -------------------------------------------------------------------------------- /content/getting-started/01-aws-event/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: At an AWS Guided Event 3 | weight: 02 4 | --- 5 | 6 | :::alert{header=Note} 7 | This section only applies if you are participating in an AWS guided event. [Click here](/02-getting-started/02-own-account/) for instructions on running the workshop in your own account. 8 | ::: 9 | 10 | ## AWS Workshop Studio 11 | 12 | AWS Workshop Studio allows AWS field teams to run Workshops, GameDays, Bootcamps, Immersion Days, and other events that require hands-on access to AWS accounts. 13 | 14 | Follow the steps below to gain access to your Workshop Studio AWS account: 15 | 16 | 1. Open AWS Workshop Studio at https://catalog.us-east-1.prod.workshops.aws/join/. 17 | 18 | 2. Choose your preferred sign-in method. For AWS guided events, choose **Email OTP**. 19 | 20 | ![Studio Signin](/static/images/aws-event/sign-in.png) 21 | 22 | 3. Enter the code provided by the event organizer into the text box. You will usually find this code on a slide that is being shown, or a paper printout at your table. 23 | 24 | ![Enter Code](/static/images/aws-event/enter-access-code.png) 25 | 26 | 4. Read and agree to the *Terms and Conditions* by selecting **I agree with the terms and conditions** and choose **Join Event**. 27 | 28 | ![Terms and Conditions](/static/images/aws-event/workshop-studio-tc.png) 29 | 30 | You will be taken to the workshop instructions. You can access the console of your AWS account for the event by clicking the link in the sidebar. 31 | 32 | ![Console access](/static/images/aws-event/console_access.png) 33 | 34 | ::alert[We will not be using CLI credentials in today's workshop. This workshop uses [AWS Cloud9](https://aws.amazon.com/cloud9/) as its Integrated Development Environment (IDE).]{header=Note} 35 | 36 | ## Proceed to the workshop 37 | 38 | You are now ready for the workshop. 39 | -------------------------------------------------------------------------------- /content/getting-started/02-own-account/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Using Your Own AWS Account 3 | weight: 20 4 | --- 5 | 6 | ::alert[If you are participating in an AWS guided event, your instructor will have given you access to an AWS account provisioned exclusively for this workshop through Workshop Studio. [Click here](/03-getting-started/01-aws-event) for instructions for joining an AWS guided event.]{header=Note} 7 | 8 | ## Workshop resources 9 | 10 | The following resources will be deployed to run the workshop: 11 | 12 | - AWS Cloud9 environment named **Workshop**. 13 | - AWS CodeCommit repository named **Workshop**, populated with template code. 14 | 15 | To configure the Cloud9 environment, a number of additional resources are provisioned. 16 | 17 | - AWS Systems Manager Automation Document used to configure the Cloud9 environment. 18 | - Amazon S3 bucket to hold the Automation Document's output logs. 19 | - AWS Lambda function to create a CloudFormation template to associate the Automation Document with the Cloud9 environment. 20 | - IAM roles for the Lambda function. 21 | 22 | :::alert{header=Note} 23 | The role used to bootstrap the account will require sufficient permissions to provision the resources above. 24 | ::: 25 | 26 | ## Download and execute the bootstrap script 27 | 28 | We will download the CloudFormation templates used to provision the resources, and the bootstrap script to run the templates. We will then run the bootstrap script to provision the resources. 29 | 30 | 1. Sign in to the AWS Management Console and open the AWS CloudShell console at https://console.aws.amazon.com/cloudshell/. 31 | 32 | 2. In the menu bar, for **Select a Region**, choose the region in which you will be running the workshop. 33 | 34 | ![Select Region](/static/images/own-account/select-region.png) 35 | 3. Run the following code in CloudShell terminal. 36 | 37 | :::code{showCopyAction=true showLineNumbers=false language=bash} 38 | 39 | # Download code Zip file 40 | 41 | curl ':assetUrl{path="/code/workshop.zip" source=s3}' -o workshop.zip 42 | 43 | # Download CloudFormation templates 44 | 45 | curl ':assetUrl{path="/cfn/cloud9.yaml" source=repo}' -o cloud9.yaml 46 | curl ':assetUrl{path="/cfn/codecommit.yaml" source=repo}' -o codecommit.yaml 47 | 48 | # Download bootstrap script 49 | 50 | curl ':assetUrl{path="/scripts/own_account.sh" source=repo}' -o own_account.sh 51 | ::: 52 | 5. On the **Safe Paste** dialog, choose **Paste**. 53 | 6. Run the bootstrap script in the CloudShell terminal. 54 | 55 | :::code{showCopyAction=true showLineNumbers=false language=bash} 56 | sh own_account.sh 57 | ::: 58 | 59 | :::alert{header=Note} 60 | The Cloud9 deployment and setup process takes approximately 5 minutes to complete. 61 | ::: 62 | 63 | :::alert{header="Important" type="warning"} 64 | If you are running this workshop on your own AWS account, remember to delete all resources by following the [Cleanup instructions](/90-cleanup) to avoid unnecessary charges. 65 | ::: 66 | -------------------------------------------------------------------------------- /content/getting-started/index.en.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Getting Started 3 | weight: 20 4 | --- 5 | 6 | ## Workshop architecture 7 | 8 | The following architecture diagram illustrates the various components of the workshop. 9 | 10 | ![architecture diagram](/static/images/introduction/architecture.png) 11 | ## Preparing for the workshop 12 | 13 | Follow the installation instructions in this section to prepare your environment for the workshop. 14 | 15 | - If you are attending an AWS guided event, setup your environment [here](/02-getting-started/01-aws-event). 16 | - If you are _not_ participating in an AWS guided event, setup your environment [here](/02-getting-started/02-own-account). 17 | 18 | ::alert[If you are running this workshop on your own AWS account, remember to delete all resources by following the [Clean Up Resources](/90-cleanup) section to avoid unnecessary charges.]{header=Note} 19 | -------------------------------------------------------------------------------- /layouts/_default/_markup/render-link.html: -------------------------------------------------------------------------------- 1 | {{ .Text }} -------------------------------------------------------------------------------- /layouts/partials/favicon.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /layouts/partials/logo.html: -------------------------------------------------------------------------------- 1 | AWS-Logo_White-Color 2 | 3 | -------------------------------------------------------------------------------- /layouts/partials/menu-footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Privacy | Site Terms | CC BY-SA 4.0 6 | 7 | -------------------------------------------------------------------------------- /pipeline/webhosting/README.md: -------------------------------------------------------------------------------- 1 | ## Webhosting and Pipeline Setup 2 | 3 | **Purpose:** Instructions for hosting the website and creating a pipeline that automatically builds new static html files and uploads them to the appropriate S3 Bucket. 4 | 5 | ### 1. Edit and deploy the CloudFront site in cloudfront-s3-website.yaml. 6 | 7 | You should only need to change the parameter for WorkshopHostname. Once that is complete run a command similar to the following but change the stackname 8 | 9 | > Stack takes about 20 minutes 10 | ``` 11 | ### DO NOT FORGET TO CHANGE THE STACK NAME 12 | aws cloudformation create-stack --stack-name MY-Workshop --template-body file://cloudfront-s3-website.yaml --enable-termination-protection 13 | ``` 14 | 15 | ### 2. Edit and deploy the pipeline in pipeline.yaml. 16 | 17 | In this one you will probably want to change the first 5 parameters. ProjectName should match whatever you put for WorkshopHostname in the cloudfront-s3-website.yaml. Set the `CloudFrontDistroId` to the distribution ID generated from the first stack. 18 | 19 | > Stack completes in about 1-2 minutes 20 | ``` 21 | ### DO NOT FORGET TO CHANGE THE STACK NAME 22 | aws cloudformation create-stack --stack-name MY-Website-Pipeline --template-body file://pipeline.yaml --capabilities CAPABILITY_NAMED_IAM --enable-termination-protection 23 | ``` 24 | 25 | If you check the Build Pipeline and Build logs you should see files successfully copied to your S3 bucket. -------------------------------------------------------------------------------- /pipeline/webhosting/cloudfront-s3-website.yaml: -------------------------------------------------------------------------------- 1 | AWSTemplateFormatVersion: '2010-09-09' 2 | Description: Creates an S3 bucket and CloudFront Distribution using Origins Access ID 3 | Parameters: 4 | WorkshopHostname: 5 | Type: String 6 | Default: xXx 7 | Description: The hostname of the workshop 8 | AllowedPattern: (?!-)[a-zA-Z0-9-.]{1,20}(? AWS Marketplace specific requirements 4 | 1. /_index.md - Change the href url to **Available in MP Link** and the png image to **Seller badge (image)**. Be sure to put the png file you receive into the folder /static/ 5 | 2. /030_self_guided_setup/request_credit.md - Change ```https://pages.awscloud.com/awsmp-wsm-dev-workshop-series-credit-request.html?trk=lab_{partnerName}``` to the provided **Credit request link**. On the same page change ```https://aws.amazon.com/marketplace/pp/B07PZY3369?&trk=el_a134p000003yrYeAAI&trkCampaign=AWSMP_pdp_dev_x_dg&sc_channel=el&sc_campaign=el_awsmp_mult&sc_outcome=Marketplace``` to the Available in MP link. 6 | 3. /099_survey/_index.md - Change ```https://pages.awscloud.com/awsmp-wsm-dev-workshop-series-csat-lab-completion.html``` to the ***CSAT form URL**. 7 | 4. ALL workshops part of AWS Marketplace DevOps series need to use your company's free trial Marketplace offer, as part of the workshop. [Free Trial Example](https://aws.amazon.com/marketplace/seller-profile?id=56345c10-b815-46b5-acd2-d0e0d2626670). DO NOT use your company's free trial sign-up page. 8 | 9 | > General workshop 10 | 1. Has anyone else reviewed the workshop and provided feedback? 11 | 2. Have you checked all the links to validate they work? 12 | 3. Can you complete the workshop from start to finish without errors? 13 | 4. Does the introduction warn of any costs that may be incurred by the customer? 14 | 5. Did you update/change the repo's README.md to be about this workshop? 15 | 6. Did you edit config.toml and update the workshop title? 16 | 7. Is the information in the workshop factually correct? 17 | 8. Have you checked spelling and grammar? 18 | 9. Is hugo-theme-learn a submodule? The learn theme needs to be a submodule in the repo. To create this cd or create a themes folder. Run ```git submodule add https://github.com/matcornic/hugo-theme-learn.git``` inside the themes folder/directory. 19 | 20 | > Introduction 21 | 1. Is there an introduction that states what will be covered in the workshop? 22 | 1. Does the introduction give an expected duration? 23 | 1. Does the introduction state the outcomes? 24 | 1. Does the introduction describe the target audience? 25 | 1. Does the introduction list or describe any necessary background knowledge? For example, a workshop that deals with databases may need some knowledge of basic SQL commands. A workshop on front-end may require knowledge of Javascript, node.js v14 installed, etc. 26 | 27 | > Environment 28 | 1. If the workshop supports using a customer’s own account, does the workshop describe how to create pre-requisite infrastructure (eg via a CloudFormation, CDK, SAM template, etc) with instructions on how to deploy it? 29 | 2. If the workshop integrates with Event Engine, does the workshop include instructions on how to log in via EE. Similarly, if the workshop supports other systems (Qwiklabs, etc) it should provide login instructions for those. 30 | 3. If the workshop can only use Event Engine, does the front page clearly state that the workshop can only be used at AWS-run events? 31 | 4. Does the workshop include steps to set up local prerequisites? For example, an attendee may need to install things like node, python, an SSH client, or a Cloud9 environment, etc. 32 | If the workshop runs only in specific regions, are these clearly listed? 33 | 34 | > Cleanup 35 | 1. Does the workshop provide instructions on how to clean up resources created during the workshop? 36 | 2. Are the instructions at the right level of detail? For example, a 100-level workshop may need to walk a customer through all steps of terminating an EC2 instance. A 400-level workshop may simply tell a user to terminate EC2 instances the user created during the workshop. 37 | 3. Are the clean-up steps specific to the resources created in the workshop? Generalisations like “terminate all EC2 instances” could have unintended consequences. 38 | 4. Are the steps specific to the user? If more than one person is sharing an AWS account, generalisations like “terminate all EC2 instances” could have unintended consequences. 39 | 5. Are deliberately retained resources explained? For example, the workshop may deliberately retain an S3 bucket holding the results of a process. 40 | 6. If resources are being retained, is there an explicit comment about costs those resources may incur? 41 | 7. If clean-up instructions ask the user to delete a CloudFormation Stack, does this delete all resources in the stack? 42 | • CloudFormation stack deletion fail to remove some resources, like non-empty S3 buckets. These could then incur ongoing costs and/or raise possible future security risks. 43 | • Often a stack provides a workshop’s starting state, and other resources are then created via the console. 44 | 8. Does the workshop reference/link to the clean-up steps in the introduction or setup chapters? If someone cannot complete the workshop, they should still know about the existence of clean-up steps. They should not need to complete the workshop before being told of clean-up steps. 45 | 46 | > External Links and Privacy 47 | 1. Are images and other single files (CloudFormation templates, individual code files, etc) contained within the workshop structure, either within the specific chapter or under the /static folder. For example, an image should use a format like ![](../static/image.png) and not ![](https://googleimagesearch.com/?term=penguin) 48 | 2. Do links to any Youtube videos use the Hugo “Youtube” shortcode? (This allows us to enforce privacy-enhanced mode when linking to the content) 49 | 3. Is the workshop self-contained? (Will the workshop function/can it be delivered if your personal accounts are lost) 50 | 51 | -------------------------------------------------------------------------------- /review/partner_workshop_review.md: -------------------------------------------------------------------------------- 1 | ### MP DevOps Series Specific – Skip section if not part of MP DevOps series 2 | 3 | | 4 | | **Yes/No/Comments** | 5 | | --- | --- | 6 | | Is the main page seller badge correct? | 7 | | 8 | | Does the seller badge link to the sellers page in Marketplace | 9 | | 10 | | On the credit request page, does the request credit link to the correct page, URL should have partners name at the end? On the same page does the available in MP link to correct partners page? | 11 | | 12 | | Does the survey link do to the correct URL? | 13 | | 14 | | Does the workshop use the Marketplace free trial listing? | 15 | | 16 | 17 | ### 18 | 19 | ### Workshop general 20 | 21 | | 22 | | **Yes/No/Comments** | 23 | | --- | --- | 24 | | Is hugo-theme-learn a submodule? The learn theme needs to be a submodule in the repo. To create this cd or create a themes folder. Run ```git submodule add https://github.com/matcornic/hugo-theme-learn.git``` inside the themes folder/directory. | 25 | | 26 | | Did you update/change the repo's README.md to be about this workshop? | 27 | | 28 | | Did you edit config.toml and update the workshop title? | 29 | | 30 | 31 | ### 32 | 33 | ### 34 | 35 | ### Workshop introduction 36 | 37 | | 38 | | **Yes/No/Comments** | 39 | | --- | --- | 40 | | Is there an introduction that states what will be covered in the workshop? | 41 | | 42 | | Does the introduction give an expected duration? | 43 | | 44 | | Does the introduction state the outcomes? (ie what someone completing the workshop will learn) | 45 | | 46 | | Does the introduction describe the target audience? | 47 | | 48 | | sd | 49 | | 50 | | Does the introduction warn of any costs that may be incurred by the customer? | 51 | | 52 | 53 | ### Environment setup 54 | 55 | | 56 | | **Yes/No/Comments** | 57 | | --- | --- | 58 | | AWS Account Access | 59 | | 60 | | If the workshop supports using a customer's own account, does the workshop describe how to create pre-requisite infrastructure (eg via a CloudFormation, CDK, SAM template, etc) with instructions on how to deploy it? | 61 | | 62 | | If the workshop integrates with Event Engine, does the workshop include instructions on how to log in via EE. Similarly, if the workshop supports other systems (Qwiklabs, etc) it should provide login instructions for those. | 63 | | 64 | | If the workshop can _only_ use Event Engine, does the front page clearly state that the workshop can only be used at AWS-run events? | 65 | | 66 | | Does the workshop include steps to set up local prerequisites? For example, an attendee may need to install things like node, python, an SSH client, or a Cloud9 environment, etc. | 67 | | 68 | | If the workshop runs only in specific regions, are these clearly listed? | 69 | | 70 | 71 | ### Environment clean-up 72 | 73 | | 74 | | **Yes/No/Comments** | 75 | | --- | --- | 76 | | Does the workshop provide instructions on how to clean up resources created during the workshop? | 77 | | 78 | | Are the instructions at the right level of detail? For example, a 100-level workshop may need to walk a customer through all steps of terminating an EC2 instance. A 400-level workshop may simply tell a user to terminate EC2 instances the user created during the workshop. | 79 | | 80 | | Are the clean-up steps specific to the resources created in the workshop? Generalisations like "terminate all EC2 instances" could have unintended consequences. | 81 | | 82 | | Are the steps specific to the user? If more than one person is sharing an AWS account, generalisations like "terminate all EC2 instances" could have unintended consequences. | 83 | | 84 | | Are deliberately retained resources explained? For example, the workshop may deliberately retain an S3 bucket holding the results of a process. | 85 | | 86 | | If resources are being retained, is there an explicit comment about costs those resources may incur? | 87 | | 88 | | If clean-up instructions ask the user to delete a CloudFormation Stack, does this delete all resources in the stack? 89 | - CloudFormation stack deletion fail to remove some resources, like non-empty S3 buckets. These could then incur ongoing costs and/or raise possible future security risks. 90 | - Often a stack provides a workshop's starting state, and other resources are then created via the console. 91 | | 92 | | 93 | | Does the workshop reference/link to the clean-up steps in the introduction or setup chapters? If someone cannot complete the workshop, they should still know about the existence of clean-up steps. They should not need to complete the workshop before being told of clean-up steps. | 94 | | 95 | 96 | ### Well-architected workshop infrastructure 97 | 98 | The workshop should adhere to AWS Well-Architected principles where practical 99 | 100 | | 101 | | **Yes/No/Comments** | 102 | | --- | --- | 103 | | Are resources deployed in multiple availability zones? | 104 | | 105 | | Will resources scale with demand? For example: are EC2 instances deployed within an ASG? | 106 | | 107 | | For any resources that are not deployed in a redundant, scalable, cost-efficient manner: Is there a comment that this choice is deliberate? | 108 | | 109 | 110 | ### External links and privacy 111 | 112 | Workshop materials should be self-contained wherever practical. 113 | 114 | | 115 | | **Yes/No/Comments** | 116 | | --- | --- | 117 | | Are images and other single files (CloudFormation templates, individual code files, etc) contained within the workshop structure, either within the specific chapter or under the /static folder. For example, an image should use a format like ![](../static/image.png) and not ![]([https://googleimagesearch.com/?term=penguin](https://googleimagesearch.com/?term=penguin)) | 118 | | 119 | | Do all images used in this workshop have a [CC0 license](https://creativecommons.org/share-your-work/public-domain/cc0/)? | 120 | | 121 | | If the workshop references larger bundles of AWS-owned content (for example Lambda source code, sample data sets, etc), are these stored somewhere central like an Event Engine S3 bucket, or an AWS-owned Github Organization (AWS-Samples etc, see Open Source below)? 122 | - Resources _must not_ be hosted in individually-owned AWS accounts, individual Github accounts, etc. 123 | | 124 | | 125 | | Do links to any Youtube videos use the Hugo "Youtube" shortcode? (This allows us to enforce privacy-enhanced mode when linking to the content) | 126 | | 127 | | Are all included data sets comprised of fake data or open data sets held in places like [https://registry.opendata.aws/](https://registry.opendata.aws/) (Third party data sets can be referenced in the workshop but should not be included) 128 | | 129 | | 130 | | Is the workshop self-contained? (Will the workshop function/can it be delivered if your personal accounts are lost) | 131 | | 132 | 133 | ### Security 134 | 135 | | 136 | | **Yes/No/Comments** | 137 | | --- | --- | 138 | | Confirm the content does not reference any confidential information, internal tools, or internal-only jargon. (e.g.; internal Amazon systems, employee information, containment scores, etc)s | 139 | | 140 | | If IAM Users or Roles are created, do they have appropriately scoped policies? IAM principals should use AWS-managed policies unless there's a specific need for a custom policy. | 141 | | 142 | | Do S3 Buckets restrict public access, either via _S3 Block Public Access_ or an S3 Bucket Policy? | 143 | | 144 | | Do EC2 Security Groups restrict access to specific source IPs and ports? | 145 | | 146 | | Do RDS instances have Public Access disabled? | 147 | | 148 | | For configurations that don't adhere to AWS Well-Architected practices, is there a note that explains why this is done, and a recommendation for a best-practice approach? | 149 | | 150 | | Does sample code (eg Lambda functions) perform only the required actions? | 151 | | 152 | | Does sample code run using an IAM role that allows only required actions? | 153 | | 154 | | If attendees are asked to enter information, is this anonymised? Personally Identifiable Information (PII) should be avoided unless _strictly_ necessary (for example testing SES may require the attendees enter a valid email address to receive an email). | 155 | | 156 | 157 | ### Source code, sample data, third party sources, and Open Source 158 | 159 | | 160 | | **Yes/No/Comments** | 161 | | --- | --- | 162 | | If the workshop includes any AWS-created code (eg Lambda functions) does the code include a license? The [MIT-0 license](https://github.com/aws/mit-0) is a good choice for workshop sample code that is not intended for production use. | 163 | | 164 | | Third-party code should be referenced rather than included whenever possible, but when third-party code must be included that code's license must allow for Amazon/AWS usage and the workshop should include attribution. If you're unsure, contact the Open Source team here: [https://w.amazon.com/?Open\_Source/Distributions](https://w.amazon.com/bin/view/Open_Source/Hello/) 165 | | 166 | | 167 | | If AWS-provided code _includes_ any third-party code, are all required attributions are present? For example the [CC-BY license](https://creativecommons.org/licenses/by/4.0/) allows usage, but requires attribution and indications of any changes. | 168 | | 169 | | If the workshop uses or references third-party data sets, does AWS have the right to use those data sets in a workshop scenario? If you're unsure, flag this and ask Legal via [https://legal.amazon.com/sites/AWS-Collab/agreementresources/Sherpa/SitePages/Home.aspx](https://legal.amazon.com/sites/AWS-Collab/agreementresources/Sherpa/SitePages/Home.aspx) | 170 | | 171 | | If the workshop references AWS-owned sample code on Github, is the code under an Amazon-owned Github Organization, for example AWS-samples? 172 | - Personally-owned github repos are not acceptable. 173 | - For AWS sample code, there's an [expedited process](https://w.amazon.com/?Open_Source/Open_Sourcing#publish-sample-code) to review and release sample code 174 | | 175 | | 176 | 177 | ### Content, spelling, and grammar 178 | 179 | | 180 | | **Yes/No/Comments** | 181 | | --- | --- | 182 | | Is the information in the workshop factually correct? | 183 | | 184 | | Could you complete all the steps in the workshop without error? | 185 | | 186 | | If you did encounter errors, did the workshop guide help resolve those? | 187 | | 188 | | Is the workshop specific enough in its instructions, without being verbose? 189 | - This can be dependent on level. For example, a 100-level workshop may need to walk a customer through all steps of launching an EC2 instance. A 400 level workshop may simply tell a user to launch an EC2 instance using an AmazonLinux2 AMI. 190 | - Note/list any sections that could be improved. 191 | | 192 | | 193 | | Are there any sections that would be better described with a diagram or image? 194 | - Minimize the use of AWS Console screenshots. Frequent changes to the AWS Console mean these become outdated, and then cause confusion. 195 | | 196 | | 197 | | Does the workshop avoid rhetorical devices that may be unclear to non-native-language speakers? For example "grab a cup of joe while you wait. Most of the time, it's faster than a rat up a drainpipe" | 198 | | 199 | 200 | ### Accessibility and Inclusion 201 | 202 | | 203 | | **Yes/No/Comments** | 204 | | --- | --- | 205 | | Do all images have accurate, descriptive alternate text? 206 | - The IMG Hugo shortcode allows alternate text to be included. 207 | | 208 | | 209 | | Do images avoid red/green elements that could cause issues for people with colorblindness? | 210 | | 211 | | Do videos have (or allow for) subtitles? | 212 | | 213 | | Does the workshop content adhere to Amazon's [Inclusive Tech Guidelines](https://w.amazon.com/bin/view/EE/Programs/Inclusive_Tech/Guidelines)? 214 | - e.g.: Do not use terms such as blacklist/whitelist, master/slave, etc. 215 | | 216 | | 217 | 218 | ### Internationalization / multi-language 219 | 220 | | 221 | | **Yes/No/Comments** | 222 | | --- | --- | 223 | | Are all languages/translations listed in the drop-down on the left-hand menu? Do all language choices link to complete translations of the workshop? 224 | - The Aws-workshop-template ships with English and French as defaults, to show how multi-language works. Sometimes workshop owners leave the French default pages in place. 225 | | 226 | | 227 | 228 | ### Additional comments 229 | 230 | _Space for any additional comments you may have for the workshop author._ -------------------------------------------------------------------------------- /static/css/theme-mine.css: -------------------------------------------------------------------------------- 1 | 2 | :root{ 3 | 4 | --MAIN-TEXT-color:#323235; /* Color of text by default */ 5 | --MAIN-TITLES-TEXT-color: #778ba5; /* Color of titles h2-h3-h4-h5 */ 6 | --MAIN-LINK-color:#4881cd; /* Color of links */ 7 | --MAIN-LINK-HOVER-color:#599af1; /* Color of hovered links */ 8 | --MAIN-ANCHOR-color: #4881cd; /* color of anchors on titles */ 9 | 10 | --MENU-HEADER-BG-color:#283e5b; /* Background color of menu header */ 11 | --MENU-HEADER-BORDER-color:#435c7c; /*Color of menu header border */ 12 | 13 | --MENU-SEARCH-BG-color:#202c3c; /* Search field background color (by default borders + icons) */ 14 | --MENU-SEARCH-BOX-color: #4d6584; /* Override search field border color */ 15 | --MENU-SEARCH-BOX-ICONS-color: #4d6584; /* Override search field icons color */ 16 | 17 | --MENU-SECTIONS-ACTIVE-BG-color:#0a0c0e; /* Background color of the active section and its childs */ 18 | --MENU-SECTIONS-BG-color:#1c222a; /* Background color of other sections */ 19 | --MENU-SECTIONS-LINK-color: #ccc; /* Color of links in menu */ 20 | --MENU-SECTIONS-LINK-HOVER-color: #e6e6e6; /* Color of links in menu, when hovered */ 21 | --MENU-SECTION-ACTIVE-CATEGORY-color: #777; /* Color of active category text */ 22 | --MENU-SECTION-ACTIVE-CATEGORY-BG-color: #fff; /* Color of background for the active category (only) */ 23 | 24 | --MENU-VISITED-color: #33a1ff; /* Color of 'page visited' icons in menu */ 25 | --MENU-SECTION-HR-color: #20272b; /* Color of


separator in menu */ 26 | 27 | } 28 | 29 | body { 30 | color: var(--MAIN-TEXT-color) !important; 31 | } 32 | 33 | textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="password"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="text"]:focus, input[type="url"]:focus, input[type="color"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, select[multiple=multiple]:focus { 34 | border-color: none; 35 | box-shadow: none; 36 | } 37 | 38 | h2, h3, h4, h5 { 39 | color: var(--MAIN-TITLES-TEXT-color) !important; 40 | } 41 | 42 | a { 43 | color: var(--MAIN-LINK-color); 44 | } 45 | 46 | .anchor { 47 | color: var(--MAIN-ANCHOR-color); 48 | } 49 | 50 | a:hover { 51 | color: var(--MAIN-LINK-HOVER-color); 52 | } 53 | 54 | #sidebar ul li.visited > a .read-icon { 55 | color: var(--MENU-VISITED-color); 56 | } 57 | 58 | #sidebar #footer { 59 | padding-top: 20px !important; 60 | } 61 | 62 | #sidebar #footer h2.github-title { 63 | font-size: 20px; 64 | color: #fd9827 !important; 65 | margin: 10px 0px 5px; 66 | padding: 0px; 67 | font-weight: normal !important; 68 | margin-top: 10px; 69 | padding-top: 30px; 70 | border-top: 1px dotted #384657; 71 | } 72 | 73 | #sidebar #footer h3.github-title { 74 | font-size: 14px; 75 | margin: 10px 0px 5px; 76 | padding: 0px; 77 | text-transform: uppercase; 78 | letter-spacing: .15px; 79 | } 80 | 81 | #sidebar #footer h5.copyright, #sidebar #footer p.build-number { 82 | font-size: 10px; 83 | letter-spacing: .15px; 84 | line-height: 150% !important; 85 | } 86 | 87 | #body a.highlight:after { 88 | display: block; 89 | content: ""; 90 | height: 1px; 91 | width: 0%; 92 | -webkit-transition: width 0.5s ease; 93 | -moz-transition: width 0.5s ease; 94 | -ms-transition: width 0.5s ease; 95 | transition: width 0.5s ease; 96 | background-color: var(--MAIN-LINK-HOVER-color); 97 | } 98 | #sidebar { 99 | background-color: var(--MENU-SECTIONS-BG-color); 100 | } 101 | #sidebar #header-wrapper { 102 | background: var(--MENU-HEADER-BG-color); 103 | color: var(--MENU-SEARCH-BOX-color); 104 | border-color: var(--MENU-HEADER-BORDER-color); 105 | } 106 | #sidebar .searchbox { 107 | border-color: var(--MENU-SEARCH-BOX-color); 108 | background: var(--MENU-SEARCH-BG-color); 109 | } 110 | #sidebar ul.topics > li.parent, #sidebar ul.topics > li.active { 111 | background: var(--MENU-SECTIONS-ACTIVE-BG-color); 112 | } 113 | #sidebar .searchbox * { 114 | color: var(--MENU-SEARCH-BOX-ICONS-color); 115 | } 116 | 117 | #sidebar a { 118 | color: var(--MENU-SECTIONS-LINK-color); 119 | } 120 | 121 | #sidebar a:hover { 122 | color: var(--MENU-SECTIONS-LINK-HOVER-color); 123 | } 124 | 125 | #sidebar ul li.active > a { 126 | background: var(--MENU-SECTION-ACTIVE-CATEGORY-BG-color); 127 | color: var(--MENU-SECTION-ACTIVE-CATEGORY-color) !important; 128 | } 129 | 130 | #sidebar hr { 131 | border-color: var(--MENU-SECTION-HR-color); 132 | } 133 | 134 | #navigation a.nav-prev, #navigation a.nav-next { 135 | color: #f19e39 !important; 136 | } 137 | 138 | #navigation a.nav-prev:hover, #navigation a.nav-next:hover { 139 | color: #e07d04 !important; 140 | } 141 | 142 | div.notices p:first-child:before { 143 | position: absolute; 144 | top: 2px; 145 | color: #fff; 146 | font-family: 'Font Awesome\ 5 Free'; 147 | content: #F06A; 148 | font-weight: 900; /* Fix version 5.0.9 */ 149 | left: 10px; 150 | } 151 | 152 | #chapter p, #chapter h3 { 153 | text-align: left; 154 | } -------------------------------------------------------------------------------- /static/images/3-tier-web-app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-modernization-workshop-base/8966b7f7f558fe472620f692646d32aa737d751e/static/images/3-tier-web-app.png -------------------------------------------------------------------------------- /static/images/console_access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-modernization-workshop-base/8966b7f7f558fe472620f692646d32aa737d751e/static/images/console_access.png -------------------------------------------------------------------------------- /static/images/enter-access-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-modernization-workshop-base/8966b7f7f558fe472620f692646d32aa737d751e/static/images/enter-access-code.png -------------------------------------------------------------------------------- /static/images/sign-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-modernization-workshop-base/8966b7f7f558fe472620f692646d32aa737d751e/static/images/sign-in.png -------------------------------------------------------------------------------- /static/images/workshop-studio-tc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-samples/aws-modernization-workshop-base/8966b7f7f558fe472620f692646d32aa737d751e/static/images/workshop-studio-tc.png -------------------------------------------------------------------------------- /static/infrastructure/README.md: -------------------------------------------------------------------------------- 1 | # Infrastructure 2 | 3 | This folder is intended for CloudFormation templates used in the workshop. 4 | 5 | ## Usage 6 | 7 | Place your CloudFormation template files (*.yaml or *.json) in this directory. 8 | 9 | ## Configuration 10 | 11 | Remember to update the `contentspec.yaml` file in the root of the project to reference your CloudFormation templates. For example: 12 | 13 | ```yaml 14 | infrastructure: 15 | cloudformationTemplates: 16 | - templateLocation: static/infrastructure/your-template.yaml 17 | label: Your Template Name 18 | parameters: 19 | - templateParameter: YourParameter 20 | defaultValue: "default-value" 21 | -------------------------------------------------------------------------------- /webspec.yml: -------------------------------------------------------------------------------- 1 | version: 0.2 2 | 3 | phases: 4 | install: 5 | commands: 6 | - echo "Installing Hugo..." 7 | - | 8 | MAX_RETRIES=3 9 | for i in $(seq 1 $MAX_RETRIES); do 10 | echo "Attempt $i to download Hugo..." 11 | curl -s https://api.github.com/repos/gohugoio/hugo/releases/latest | grep "download_url.*Linux-64bit.tar.gz" | grep -v "extended" | cut -d '"' -f 4 | wget -qi - 12 | HUGO_TAR="$(find . -name "*Linux-64bit.tar.gz")" 13 | if [ ! -z "$HUGO_TAR" ]; then 14 | echo "Hugo downloaded successfully" 15 | break 16 | fi 17 | if [ $i -eq $MAX_RETRIES ]; then 18 | echo "Failed to download Hugo after $MAX_RETRIES attempts" 19 | exit 1 20 | fi 21 | sleep 5 22 | done 23 | - echo "Extracting Hugo from $HUGO_TAR" 24 | - tar -xzf "$HUGO_TAR" 25 | - chmod +x hugo 26 | - mv hugo /usr/local/bin/hugo 27 | - hugo version || { echo "Hugo installation failed"; exit 1; } 28 | 29 | pre_build: 30 | commands: 31 | - echo "Setting up environment variables..." 32 | - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) 33 | - IMAGE_TAG=${COMMIT_HASH:=latest} 34 | 35 | - echo "Initializing Git Repo..." 36 | - git init 37 | - git remote add origin $FULL_REPO_URL 38 | - git fetch || { echo "Git fetch failed"; exit 1; } 39 | - git checkout -f "$CODEBUILD_RESOLVED_SOURCE_VERSION" || { echo "Git checkout failed"; exit 1; } 40 | 41 | - echo "Initializing and updating Git submodules..." 42 | - git submodule sync 43 | - git submodule update --init --recursive || { echo "Submodule update failed"; exit 1; } 44 | 45 | - echo "Installing dependencies..." 46 | - gem install asciidoctor || { echo "Asciidoctor installation failed"; exit 1; } 47 | 48 | build: 49 | commands: 50 | - echo "Building Website..." 51 | - hugo -D -d public || { echo "Hugo build failed"; exit 1; } 52 | 53 | - echo "Deploying Website to S3..." 54 | - | 55 | if aws s3 sync public/ s3://${WEB_SITE_BUCKET}/ --delete; then 56 | echo "S3 sync successful" 57 | else 58 | echo "S3 sync failed" 59 | exit 1 60 | fi 61 | 62 | - echo "Invalidating CloudFront Cache..." 63 | - | 64 | if aws cloudfront create-invalidation --distribution-id ${CLOUDFRONT_DISTRO_ID} --paths "/*"; then 65 | echo "CloudFront invalidation created successfully" 66 | else 67 | echo "CloudFront invalidation failed" 68 | exit 1 69 | fi 70 | 71 | post_build: 72 | commands: 73 | - echo "Build completed successfully!" 74 | --------------------------------------------------------------------------------