Terraform Study #1
โํ ๋ผํผ์ผ๋ก ์์ํ๋ IaCโ ์ฑ ์ผ๋ก ์งํํ๋ Terraform ์คํฐ๋[T101] 1์ฃผ์ฐจ ์ ๋ฆฌ๋ด์ฉ์ ๋๋ค.
1์ฃผ์ฐจ
ํ์์ ํ ๋ผํผ์ ๊ด์ฌ์ด ๋ง์, ์๊ฒฉ์ฆ๋ ์ทจ๋ํ๊ณ ๊ณต๋ถ๋ฅผ ํ๋ค. ๊ณต๋ถ๋ฅผ ํ์ง๋ง, ์์ง ์ด๊ฒ์ ๊ฒ ํท๊ฐ๋ฆฌ๋ ๊ฒ ๋ง๋ค. ์ด๋ฅผ ๊ตฌ์ฒดํ์ํค๊ณ , ์ค๋ฌด์ ๋ํ ์กฐ์ธ์ ๋ค์ ๊ฒธ ์คํฐ๋์ ์ฐธ๊ฐํ๊ฒ ๋์๋ค. ์คํฐ๋๋ CloudNet์์ ์ฃผ๊ดํ๊ณ ์ ํ์ฑ๋๊ณผ ์ค์์จ๋์ด ์งํํด์ฃผ์ ๋ค.
1์ฃผ์ฐจ์์๋ ํ ๋ผํผ์ ๋ํด ์์๋ณด๊ณ , ์คํ ํ๊ฒฝ์ ์ธํ ํ๋ค. ์ดํ EC2๋ฅผ ๋ฐฐํฌํด๋ณด๋ฉด์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ๋ช ๋ น์ด์ ๋ํด ํ์ตํ๋ค.
ํ ๋ผํผ ์ ๊ณต์ ํ
On-premise : Terraform์ด๋ผ ๋ถ๋ฆฌ๋ ํํ๋ก, ์ฌ์ฉ์์ ์ปดํจํ ํ๊ฒฝ์ ์คํ์์ค ๋ฐ์ด๋๋ฆฌํด์ธ ํ ๋ผํผ์ ํตํด ์ฌ์ฉ
[๋ผ์ด์ ์ค๋ฅผ ๋ณ๊ฒฝ] ์คํ์์ค โ ์ปค๋ฎค๋ํฐ ์๋์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
- Hosted SaaS : Terraform Cloud๋ก ๋ถ๋ฆฌ๋ SaaS๋ก ์ ๊ณต๋๋ ๊ตฌ์ฑ ํ๊ฒฝ์ผ๋ก ํ์์ฝํ๊ฐ ๊ด๋ฆฌํ๋ ์๋ฒ ํ๊ฒฝ์ด ์ ๊ณต
- Private Install : Terraform Enterprise๋ก ๋ถ๋ฆฌ๋ ์๋ฒ ์ค์นํ ๊ตฌ์ฑ ํ๊ฒฝ์ผ๋ก, ๊ธฐ์ ์ ์ฌ๋ด ์ ์ฑ ์ ๋ฐ๋ผ ํ๋ก๋น์ ๋ ๊ด๋ฆฌ๊ฐ ์ธ๋ถ ๋คํธ์ํฌ์ ๊ฒฉ๋ฆฌ - ๋งํฌ
2,3 ๋ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก GUI๊ฐ ์ ๊ณต๋๋ฉฐ Terraform Cloud๋ Free ํฐ์ด๊ฐ ์๋ค.
ํ ๋ผํผ ํด๋ผ์ฐ๋ ๊ฐ๊ฒฉ์ ์ฑ ๋น๊ต
- Free : ๋ฆฌ์์ค 500๊ฐ ๊น์ง ๋ฌด๋ฃ โ ์ปค๋ฎค๋ํฐ ๋ฒ์
- Standard : Free + ์ํฌํ๋ก์ฐ ๊ธฐ๋ฅ ์ถ๊ฐ + ๋์์คํ(Concurrency ๊ฐ์ 3๊ฐ)
AWS ์ต์ (์ค์ต ํ๊ฒฝ ๊ตฌ์ฑ)
AWS_PAGER ์ต์ ์ ๊ฑฐ
- ํ๋์ ํ์ด์ง์ฒ๋ผ, ์๋ํจ โ ๋๊ฐ๋ ค๋ฉด :q ์ต์ ์ ์ ๋ ฅํด์ผ ํ๊ณ , ๊ธฐํ ์ต์ ๋ ์ธ ์ ์๋๋ค.
ํ์ด์ ๋ฅผ ๋นํ์ฑํํ๋ ์ด์ ๋ ์๋์ ๊ฐ๋ค.
- Scripting and Automation: AWS CLI ๋ช ๋ น์ด์ ์ถ๋ ฅ์ ์คํฌ๋ฆฝํธ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ ํ์ฑํด์ผ ํ ๊ฒฝ์ฐ, ํ์ด์ ๊ฐ ๋ถํ์ํ ์ค๊ฐ ๋จ๊ณ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- Non-Interactive Environments: CI/CD ํ์ดํ๋ผ์ธ์ด๋ ๋ฐฐ์น ์์ ๊ณผ ๊ฐ์ ๋น๋ํํ(non-interactive) ํ๊ฒฝ์์๋ ํ์ด์ ๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
export AWS_PAGER=""
์ ์ฉํ๋ฉด, PAGER๊ฐ ๋นํ์ฑํ๋๋ค.
AWS ๊ณ์ ์ ํ
์ฌ๋ฌ AWS ๊ณ์ ์ ์ฐ๋ ๊ฒฝ์ฐ, Profile์ ํ๊ฒฝ๋ณ์๋ก ์ ํํ ์ ์๋ค.
export AWS_PROFILE="study"
Terraform์์๋ ๋ณ๋์ provider block์์ ์ธํ ํด์ค์ผํ๋ค.
1
2
3
4
provider "aws" {
profile = "eks"
region = "ap-northeast-2"
}
์ถ๊ฐ) vscode aws toolkit ์ค์ ์ผ๋ก, ํ์ฌ์ profile์ ํ์ธํ ์ ์๋ค. ์ฌ๋ฌ AWS ๊ณ์ ์ ์ธ ๊ฒฝ์ฐ, ํธ๋ฆฌํ๋ค.
HCL
HCL์ JSON์ ๋ณธ๋ฐ ๋ง๋ ์ธ์ด์ด๋ฉฐ, JSON๋ณด๋ค ์ฌ๋ ์นํ์ ์ธ ์ธ์ด์ด๋ค.
- ์ธํ๋ผ๊ฐ ์ฝ๋๋ก ํํ๋๊ณ , ์ด ์ฝ๋๋ ๊ณง ์ธํ๋ผ์ด๊ธฐ ๋๋ฌธ์ ์ ์ธ์ (declarative) ํน์ฑ์ ๊ฐ๊ฒ ๋๊ณ ํ๋ง ์์ ํ Turing-complete ์ธ์ด์ ํน์ฑ์ ๊ฐ๋๋ค. [์ฐธ๊ณ : ํ๋ง์์ ]
- ์ฆ, ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์กฐ๊ฑด๋ฌธ ์ฒ๋ฆฌ ๊ฐ์ ๋์์ด ๊ฐ๋ฅํ๋ค. ์๋ํ์ ๋๋ถ์ด, ์ฝ๊ฒ ๋ฒ์ ๋ํด ํ์คํ ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ํจ๊ป ์์ ํ ์ ์๋ ๊ธฐ๋ฐ์ ์ ๊ณต. โ ํ์คํ ์ฐจ์ด์
Terraform Command ์ต์
validate
-no-color
: ๋๋ถ๋ถ์ ๋ช ๋ น๊ณผ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅ, ๋ก์ปฌ์ด ์๋ ์ธ๋ถ ์คํ ํ๊ฒฝ(์ ํจ์ค, Terraform Cloud, Github Action ๋ฑ)์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์์ ํ๊ธฐ ๋ฌธ์๊ฐ ํ๊ธฐ ๋ ์ ์๋ค. ์ด ๊ฒฝ์ฐ -no-color ์ต์ ์ผ๋ก ์์ ํ๊ธฐ ๋ฌธ์ ์์ด ์ถ๋ ฅํจ. [์ฐธ๊ณ ]
plan
-detailed-exitcode
: plan ์ถ๊ฐ ์ต์ ์ผ๋ก, ํ์ดํ๋ผ์ธ ์ค๊ณ์์ ํ์ฉ ๊ฐ๋ฅ, exitcode๊ฐ ํ๊ฒฝ ๋ณ์๋ก ๊ตฌ์ฑ๋จ
apply
ordestroy
-auto-approve
: ์๋ ์น์ธ ๊ธฐ๋ฅ ๋ถ์ฌ ์ต์
EC2 ๋ฐฐํฌ
์ฐ์ , ํด๋น ์ค์ต์์๋ default VPC๋ฅผ ์ฌ์ฉํ๋ค. ๋ง์ฝ ์ฌ์ฉํ๋ ๋ฆฌ์ ์ default VPC๊ฐ ์๋ค๋ฉด ์๋์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์์ฑํ๋ค.
1
2
3
4
5
6
7
8
9
10
$ aws ec2 create-default-vpc
{
"Vpc": {
"CidrBlock": "172.31.0.0/16",
...
],
"IsDefault": true,
"Tags": []
}
}
EC2๋ฅผ ํ๋ก๋น์ ๋ํ๋ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋์ด๋ค. ํด๋น ์ฝ๋๋ฅผ ์คํํ๋ฉด, EC2๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ ์ ์ํ public IP๋ฅผ ๋ฐ์ ์ ์๋ค.
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
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "ami-0c9c942bd7bf113a2"
instance_type = "t2.micro"
**vpc_security_group_ids = [aws_security_group.instance.id]**
user_data = <<-EOF
#!/bin/bash
echo "Hello, T101 Study" > index.html
nohup busybox httpd -f -p 8080 &
EOF
tags = {
Name = "Single-WebSrv"
}
}
resource "aws_security_group" "instance" {
name = var.security_group_name
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
variable "security_group_name" {
description = "The name of the security group"
type = string
default = "terraform-example-instance"
}
**output** "public_ip" {
value = aws_instance.example.public_ip
description = "The public IP of the Instance"
}
1
2
3
4
5
6
7
$ tf apply
...
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Outputs:
public_ip = "54.180.106.217"
โ user_data_replace_on_change = false
์ต์
์ ์ถ๊ฐํ๋ค!
์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
resource "aws_instance" "example" {
ami = "ami-0c9c942bd7bf113a2"
...
user_data_replace_on_change = false
tags = {
Name = "Single-WebSrv"
}
}
...
resource "aws_security_group" "instance" {
name = var.security_group_name
...
# lifecycle์ ์ถ๊ฐํ๋ฉด ๋ค์ดํ์์ ์ค์ผ ์ ์๋ค.
lifecycle {
create_before_destroy = true
}
}
๋ณ๊ฒฝํ๊ธฐ ์ด์ ๊ณผ ์ดํ์ ์์ฑ๊ณผ์ ์ ๋ณด๋ฉด ๋ค๋ฅธ ๊ฒ์ ์ ์ ์๋ค. ์ด์ ์ฒ๋ผ ํ๊ดดํ๊ณ ์ฌ์์ฑ์ด ์๋, ๋ณ๊ฒฝ๋ ๊ฐ์ ์ ๋ฐ์ดํธํ๋ค.
1
2
3
4
5
6
7
8
9
# ์ด์
aws_security_group.instance: Destroying... [id=sg-03c90b3d559abb123]
aws_security_group.instance: Destruction complete after 1s
aws_security_group.instance: Creating...
aws_security_group.instance: Creation complete after 1s [id=sg-0de633908986b76ad]
# ๋ผ์ดํ์ฌ์ดํด ์ ์ฉ ํ
...
aws_security_group.instance: Modifying... [id=sg-0de633908986b76ad]
aws_security_group.instance: Modifications complete after 1s [id=sg-0de633908986b76ad]
์ฆ, โuser_data_replace_on_change = falseโ ์ต์
์ ํตํด ์ธ์คํด์ค๋ฅผ ์๋ก ์์ฑํ์ง ์๊ณ , ๊ธฐ์กด ์ธ์คํด์ค๋ฅผ ์ ์งํ๋ฉด์ ๋ณ๊ฒฝ๋ ๊ฐ์ ์
๋ฐ์ดํธํ ์ ์๋ค. ์ด ์ค์ ์ user_data
๊ฐ ๋ณ๊ฒฝ๋ ๋ EC2 ์ธ์คํด์ค๋ฅผ ์๋ก ์์ฑํ ๊ฒ์ธ์ง, ์๋๋ฉด ๊ธฐ์กด ์ธ์คํด์ค๋ฅผ ์ ์งํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ค. false
๋ ์ธ์คํด์ค๋ฅผ ์ ์งํ๋ ์ต์
์ด๋ฉฐ, ์ธ์คํด์ค๋ฅผ ์ ์งํ๋ค.
1
2
3
4
5
6
7
8
9
# ์ ์ฉ ์
aws_instance.example: Destroying... [id=i-0794bd9bb343a948b]
...
aws_instance.example: Creating...
# "user_data_replace_on_change = false" ์ ์ฉ ํ
aws_instance.example: Modifying... [id=i-0568341d533d4ca58]
aws_instance.example: Still modifying... [id=i-0568341d533d4ca58, 10s elapsed]
aws_instance.example: Still modifying... [id=i-0568341d533d4ca58, 20s elapsed]
ํ ๋ผํผ ๋ฌธ๋ฒ ์ค๋ช
Terraform ๋ธ๋ก, ์๋์ ๊ฐ์ด ๋ด์ฉ์ ์ ์ ๋ฆฌํด์ฃผ์ จ๋ค.
- ์ค๋ ์คํํ๋, 3๋ ํ์ ์คํํ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ด์ผ ํ๋ค! (Desired State + Immutable)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
terraform {
required_version = "~> 1.3.0" # ํ
๋ผํผ ๋ฒ์
required_providers { # ํ๋ก๋ฐ์ด๋ ๋ฒ์ ์ ๋์ด
random = {
version = ">= 3.0.0, < 3.1.0"
}
aws = {
version = "4.2.0"
}
}
cloud { # Cloud/Enterprise ๊ฐ์ ์๊ฒฉ ์คํ์ ์ํ ์ ๋ณด [์ฐธ๊ณ : Docs]
organization = "<MY_ORG_NAME>"
workspaces {
name = "my-first-workspace"
}
}
backend "local" { # state๋ฅผ ๋ณด๊ดํ๋ ์์น๋ฅผ ์ง์ [์ฐธ๊ณ : Docs, local, remote, s3]
path = "relative/path/to/terraform.tfstate"
}
}
- ํ
๋ผํผ 0.13 ๋ฒ์ ์ด์ ์๋ provider ๋ธ๋ก์ ํจ๊ป ๋ฒ์ ์ ๋ช
์ํ์ง๋ง ํด๋น ๋ฒ์ ์ดํ ํ๋ก๋ฐ์ด๋ ๋ฒ์ ์ terraform ๋ธ๋ก์์
required_providers
์ ์ ์
1
2
3
4
5
6
7
8
9
terraform {
cloud {
hostname = "[app.terraform.io](http://app.terraform.io/)"
organization = "my-org"
workspades = {
name = "my-app-prod"
}
}
}
Backend
ํ์
์ ์ํด์๋ s3 ๋ฑ ์๊ฒฉ์ผ๋ก ์ ์ฅํด์ ๊ด๋ฆฌํจ, ๊ธฐ๋ณธ์ ์ผ๋ก lock์ ์ง์ํ๋ค. ๋ก์ปฌ์์ ๊ฐ๋จํ๊ฒ ํ
์คํธํ ์ ์๋ ๋ฐ, ๋ก์ปฌ์์ apply
๋ช
๋ น์ด๋ฅผ ์คํํ๊ณ , ์น์ธ์ ๊ธฐ๋ค๋ฆด ๋ ls -al ๋ช
๋ น์ด๋ก ์์
๋๋ ํฐ๋ฆฌ์ ํ์ผ์ ํ์ธํ๋ฉด .terraform.tfstate.lock.info
ํ์ผ์ด ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
1
2
3
4
5
6
7
8
9
10
cat .terraform.tfstate.lock.info | jq .
{
"ID": "b4dbfee6-a28f-04da-d235-5591414dbcbc",
"Operation": "OperationTypeApply",
"Info": "",
"Who": "kane@kanes-MacBook-Pro.local",
"Version": "1.5.6",
"Created": "2023-08-27T14:07:14.110318Z",
"Path": "terraform.tfstate"
}
- ์ถ๊ฐ ์ต์
1 (์ด์ ๊ตฌ์ฑ ์ ์ง) :
-migrate-state
๋ terraform.tfstate์ ์ด์ ๊ตฌ์ฑ์์ ์ต์ ์ state ์ค๋ ์ท์ ์ฝ๊ณ ๊ธฐ๋ก๋ ์ ๋ณด๋ฅผ ์ ๊ตฌ์ฑ์ผ๋ก ์ ํํ๋ค. - ์ถ๊ฐ ์ต์
2 (์๋ก ์ด๊ธฐํ) :
-reconfigure
๋ init์ ์คํํ๊ธฐ ์ ์ terraform.tfstate ํ์ผ์ ์ญ์ ํด ํ ๋ผํผ์ ์ฒ์ ์ฌ์ฉํ ๋์ฒ๋ผ ์ด ์์ ๊ณต๊ฐ(๋๋ ํฐ๋ฆฌ)์ ์ด๊ธฐํ ํ๋ ๋์์ด๋ค.
.tfstate
Terraform์ .tfstate
ํ์ผ ๋ด์ serial
๊ฐ์ ์ํ ํ์ผ์ ๋ฒ์ ์ ๋ํ๋ด๋ฉฐ, ๋์์ฑ ์ ์ด์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ํ์ธ์๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ๊ฐ์ Terraform ๋ช
๋ น์ด ์คํ๋ ๋๋ง๋ค ์๋์ผ๋ก ์ฆ๊ฐํ์ฌ, ์ํ ํ์ผ์ ์ต์ ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํฉ๋๋ค. ๊ทธ๋ ๊ธฐ์ backup ํ์ผ์ด ํ์ฌ state ํ์ผ๋ณด๋ค serial ๋ฒํธ๊ฐ ๋ฎ๋ค.
๋์ ๊ณผ์ 1 (EC2 ์น ์๋ฒ ๋ฐฐํฌ)
์์ EC2 ์ค์ต์์ user_data ๋ถ๋ถ๋ง ๋ณ๊ฒฝํ๋ค.
1
2
3
4
5
user_data = <<-EOF
#!/bin/bash
echo "T101 Study Kane" > index.html
nohup busybox httpd -f -p 8080 &
EOF
๋์ ๊ณผ์ 2 (Backend)
AWS S3/DynamoDB ๋ฐฑ์๋ Backend๋ Terraform์ ์ํํ์ผ์ ์๊ฒฉ์ ์ฅ์์ ์ ์ฅํ๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํตํด ํ ๋จ์์ ํ์ ์ด ๊ฐ๋ฅํ๋ค. ๋ง์ฝ, ๋ก์ปฌ์ ์ํํ์ผ์ ์ ์ฅํ๋ฉด ํ์๋ค์ด ๋ณ๊ฒฝํ ๋๋ง๋ค ์ํํ์ผ์ ์ฃผ๊ณ ๋ฐ์์ผํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด, ์ํํ์ผ๊ณผ ์ค์ ์ธํ๋ผ์ ์ํ๊ฐ ๋ฌ๋ผ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
Backend๋ ๋ค๋ฅธ ํธ์์ ๋ ์์ธํ๊ฒ ๋ค๋ฃฌ๋ค.
์๋๋ ๊ด๋ จ ์ฝ๋์ด๋ค.
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
provider "aws" {
profile = "eks"
region = "ap-northeast-2"
}
resource "aws_s3_bucket" "mys3bucket" {
bucket = "kane-t101study-tfstate"
}
# Enable versioning so you can see the full revision history of your state files
resource "aws_s3_bucket_versioning" "mys3bucket_versioning" {
bucket = aws_s3_bucket.mys3bucket.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_dynamodb_table" "mydynamodbtable" {
name = "terraform-locks"
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}
output "s3_bucket_arn" {
value = aws_s3_bucket.mys3bucket.arn
description = "The ARN of the S3 bucket"
}
output "dynamodb_table_name" {
value = aws_dynamodb_table.mydynamodbtable.name
description = "The name of the DynamoDB table"
}
EC2๋ฅผ ๋ฐฐํฌํ๋ ์ฝ๋์ ์๋์ ๊ฐ์ ์๊ฒฉ backend๋ฅผ ์ค์ ํ๋ค.
1
2
3
4
5
6
7
8
9
terraform {
backend "s3" {
bucket = "kane-t101study-tfstate"
key = "dev/terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform-locks"
# encrypt = true
}
}
๋ฐฐํฌํ ํ, AWS ์ฝ์์ ์ ์ํ๋ฉด ์๋์ ๊ฐ์ด table์ ํ์ธํ ์ ์๋ค.
์ด์ , s3๋ฅผ ๋ชจ๋ํฐ๋งํ๋ฉฐ Terraform์ ๋ฐฐํฌํ์ฌ state ํ์ผ์ด ์ ์์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ์ง ํ์ธํ๋ค.
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
while true; do aws s3 ls s3://$NICKNAME-t101study-tfstate --recursive --human-readable --summarize ; echo "------------------------------"; date; sleep 1; done
Total Objects: 0
Total Size: 0 Bytes
------------------------------
Mon Aug 28 00:50:18 KST 2023
Total Objects: 0
Total Size: 0 Bytes
------------------------------
...
# ๋ฆฌ์์ค ์์ฑ
------------------------------
Mon Aug 28 00:53:16 KST 2023
2023-08-28 00:50:56 21.1 KiB dev/terraform.tfstate
Total Objects: 1
Total Size: 21.1 KiB
------------------------------
Mon Aug 28 00:53:17 KST 2023
2023-08-28 00:53:18 22.4 KiB dev/terraform.tfstate
------------------------------
...
# ๋ฆฌ์์ค ์
๋ฐ์ดํธ
------------------------------
Total Objects: 1
Total Size: 22.4 KiB
------------------------------
# ๋ฆฌ์์ค ์ญ์
...
------------------------------
Mon Aug 28 00:56:04 KST 2023
2023-08-28 00:56:03 180 Bytes dev/terraform.tfstate
Total Objects: 1
Total Size: 180 Bytes
------------------------------
Mon Aug 28 00:56:05 KST 2023
์๋์ ๊ฐ์ด ์ฝ์์์๋ ํ์ธํ ์ ์๋ค. ์์ฑ ์์๋ ์๋์์๋ถํฐ ์ ๋ฐฉํฅ์ด๋ค.