Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Deploying Scalable Services with IaC

Introduction

This repository contains code used at the 2019/08/14 event at Inclusive Tech Lab to introduce the concept of Infrastructure as Code (IaC). True to fashion, the code is versioned the same way that any other software project would be, and more so is licensed under an open-source license.

Since the code is a snapshot of what was presented at the event, contributions to this repository are not accepted - feel free to fork and continue development!

About the event

What will we do?

We will learn about best practices for creating and scaling born-in-the-cloud applications, using a simple blog as an example. This is not your typical "fire up an EC2 instance and install WordPress" workshop! We'll deploy WordPress, but will leverage containers and managed services within AWS, and will show how to scale the system up when it's under pressure.

What tools and concepts will we learn about?

  • Containers - we'll deploy WordPress from the community Docker image, with some of our own tweaks made.
  • Managed services - we'll make AWS do the heavy lifting for our database using Amazon RDS.
  • Repeatability - we'll use two popular tools in the Hashicorp stack, Packer and Terraform, to automate the setup of our environment.
  • Horizontal scalability - we'll make our blog horizontally scalable in the face of load using AWS Autoscaling, Elastic Load Balancing, and Route 53.

Agenda

  1. We'll use Terraform to stamp out our basic AWS environment: a VPC, some subnets, and some routing rules.
  2. We'll evolve our Terraform environment to bootstrap our RDS database.
  3. We'll use Docker to make an image that can talk to our database, and run it locally.
  4. We'll use Packer to deploy that image into an AMI, so that we can repeatably launch new instances from it.
  5. We'll evolve our Terraform environment again, this time to create an autoscaling group, a load balancer, and a DNS name for our blog.
  6. We'll simulate load on our blog, and scale it up in response.
  7. Finally, we'll destroy our entire environment, to prevent accruing unneeded cost.

Format of the subdirectories

Each topic is presented inside a subdirectory, and is a separately-consumable entity. Included is an example of how to run the code, a discussion on what the code does, and a discussion on what was left out (to make the demo easily consumable) that should be considered in a system that scales to hundreds or thousands of nodes.

About

Code used at the 2019/08/14 Inclusive Tech Lab event to introduce the concept of Infrastructure as Code (IaC).

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Deploying Scalable Services with IaC

Introduction

This repository contains code used at the 2019/08/14 event at Inclusive Tech Lab to introduce the concept of Infrastructure as Code (IaC). True to fashion, the code is versioned the same way that any other software project would be, and more so is licensed under an open-source license.

Since the code is a snapshot of what was presented at the event, contributions to this repository are not accepted - feel free to fork and continue development!

About the event

What will we do?

We will learn about best practices for creating and scaling born-in-the-cloud applications, using a simple blog as an example. This is not your typical "fire up an EC2 instance and install WordPress" workshop! We'll deploy WordPress, but will leverage containers and managed services within AWS, and will show how to scale the system up when it's under pressure.

What tools and concepts will we learn about?

  • Containers - we'll deploy WordPress from the community Docker image, with some of our own tweaks made.
  • Managed services - we'll make AWS do the heavy lifting for our database using Amazon RDS.
  • Repeatability - we'll use two popular tools in the Hashicorp stack, Packer and Terraform, to automate the setup of our environment.
  • Horizontal scalability - we'll make our blog horizontally scalable in the face of load using AWS Autoscaling, Elastic Load Balancing, and Route 53.

Agenda

  1. We'll use Terraform to stamp out our basic AWS environment: a VPC, some subnets, and some routing rules.
  2. We'll evolve our Terraform environment to bootstrap our RDS database.
  3. We'll use Docker to make an image that can talk to our database, and run it locally.
  4. We'll use Packer to deploy that image into an AMI, so that we can repeatably launch new instances from it.
  5. We'll evolve our Terraform environment again, this time to create an autoscaling group, a load balancer, and a DNS name for our blog.
  6. We'll simulate load on our blog, and scale it up in response.
  7. Finally, we'll destroy our entire environment, to prevent accruing unneeded cost.

Format of the subdirectories

Each topic is presented inside a subdirectory, and is a separately-consumable entity. Included is an example of how to run the code, a discussion on what the code does, and a discussion on what was left out (to make the demo easily consumable) that should be considered in a system that scales to hundreds or thousands of nodes.

About

Code used at the 2019/08/14 Inclusive Tech Lab event to introduce the concept of Infrastructure as Code (IaC).

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Deploying Scalable Services with IaC

Introduction

This repository contains code used at the 2019/08/14 event at Inclusive Tech Lab to introduce the concept of Infrastructure as Code (IaC). True to fashion, the code is versioned the same way that any other software project would be, and more so is licensed under an open-source license.

Since the code is a snapshot of what was presented at the event, contributions to this repository are not accepted - feel free to fork and continue development!

About the event

What will we do?

We will learn about best practices for creating and scaling born-in-the-cloud applications, using a simple blog as an example. This is not your typical "fire up an EC2 instance and install WordPress" workshop! We'll deploy WordPress, but will leverage containers and managed services within AWS, and will show how to scale the system up when it's under pressure.

What tools and concepts will we learn about?

  • Containers - we'll deploy WordPress from the community Docker image, with some of our own tweaks made.
  • Managed services - we'll make AWS do the heavy lifting for our database using Amazon RDS.
  • Repeatability - we'll use two popular tools in the Hashicorp stack, Packer and Terraform, to automate the setup of our environment.
  • Horizontal scalability - we'll make our blog horizontally scalable in the face of load using AWS Autoscaling, Elastic Load Balancing, and Route 53.

Agenda

  1. We'll use Terraform to stamp out our basic AWS environment: a VPC, some subnets, and some routing rules.
  2. We'll evolve our Terraform environment to bootstrap our RDS database.
  3. We'll use Docker to make an image that can talk to our database, and run it locally.
  4. We'll use Packer to deploy that image into an AMI, so that we can repeatably launch new instances from it.
  5. We'll evolve our Terraform environment again, this time to create an autoscaling group, a load balancer, and a DNS name for our blog.
  6. We'll simulate load on our blog, and scale it up in response.
  7. Finally, we'll destroy our entire environment, to prevent accruing unneeded cost.

Format of the subdirectories

Each topic is presented inside a subdirectory, and is a separately-consumable entity. Included is an example of how to run the code, a discussion on what the code does, and a discussion on what was left out (to make the demo easily consumable) that should be considered in a system that scales to hundreds or thousands of nodes.

About

Code used at the 2019/08/14 Inclusive Tech Lab event to introduce the concept of Infrastructure as Code (IaC).

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Deploying Scalable Services with IaC

Introduction

This repository contains code used at the 2019/08/14 event at Inclusive Tech Lab to introduce the concept of Infrastructure as Code (IaC). True to fashion, the code is versioned the same way that any other software project would be, and more so is licensed under an open-source license.

Since the code is a snapshot of what was presented at the event, contributions to this repository are not accepted - feel free to fork and continue development!

About the event

What will we do?

We will learn about best practices for creating and scaling born-in-the-cloud applications, using a simple blog as an example. This is not your typical "fire up an EC2 instance and install WordPress" workshop! We'll deploy WordPress, but will leverage containers and managed services within AWS, and will show how to scale the system up when it's under pressure.

What tools and concepts will we learn about?

  • Containers - we'll deploy WordPress from the community Docker image, with some of our own tweaks made.
  • Managed services - we'll make AWS do the heavy lifting for our database using Amazon RDS.
  • Repeatability - we'll use two popular tools in the Hashicorp stack, Packer and Terraform, to automate the setup of our environment.
  • Horizontal scalability - we'll make our blog horizontally scalable in the face of load using AWS Autoscaling, Elastic Load Balancing, and Route 53.

Agenda

  1. We'll use Terraform to stamp out our basic AWS environment: a VPC, some subnets, and some routing rules.
  2. We'll evolve our Terraform environment to bootstrap our RDS database.
  3. We'll use Docker to make an image that can talk to our database, and run it locally.
  4. We'll use Packer to deploy that image into an AMI, so that we can repeatably launch new instances from it.
  5. We'll evolve our Terraform environment again, this time to create an autoscaling group, a load balancer, and a DNS name for our blog.
  6. We'll simulate load on our blog, and scale it up in response.
  7. Finally, we'll destroy our entire environment, to prevent accruing unneeded cost.

Format of the subdirectories

Each topic is presented inside a subdirectory, and is a separately-consumable entity. Included is an example of how to run the code, a discussion on what the code does, and a discussion on what was left out (to make the demo easily consumable) that should be considered in a system that scales to hundreds or thousands of nodes.

About

Code used at the 2019/08/14 Inclusive Tech Lab event to introduce the concept of Infrastructure as Code (IaC).

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Deploying Scalable Services with IaC

Introduction

This repository contains code used at the 2019/08/14 event at Inclusive Tech Lab to introduce the concept of Infrastructure as Code (IaC). True to fashion, the code is versioned the same way that any other software project would be, and more so is licensed under an open-source license.

Since the code is a snapshot of what was presented at the event, contributions to this repository are not accepted - feel free to fork and continue development!

About the event

What will we do?

We will learn about best practices for creating and scaling born-in-the-cloud applications, using a simple blog as an example. This is not your typical "fire up an EC2 instance and install WordPress" workshop! We'll deploy WordPress, but will leverage containers and managed services within AWS, and will show how to scale the system up when it's under pressure.

What tools and concepts will we learn about?

  • Containers - we'll deploy WordPress from the community Docker image, with some of our own tweaks made.
  • Managed services - we'll make AWS do the heavy lifting for our database using Amazon RDS.
  • Repeatability - we'll use two popular tools in the Hashicorp stack, Packer and Terraform, to automate the setup of our environment.
  • Horizontal scalability - we'll make our blog horizontally scalable in the face of load using AWS Autoscaling, Elastic Load Balancing, and Route 53.

Agenda

  1. We'll use Terraform to stamp out our basic AWS environment: a VPC, some subnets, and some routing rules.
  2. We'll evolve our Terraform environment to bootstrap our RDS database.
  3. We'll use Docker to make an image that can talk to our database, and run it locally.
  4. We'll use Packer to deploy that image into an AMI, so that we can repeatably launch new instances from it.
  5. We'll evolve our Terraform environment again, this time to create an autoscaling group, a load balancer, and a DNS name for our blog.
  6. We'll simulate load on our blog, and scale it up in response.
  7. Finally, we'll destroy our entire environment, to prevent accruing unneeded cost.

Format of the subdirectories

Each topic is presented inside a subdirectory, and is a separately-consumable entity. Included is an example of how to run the code, a discussion on what the code does, and a discussion on what was left out (to make the demo easily consumable) that should be considered in a system that scales to hundreds or thousands of nodes.

About

Code used at the 2019/08/14 Inclusive Tech Lab event to introduce the concept of Infrastructure as Code (IaC).

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Deploying Scalable Services with IaC

Introduction

This repository contains code used at the 2019/08/14 event at Inclusive Tech Lab to introduce the concept of Infrastructure as Code (IaC). True to fashion, the code is versioned the same way that any other software project would be, and more so is licensed under an open-source license.

Since the code is a snapshot of what was presented at the event, contributions to this repository are not accepted - feel free to fork and continue development!

About the event

What will we do?

We will learn about best practices for creating and scaling born-in-the-cloud applications, using a simple blog as an example. This is not your typical "fire up an EC2 instance and install WordPress" workshop! We'll deploy WordPress, but will leverage containers and managed services within AWS, and will show how to scale the system up when it's under pressure.

What tools and concepts will we learn about?

  • Containers - we'll deploy WordPress from the community Docker image, with some of our own tweaks made.
  • Managed services - we'll make AWS do the heavy lifting for our database using Amazon RDS.
  • Repeatability - we'll use two popular tools in the Hashicorp stack, Packer and Terraform, to automate the setup of our environment.
  • Horizontal scalability - we'll make our blog horizontally scalable in the face of load using AWS Autoscaling, Elastic Load Balancing, and Route 53.

Agenda

  1. We'll use Terraform to stamp out our basic AWS environment: a VPC, some subnets, and some routing rules.
  2. We'll evolve our Terraform environment to bootstrap our RDS database.
  3. We'll use Docker to make an image that can talk to our database, and run it locally.
  4. We'll use Packer to deploy that image into an AMI, so that we can repeatably launch new instances from it.
  5. We'll evolve our Terraform environment again, this time to create an autoscaling group, a load balancer, and a DNS name for our blog.
  6. We'll simulate load on our blog, and scale it up in response.
  7. Finally, we'll destroy our entire environment, to prevent accruing unneeded cost.

Format of the subdirectories

Each topic is presented inside a subdirectory, and is a separately-consumable entity. Included is an example of how to run the code, a discussion on what the code does, and a discussion on what was left out (to make the demo easily consumable) that should be considered in a system that scales to hundreds or thousands of nodes.

About

Code used at the 2019/08/14 Inclusive Tech Lab event to introduce the concept of Infrastructure as Code (IaC).

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Deploying Scalable Services with IaC

Introduction

This repository contains code used at the 2019/08/14 event at Inclusive Tech Lab to introduce the concept of Infrastructure as Code (IaC). True to fashion, the code is versioned the same way that any other software project would be, and more so is licensed under an open-source license.

Since the code is a snapshot of what was presented at the event, contributions to this repository are not accepted - feel free to fork and continue development!

About the event

What will we do?

We will learn about best practices for creating and scaling born-in-the-cloud applications, using a simple blog as an example. This is not your typical "fire up an EC2 instance and install WordPress" workshop! We'll deploy WordPress, but will leverage containers and managed services within AWS, and will show how to scale the system up when it's under pressure.

What tools and concepts will we learn about?

  • Containers - we'll deploy WordPress from the community Docker image, with some of our own tweaks made.
  • Managed services - we'll make AWS do the heavy lifting for our database using Amazon RDS.
  • Repeatability - we'll use two popular tools in the Hashicorp stack, Packer and Terraform, to automate the setup of our environment.
  • Horizontal scalability - we'll make our blog horizontally scalable in the face of load using AWS Autoscaling, Elastic Load Balancing, and Route 53.

Agenda

  1. We'll use Terraform to stamp out our basic AWS environment: a VPC, some subnets, and some routing rules.
  2. We'll evolve our Terraform environment to bootstrap our RDS database.
  3. We'll use Docker to make an image that can talk to our database, and run it locally.
  4. We'll use Packer to deploy that image into an AMI, so that we can repeatably launch new instances from it.
  5. We'll evolve our Terraform environment again, this time to create an autoscaling group, a load balancer, and a DNS name for our blog.
  6. We'll simulate load on our blog, and scale it up in response.
  7. Finally, we'll destroy our entire environment, to prevent accruing unneeded cost.

Format of the subdirectories

Each topic is presented inside a subdirectory, and is a separately-consumable entity. Included is an example of how to run the code, a discussion on what the code does, and a discussion on what was left out (to make the demo easily consumable) that should be considered in a system that scales to hundreds or thousands of nodes.

About

Code used at the 2019/08/14 Inclusive Tech Lab event to introduce the concept of Infrastructure as Code (IaC).

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Deploying Scalable Services with IaC

Introduction

This repository contains code used at the 2019/08/14 event at Inclusive Tech Lab to introduce the concept of Infrastructure as Code (IaC). True to fashion, the code is versioned the same way that any other software project would be, and more so is licensed under an open-source license.

Since the code is a snapshot of what was presented at the event, contributions to this repository are not accepted - feel free to fork and continue development!

About the event

What will we do?

We will learn about best practices for creating and scaling born-in-the-cloud applications, using a simple blog as an example. This is not your typical "fire up an EC2 instance and install WordPress" workshop! We'll deploy WordPress, but will leverage containers and managed services within AWS, and will show how to scale the system up when it's under pressure.

What tools and concepts will we learn about?

  • Containers - we'll deploy WordPress from the community Docker image, with some of our own tweaks made.
  • Managed services - we'll make AWS do the heavy lifting for our database using Amazon RDS.
  • Repeatability - we'll use two popular tools in the Hashicorp stack, Packer and Terraform, to automate the setup of our environment.
  • Horizontal scalability - we'll make our blog horizontally scalable in the face of load using AWS Autoscaling, Elastic Load Balancing, and Route 53.

Agenda

  1. We'll use Terraform to stamp out our basic AWS environment: a VPC, some subnets, and some routing rules.
  2. We'll evolve our Terraform environment to bootstrap our RDS database.
  3. We'll use Docker to make an image that can talk to our database, and run it locally.
  4. We'll use Packer to deploy that image into an AMI, so that we can repeatably launch new instances from it.
  5. We'll evolve our Terraform environment again, this time to create an autoscaling group, a load balancer, and a DNS name for our blog.
  6. We'll simulate load on our blog, and scale it up in response.
  7. Finally, we'll destroy our entire environment, to prevent accruing unneeded cost.

Format of the subdirectories

Each topic is presented inside a subdirectory, and is a separately-consumable entity. Included is an example of how to run the code, a discussion on what the code does, and a discussion on what was left out (to make the demo easily consumable) that should be considered in a system that scales to hundreds or thousands of nodes.

About

Code used at the 2019/08/14 Inclusive Tech Lab event to introduce the concept of Infrastructure as Code (IaC).

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages