{"id":20509208,"url":"https://github.com/shinesolutions/aem-aws-stack-builder","last_synced_at":"2025-07-03T21:37:33.333Z","repository":{"id":16390806,"uuid":"76599989","full_name":"shinesolutions/aem-aws-stack-builder","owner":"shinesolutions","description":"Adobe Experience Manager (AEM) infrastructure builder on AWS using CloudFormation stacks","archived":false,"fork":false,"pushed_at":"2024-05-07T05:16:35.000Z","size":3806,"stargazers_count":44,"open_issues_count":61,"forks_count":38,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-03-27T12:46:27.792Z","etag":null,"topics":["aem","aem-opencloud","aws","cloudformation"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shinesolutions.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-12-15T22:06:46.000Z","updated_at":"2024-05-29T10:12:13.000Z","dependencies_parsed_at":"2023-02-14T02:46:20.463Z","dependency_job_id":"82adc8c0-a39a-43f6-8e62-efae1e30080e","html_url":"https://github.com/shinesolutions/aem-aws-stack-builder","commit_stats":null,"previous_names":[],"tags_count":127,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinesolutions%2Faem-aws-stack-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinesolutions%2Faem-aws-stack-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinesolutions%2Faem-aws-stack-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinesolutions%2Faem-aws-stack-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shinesolutions","download_url":"https://codeload.github.com/shinesolutions/aem-aws-stack-builder/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248789774,"owners_count":21161891,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aem","aem-opencloud","aws","cloudformation"],"created_at":"2024-11-15T20:23:15.369Z","updated_at":"2025-04-13T22:22:37.499Z","avatar_url":"https://github.com/shinesolutions.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://github.com/shinesolutions/aem-aws-stack-builder/workflows/CI/badge.svg)](https://github.com/shinesolutions/aem-aws-stack-builder/actions?query=workflow%3ACI)\n[![Known Vulnerabilities](https://snyk.io/test/github/shinesolutions/aem-aws-stack-builder/badge.svg)](https://snyk.io/test/github/shinesolutions/aem-aws-stack-builder)\n\nAEM AWS Stack Builder\n---------------------\n\nA set of [Ansible](https://www.ansible.com/) playbooks for building [Adobe Experience Manager (AEM)](http://www.adobe.com/au/marketing-cloud/enterprise-content-management.html) architectures on [AWS](https://aws.amazon.com/) using CloudFormation stacks.\n\nStack Builder has been designed with a focus on modularity, allowing the separation between network and application components, while also providing a flexible way to support multiple architectures that run a combination of the following components across multiple AEM versions:\n\n* `author-primary` - contains [AEM Author](https://helpx.adobe.com/experience-manager/6-3/sites/authoring/using/author.html) running in primary mode\n* `author-standby` - contains [AEM Author](https://helpx.adobe.com/experience-manager/6-3/sites/authoring/using/author.html) running in [standby](https://helpx.adobe.com/experience-manager/6-3/sites/deploying/using/tarmk-cold-standby.html) mode\n* `publish` - contains [AEM Publish](https://helpx.adobe.com/experience-manager/6-3/sites/authoring/using/author.html)\n* `author-dispatcher` - contains [AEM Dispatcher](https://helpx.adobe.com/experience-manager/dispatcher/using/dispatcher.html) with author-dispatcher configuration, sitting in front of `author` component\n* `publish-dispatcher` - contains [AEM Dispatcher](https://helpx.adobe.com/experience-manager/dispatcher/using/dispatcher.html) with publish-dispatcher configuration, sitting in front of `publish` component\n* `orchestrator` - contains [AEM Orchestrator](https://github.com/shinesolutions/aem-orchestrator)\n* `chaos-monkey` - contains [Chaos Monkey](https://netflix.github.io/chaosmonkey/)\n* `author-publish-dispatcher` - contains AEM Author, AEM Publish, and AEM Dispatcher\n\nStack Builder currently supports the following AEM architectures:\n* Full Set ([diagram](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/architecture-full-set.png)) - includes AEM Author, Publish, and Dispatcher on separate EC2 instances with blue-green deployment, auto-recovery, auto-scaling, backup, and compaction support, suitable for all types (e.g. production, staging, testing, and development) of environments\n* Consolidated ([diagram](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/architecture-consolidated.png)) - includes AEM Author, Publish, and Dispatcher on a single EC2 instance with backup and compaction support and a much lower AWS cost footprint, suitable for testing and development environments\n\nOther than the above AEM architectures, Stack Builder also provides the following utilities:\n* Stack Manager([diagram](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/architecture-stack-manager.png)) - includes [AEM Stack Manager](https://github.com/shinesolutions/aem-stack-manager-cloud), set of AWS Lambda functions that will execute AEM functionalities via an SSM agent\n* Network - includes CloudFormation templates for creating VPC, subnets, and some sample NAT Gateway and Bastion set up\n\nLearn more about AEM AWS Stack Builder:\n\n* [Installation](https://github.com/shinesolutions/aem-aws-stack-builder#installation)\n* [Configuration](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/configuration.md)\n* [Usage](https://github.com/shinesolutions/aem-aws-stack-builder#usage)\n  * [Network](https://github.com/shinesolutions/aem-aws-stack-builder#network)\n  * [AEM Full-Set Architecture](https://github.com/shinesolutions/aem-aws-stack-builder#aem-full-set-architecture)\n  * [AEM Consolidated Architecture](https://github.com/shinesolutions/aem-aws-stack-builder#aem-consolidated-architecture)\n  * [AEM Stack Manager](https://github.com/shinesolutions/aem-aws-stack-builder#aem-stack-manager)\n* [Testing](https://github.com/shinesolutions/aem-aws-stack-builder#testing)\n* [AWS Resources](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/aws-resources.md)\n* [AWS System Tags](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/aws-system-tags.md)\n* [Customisation Points](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/customisation-points.md)\n* [Recovery](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/recovery.md)\n  * [Recovery Steps](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/recovery-steps.md)\n  * [Recovery Scenarios](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/recovery-scenarios.md)\n* [Descriptors](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/descriptors.md)\n  * [Deployment Descriptor Definition](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/descriptors-definition-deployment.md)\n  * [Package Backup Descriptor Definition](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/descriptors-definition-package-backup.md)\n  * [Content Health Check Descriptor Definition](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/descriptors-definition-content-health-check.md)\n* [Logs](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/logs.md)\n* [Communication Flow](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/communication-flow.md)\n* [Permission Types](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/permission-types.md)\n* [Snapshot Types](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/snapshot-types.md)\n* [Frequently Asked Questions](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/faq.md)\n* [Troubleshooting Guide](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/troubleshooting-guide.md)\n* [Upgrade Guide](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/upgrade-guide.md)\n* [Stacks Structure](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/stacks-structure.md)\n* [AWS Services](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/aws-services.md)\n* [Presentations](https://github.com/shinesolutions/aem-aws-stack-builder/#presentations)\n\nAEM AWS Stack Builder is part of [AEM OpenCloud](https://aemopencloud.io) platform.\n\nInstallation\n------------\n\n- Either clone AEM AWS Stack Builder `git clone https://github.com/shinesolutions/aem-aws-stack-builder.git` or download one of the [released versions](https://github.com/shinesolutions/aem-aws-stack-builder/releases)\n- Install the following required tools:\n  * [Ruby](https://www.ruby-lang.org/en/) version 2.3.0 or later\n  * [Python](https://www.python.org/downloads/) version 2.7.x\n  * [GNU Make](https://www.gnu.org/software/make/)\u003cbr/\u003e\n\n  Alternatively, you can use [AEM Platform BuildEnv](https://github.com/shinesolutions/aem-platform-buildenv) Docker container to run AEM AWS Stack Builder build targets.\n- Resolve the [Python packages](https://pip.readthedocs.io/en/1.1/requirements.html) dependencies by running `make deps`\n\nUsage\n-----\n\n- Set up the required [AWS resources](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/aws-resources.md)\n- Create [configuration file](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/configuration.md)\n- Set up the configuration files by running `make config config_path=\u003cpath/to/config/dir\u003e`\n- Download open source library artifacts and upload them to S3 by running `make library config_path=\u003cpath/to/config/dir\u003e`\n\n### Network\n\nEnsure [configuration file for network](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/configuration.md) has been set up.\n\nFrom the above base configuration, generate template network configuration file:\n\n    make generate-network-config stack_prefix=\u003cnetwork_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n\nThe above is a once off action which will create a bootstrap network configuration file at `\u003cpath/to/config/dir\u003e/network.yaml`, this will save you the trouble of manually creating a long configuration file. Alternatively, you can create the network configuration file manually.\n\nCreate VPC stack:\n\n    make create-vpc stack_prefix=\u003cnetwork_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n\nCreate network resources stack:\n\n    make create-network stack_prefix=\u003cnetwork_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n\nAlternatively, if you don't have the permission to create VPC and/or network resources, you can create a network-exports stack that contains the details of your subnets:\n\n    make create-network-exports stack_prefix=\u003cnetwork_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n\n### AEM Stack Manager\n\n\u003cimg width=\"600\" alt=\"AEM Stack Manager Diagram\" src=\"https://raw.githubusercontent.com/shinesolutions/aem-aws-stack-builder/master/docs/architecture-stack-manager.png\"/\u003e\n\nEnsure [configuration file for AEM Stack Manager](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/configuration.md) has been set up.\n\nCreate AEM Stack Manager stacks:\n\n    make create-stack-manager stack_prefix=\u003cstack_manager_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n\n### AEM Full-Set Architecture\n\n\u003cimg width=\"800\" alt=\"AEM Full-Set Architecture Diagram\" src=\"https://raw.githubusercontent.com/shinesolutions/aem-aws-stack-builder/master/docs/architecture-full-set.png\"/\u003e\n\nEnsure [configuration file for AEM Full-Set architecture](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/configuration.md) has been set up.\n\nThe simplest way to create this AEM architecture is by standing up both full set prerequisites and main stacks in one go:\n\n    make create-full-set stack_prefix=\u003cfullset_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n\nHowever, it is also possible to separate the prerequisites from the main stacks. A use case scenario for this set up is when you want to keep the prerequisites stack around while creating/deleting the main stack within an environment, this allows you to cut some cost and to speed up environment standing up time from the second time onward.\n\nCreate prerequisites stack which contains the instance profiles, security groups, and messaging SNS SQS resources:\n\n    make create-full-set-prerequisites stack_prefix=\u003cfullset_prerequisites_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n\nCreate main stack which contains EC2 and Route53 resources:\n\n    make create-full-set-main stack_prefix=\u003cfullset_main_stack_prefix\u003e prerequisites_stack_prefix=\u003cfullset_prerequisites_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n\n### AEM Consolidated Architecture\n\n\u003cimg width=\"500\" alt=\"AEM Consolidated Architecture Diagram\" src=\"https://raw.githubusercontent.com/shinesolutions/aem-aws-stack-builder/master/docs/architecture-consolidated.png\"/\u003e\n\nEnsure [configuration file for AEM Consolidated architecture](https://github.com/shinesolutions/aem-aws-stack-builder/blob/master/docs/configuration.md) has been set up.\n\nThe simplest way to create this AEM architecture is by standing up both full set prerequisites and main stacks in one go:\n\n    make create-consolidated stack_prefix=\u003cconsolidated_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n\nIt is also possible to separate the prerequisites from the main stacks. A use case scenario for this set up is when you want to reuse the same prerequisites stack for multiple main stacks. Please note that having a one to many mapping between prerequisites stack to multiple main stacks is only applicable for development environments, and not for production.\n\nCreate prerequisites stack which contains the instance profiles and security groups:\n\n    make create-consolidated-prerequisites stack_prefix=\u003cconsolidated_prerequisites_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n\nCreate main stack which contains EC2 and Route53 resources:\n\n    make create-consolidated-main stack_prefix=\u003cconsolidated_main_stack_prefix\u003e prerequisites_stack_prefix=\u003cconsolidated_prerequisites_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e\n    \n### Switch DNS\n\nYou can point a DNS record to an AEM Full-Set or AEM Consolidated architecture:\n\n    make switch-dns-full-set stack_prefix=\u003cfull_set_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e publish_dispatcher_hosted_zone=\u003cpublish_dispatcher_hosted_zone_name\u003e publish_dispatcher_record_set=\u003cpublish_dispatcher_record_name\u003e author_dispatcher_hosted_zone=\u003cauthor_dispatcher_hosted_zone_name\u003e  author_dispatcher_record_set=\u003cauthor_dispatcher_record_name\u003e\n\n    make switch-dns-consolidated stack_prefix=\u003cconsolidated_stack_prefix\u003e config_path=\u003cpath/to/config/dir\u003e author_publish_dispatcher_hosted_zone=\u003cauthor_publish_dispatcher_hosted_zone\u003e author_publish_dispatcher_record_set=\u003cauthor_publish_dispatcher_record_set\u003e\n\n\nTesting\n-------\n\n### Testing with remote dependencies\n\nYou can run integration test for creating, testing, and deleting the AEM Stack Manager, AEM Consolidated, AEM Full-Set environments using the command `make test-integration-\u003caem_version\u003e-\u003cos_type\u003e test_id=\u003csometestid\u003e`, which downloads the dependencies from the Internet.\n\n### Testing with local dependencies\n\nIf you're working on the dependencies of AEM AWS Stack Builder and would like to test them as part of environment creation before pushing the changes upstream, you need to:\n\n- Clone the dependency repos [AEM AWS Stack Provisioner](https://github.com/shinesolutions/aem-aws-stack-provisioner), [Puppet AEM Resources](https://github.com/shinesolutions/puppet-aem-resources), [Puppet AEM Curator](https://github.com/shinesolutions/puppet-aem-curator), [Puppet AEM Orchestrator](https://github.com/shinesolutions/puppet-aem-orchestrator), [Puppet SimianArmy](https://github.com/shinesolutions/puppet-simianarmy), [AEM Hello World Custom Stack Provisioner](https://github.com/shinesolutions/aem-helloworld-custom-stack-provisioner), [AEM Hello World Config](https://github.com/shinesolutions/aem-helloworld-config) at the same directory level as AEM AWS Stack Builder\n- Make your code changes against those dependency repos\n- Run `make test-integration-local-\u003caem_version\u003e-\u003cos_type\u003e test_id=\u003csometestid\u003e` for integration testing using local dependencies, which copies those local dependency repos to your local AEM AWS Stack Provisioner, packages it and versioned with your `test_id`, uploads to S3, and uses them as part of the test\n\nPresentations\n-------------\n\n* [AEM OpenCloud](https://www.slideshare.net/cliffano/aem-opencloud)\n* [AEM OpenCloud - What's New Since 2.0.0](https://www.slideshare.net/cliffano/aem-opencloud-whats-new-since-200)\n* [AEM Open Cloud - The First Two Years](https://www.slideshare.net/cliffano/aem-open-cloud-the-first-two-years)\n* [Open Source AEM Platform: A Short Intro](https://www.slideshare.net/cliffano/open-source-aem-platform-a-short-intro-89967729)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinesolutions%2Faem-aws-stack-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshinesolutions%2Faem-aws-stack-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinesolutions%2Faem-aws-stack-builder/lists"}