-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
131 lines (111 loc) · 9.77 KB
/
Copy pathindex.html
File metadata and controls
131 lines (111 loc) · 9.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<!DOCTYPE html>
<html lang="en"><head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"><!-- Begin Jekyll SEO tag v2.6.1 -->
<title>thirstydeveloper | Infrastructure-as-Code-as-a-Team</title>
<meta name="generator" content="Jekyll v3.9.0" />
<meta property="og:title" content="thirstydeveloper" />
<meta name="author" content="Chris Kent" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Infrastructure-as-Code-as-a-Team" />
<meta property="og:description" content="Infrastructure-as-Code-as-a-Team" />
<link rel="canonical" href="https://thirstydeveloper.io/" />
<meta property="og:url" content="https://thirstydeveloper.io/" />
<meta property="og:site_name" content="thirstydeveloper" />
<script type="application/ld+json">
{"author":{"@type":"Person","name":"Chris Kent"},"headline":"thirstydeveloper","url":"https://thirstydeveloper.io/","description":"Infrastructure-as-Code-as-a-Team","@type":"WebSite","name":"thirstydeveloper","@context":"https://schema.org"}</script>
<!-- End Jekyll SEO tag -->
<link rel="stylesheet" href="/assets/main.css"><link type="application/atom+xml" rel="alternate" href="https://thirstydeveloper.io/feed.xml" title="thirstydeveloper" /><script>
if(!(window.doNotTrack === "1" || navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1")) {
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-108404407-1', 'auto');
ga('send', 'pageview');
}
</script>
</head>
<body><header class="site-header" role="banner">
<div class="wrapper"><a class="site-title" rel="author" href="/">thirstydeveloper</a><nav class="site-nav">
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger">
<span class="menu-icon">
<svg viewBox="0 0 18 15" width="18px" height="15px">
<path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
</svg>
</span>
</label>
<div class="trigger"><a class="page-link" href="/about/">About</a><a class="page-link" href="/series/tf-skeleton.html">Terraform Skeleton</a></div>
</nav></div>
</header>
<main class="page-content" aria-label="Content">
<div class="wrapper">
<div class="home">
<h2 class="post-list-heading">Posts</h2>
<ul class="post-list"><li><span class="post-meta">Feb 25, 2021</span>
<h3>
<a class="post-link" href="/tf-skeleton/2021/02/25/part-6-protecting-state.html">
Terraform Skeleton Part 6: Protecting State
</a>
</h3><p><a href="/tf-skeleton/2021/02/17/part-5-cfn-terraform-state.html">Part 5</a> moved Terraform’s operational infrastructure <a href="https://github.com/thirstydeveloper/terraform-terragrunt-skeleton/compare/release/1.3...release/1.4#diff-cc93827adede14cb1e69dde0ed0769a47014bbb00f7ec444c61b927f3901c35a">into a CloudFormation stack</a> so that Terragrunt no longer manages the state bucket, lock table, and log bucket. Doing so offers us the opportunity to protect these resources in ways not supported by Terragrunt. We will capitalize on that opportunity today.</p>
</li><li><span class="post-meta">Feb 17, 2021</span>
<h3>
<a class="post-link" href="/tf-skeleton/2021/02/17/part-5-cfn-terraform-state.html">
Terraform Skeleton Part 5: Remote State with CloudFormation
</a>
</h3><p><a href="/tf-skeleton/2021/01/28/part-3-aws-backend.html">Part 3</a> showed us Terraform requires some infrastructure itself to store remote state and discussed some <a href="/tf-skeleton/2021/01/28/part-3-aws-backend.html#limitations">limitations</a> of using Terragrunt to manage the creation of that infrastructure. In <a href="/tf-skeleton/2021/02/10/part-4-backend-role.html">part 4</a>, we introduced more operational infrastructure for Terraform and <a href="/tf-skeleton/2021/02/10/part-4-backend-role.html#admin-account-cloudformation-template">began managing that infrastructure with CloudFormation</a>.</p>
</li><li><span class="post-meta">Feb 10, 2021</span>
<h3>
<a class="post-link" href="/tf-skeleton/2021/02/10/part-4-backend-role.html">
Terraform Skeleton Part 4: Backend Role
</a>
</h3><p>The <a href="/tf-skeleton/2021/01/28/part-3-aws-backend.html">previous entry</a> enhanced the <a href="/series/tf-skeleton.html">terraform skeleton</a> with remote state storage using AWS S3 and DynamoDB. Access to the state was granted based on whatever AWS credentials were configured in the shell at the time terraform was executed.</p>
</li><li><span class="post-meta">Jan 28, 2021</span>
<h3>
<a class="post-link" href="/tf-skeleton/2021/01/28/part-3-aws-backend.html">
Terraform Skeleton Part 3: AWS Backend
</a>
</h3><p>Terraform uses <a href="https://www.terraform.io/docs/state/index.html">state</a> files to track the resources it creates back to resource definitions in your <code class="language-plaintext highlighter-rouge">*.tf</code> files. Each deployment has its own state. State is stored according to the <a href="https://www.terraform.io/docs/configuration/blocks/backends/index.html">backend</a> configured for the deployment. Terraform uses a <a href="https://www.terraform.io/docs/backends/types/local.html">local backend</a> for storing state on the local filesystem by default, which is what we’ve been using for <a href="/2021/01/17/part-1-organizing-terragrunt.html">part 1</a> and <a href="/tf-skeleton/2021/01/23/part-2-variables.html">part 2</a> of the <a href="/series/tf-skeleton.html">terraform skeleton series</a>.<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote">1</a></sup> This works fine for a simple demonstration but is insufficient for production use because:</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p>Terragrunt stores local state in a <code class="language-plaintext highlighter-rouge">terraform.tfstate</code> file located underneath the <code class="language-plaintext highlighter-rouge">.terragrunt-cache</code> directory it creates within our deployment directory. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>
</li><li><span class="post-meta">Jan 23, 2021</span>
<h3>
<a class="post-link" href="/tf-skeleton/2021/01/23/part-2-variables.html">
Terraform Skeleton Part 2: Variables
</a>
</h3><p>In <a href="/2021/01/17/part-1-organizing-terragrunt.html">part 1</a> of the <a href="/series/tf-skeleton.html">terraform skeleton series</a>, we set up a <a href="https://github.com/thirstydeveloper/terraform-terragrunt-skeleton/tree/release/1.0">terraform repository</a> that allows the team to apply infrastructure at any level: from individual stacks to entire environments. We build on that foundation in this post, adding a variable hierarchy that similarly allows definition and overriding of variables at each level of the infrastructure.</p>
</li><li><span class="post-meta">Jan 17, 2021</span>
<h3>
<a class="post-link" href="/2021/01/17/part-1-organizing-terragrunt.html">
Terraform Skeleton Part 1: Organizing Terragrunt
</a>
</h3><p><a href="https://www.terraform.io/">Terraform</a> is my go-to infrastructure definition tool. I love that it enables declarative management of different Cloud, PaaS, and SaaS platforms with its unified HCL language and provider model. At times, however, I’ve wished it was easier to start a project off on the right foot.</p>
</li></ul>
<p class="rss-subscribe">subscribe <a href="/feed.xml">via RSS</a></p></div>
</div>
</main><footer class="site-footer h-card">
<data class="u-url" href="/"></data>
<div class="wrapper">
<h2 class="footer-heading">thirstydeveloper</h2>
<div class="footer-col-wrapper">
<div class="footer-col footer-col-1">
<ul class="contact-list">
<li class="p-name">Chris Kent</li><li><a class="u-email" href="mailto:thirstydeveloper@gmail.com">thirstydeveloper@gmail.com</a></li></ul>
</div>
<div class="footer-col footer-col-2"><ul class="social-media-list"><li><a href="https://github.com/thirstydeveloper"><svg class="svg-icon"><use xlink:href="/assets/minima-social-icons.svg#github"></use></svg> <span class="username">thirstydeveloper</span></a></li><li><a href="https://www.linkedin.com/in/thirstydeveloper"><svg class="svg-icon"><use xlink:href="/assets/minima-social-icons.svg#linkedin"></use></svg> <span class="username">thirstydeveloper</span></a></li><li><a href="https://www.twitter.com/thirstydev"><svg class="svg-icon"><use xlink:href="/assets/minima-social-icons.svg#twitter"></use></svg> <span class="username">thirstydev</span></a></li><li><a href="/feed.xml"><svg class="svg-icon"><use xlink:href="/assets/minima-social-icons.svg#rss"></use></svg> <span>rss</span></a></li></ul>
</div>
<div class="footer-col footer-col-3">
<p>© 2022 Chris Kent. All Rights Reserved. </p>
</div>
</div>
</div>
</footer>
</body>
</html>