μΌλ° ν΄λΌμ°λ μΈνλΌμμ νμ μμ μ±, μ΄μ , ꡬν μ λ΅, μμ μ± λ° νμ₯μ±μ λ―ΈμΉλ μν₯ νꡬ.
μΌλ° μΈνλΌ: ν΄λΌμ°λ νλ«νΌ νμ μμ μ±
λΉ λ₯΄κ² μ§ννλ ν΄λΌμ°λ μ»΄ν¨ν νκ²½μμ μ‘°μ§μ μ ν리μΌμ΄μ μ λ°°ν¬νκ³ κ΄λ¦¬νκΈ° μν΄ μΌλ° μΈνλΌμ μ μ λ μμ‘΄νκ³ μμ΅λλ€. μ΄λ¬ν μ κ·Ό λ°©μμ μ μ°μ±κ³Ό νμ₯μ± μΈ‘λ©΄μμ μλΉν μ΄μ μ μ 곡νμ§λ§, μμ μ±κ³Ό μ μ§ κ΄λ¦¬μ±μ 보μ₯νκΈ° μν΄ ν΄κ²°ν΄μΌ ν 볡μ‘μ±λ μΌκΈ°ν©λλ€. μ΄λ¬ν 볡μ‘μ±μ κ΄λ¦¬νλ λ° μμ΄ μ€μν μΈ‘λ©΄ μ€ νλλ νμ μμ μ±μ λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμλ μΌλ° ν΄λΌμ°λ μΈνλΌμμ νμ μμ μ±μ μ€μμ±μ μ΄ν΄λ³΄κ³ , μ΄μ , ꡬν μ λ΅ λ° μ μ¬μ μΈ κ³Όμ λ₯Ό λ Όμν©λλ€.
μΌλ° μΈνλΌλ 무μμ λκΉ?
μΌλ° μΈνλΌλ λ€μν μ ν리μΌμ΄μ κ³Ό νκ²½μ μ μ©ν μ μλ μ¬μ¬μ© κ°λ₯νκ³ κ΅¬μ± κ°λ₯ν μΈνλΌ κ΅¬μ± μμλ₯Ό μμ±νλ κ²μ μλ―Έν©λλ€. μ¬κΈ°μλ κ°λ³ μ ν리μΌμ΄μ μ νΉμ μΈλΆ μ¬νμ μΆμννκ³ μΈνλΌ μμλ₯Ό λ³΄λ€ μΌλ°μ μ΄κ³ λ§€κ°λ³μνλ λ°©μμΌλ‘ μ μνλ κ²μ΄ ν¬ν¨λ©λλ€. μ΄λ μ’ μ’ Terraform, AWS CloudFormation, Azure Resource Manager λ° Google Cloud Deployment Managerμ κ°μ IaC(Infrastructure as Code) λꡬλ₯Ό ν΅ν΄ λ¬μ±λ©λλ€.
μλ₯Ό λ€μ΄ κ° μ ν리μΌμ΄μ μ λν νΉμ κ°μ λ¨Έμ (VM) ꡬμ±μ μμ±νλ λμ CPU, λ©λͺ¨λ¦¬, λμ€ν¬ ν¬κΈ° λ° μ΄μ 체μ μ κ°μ κ΅¬μ± κ°λ₯ν λ§€κ°λ³μλ₯Ό μ¬μ©νμ¬ μΌλ° VM λͺ¨λμ λ§λ€ μ μμ΅λλ€. κ·Έλ° λ€μ μ μ ν λ§€κ°λ³μ κ°μ μ§μ νμ¬ μ¬λ¬ μ ν리μΌμ΄μ μμ μ΄ λͺ¨λμ μ¬μ¬μ©ν μ μμ΅λλ€.
μΌλ° μΈνλΌμ μ΄μ :
- μ€λ³΅ κ°μ: μ¬μ¬μ© κ°λ₯ν κ΅¬μ± μμλ₯Ό μμ±ν¨μΌλ‘μ¨ μ‘°μ§μ μΈνλΌ μ μ λ° κ΅¬μ±μ μ€λ³΅νλ κ²μ νΌν μ μμ΅λλ€.
- μΌκ΄μ± ν₯μ: μΌλ° μΈνλΌλ λ€μν νκ²½μμ μΌκ΄μ±μ λμ¬ κ΅¬μ± λ리ννΈ λ° μ€λ₯μ μνμ μ€μ λλ€.
- νμ₯μ± ν₯μ: μ¬μ¬μ© κ°λ₯ν κ΅¬μ± μμλ λ³ννλ μ ν리μΌμ΄μ μꡬ μ¬νμ μΆ©μ‘±νκΈ° μν΄ μ½κ² νμ₯νκ³ μ‘°μ ν μ μμ΅λλ€.
- λ°°ν¬ μλ ν₯μ: 미리 μ μλκ³ ν μ€νΈλ μΈνλΌ λͺ¨λμ ν΅ν΄ μλ‘μ΄ μ ν리μΌμ΄μ λ° νκ²½μ λ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ λ°°ν¬ν μ μμ΅λλ€.
- μ μ§ κ΄λ¦¬μ± ν₯μ: μ€μ μ§μ€νλκ³ μ μ μλ κ΅¬μ± μμλ₯Ό ν΅ν΄ μΈνλΌ κ΄λ¦¬ λ° μ λ°μ΄νΈκ° λ μ¬μμ§λλ€.
νμ μμ μ±μ μ€μμ±
νμ μμ μ±μ μμ μ΄ μ¬λ°λ₯Έ νμ μ λ°μ΄ν°μμ μνλλλ‘ λ³΄μ₯νλ νλ‘κ·Έλλ° μΈμ΄ μμ±μ λλ€. μΌλ° μΈνλΌμ λ§₯λ½μμ νμ μμ μ±μ μΈνλΌ λ¦¬μμ€λ₯Ό μ μνκ³ νλ‘λΉμ λνλ λ° μ¬μ©λλ λ§€κ°λ³μμ ꡬμ±μ΄ μμλλ νμ κ³Ό κ°μΈμ§ νμΈνλ κ²μ μλ―Έν©λλ€.
μλ₯Ό λ€μ΄ VM λͺ¨λμ΄ λ©λͺ¨λ¦¬ ν¬κΈ° λ§€κ°λ³μκ° κΈ°κ°λ°μ΄νΈ μλ₯Ό λνλ΄λ μ μμΌ κ²μΌλ‘ μμνλ κ²½μ° νμ μμ μ±μ μ¬μ©μκ° μ€μλ‘ λ¬Έμμ΄ λλ μμλ₯Ό μ λ¬νλ κ²μ λ°©μ§ν©λλ€. λ§μ°¬κ°μ§λ‘ λ€νΈμν¬ λͺ¨λμ΄ μλΈλ·μ λν μ ν¨ν CIDR λΈλ‘μ μμνλ κ²½μ° νμ μμ μ±μ μ 곡λ κ°μ΄ μ€μ λ‘ μ ν¨ν CIDRμΈμ§ νμΈν©λλ€.
μΌλ° μΈνλΌμμ νμ μμ μ±μ΄ μ€μν μ΄μ λ 무μμ λκΉ?
- μ€λ₯ λ°©μ§: νμ μμ μ±μ κ°λ° λ° λ°°ν¬ νλ‘μΈμ€ μ΄κΈ°μ μ€λ₯λ₯Ό ν¬μ°©νμ¬ νλ‘λμ νκ²½μμ μκΈ°μΉ μμ μ€ν¨ λ° κ°λ μ€μ§ μκ°μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
- μμ μ± ν₯μ: μΈνλΌ κ΅¬μ± μμκ° μ¬λ°λ₯΄κ² ꡬμ±λμλμ§ νμΈνμ¬ νμ μμ μ±μ μμ€ν μ μ λ°μ μΈ μμ μ±κ³Ό μμ μ±μ κΈ°μ¬ν©λλ€.
- 보μ κ°ν: νμ μμ μ±μ API ν€ λ° μνΈμ κ°μ μ€μν λ§€κ°λ³μκ° μμ νκ³ μ¬λ°λ₯΄κ² μ²λ¦¬λλλ‘ λ³΄μ₯νμ¬ λ³΄μ μ·¨μ½μ±μ λ°©μ§νλ λ° λμμ΄ λ μ μμ΅λλ€.
- νμ μ΄μ§: νμ μμ μ±μ μΈνλΌ κ΅¬μ± μμμ λν λͺ νν κ³μ½ λ° κΈ°λλ₯Ό μ 곡νμ¬ νμ΄ νμ νκ³ μκ°μ΄ μ§λ¨μ λ°λΌ μΈνλΌλ₯Ό μ μ§ κ΄λ¦¬νλ κ²μ λ μ½κ² λ§λλλ€.
- λλ²κΉ κ°μν: μ€λ₯κ° λ°μνλ©΄ νμ μμ μ±μ κ·Όλ³Έ μμΈμ λ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ μ°Ύμλ΄λ λ° λμμ΄ λ μ μμ΅λλ€.
νμ μμ μ± κ΅¬ν μ λ΅
μ‘°μ§μ΄ μΌλ° ν΄λΌμ°λ μΈνλΌμμ νμ μμ μ±μ ꡬννκΈ° μν΄ μ¬μ©ν μ μλ λͺ κ°μ§ μ λ΅μ΄ μμ΅λλ€. μ΄λ¬ν μ λ΅μ κ°λ¨ν μ ν¨μ± κ²μ¬ κΈ°μ μμλΆν° λ³΄λ€ μ κ΅ν νμ μμ€ν λ° μ½λ μμ± λꡬμ μ΄λ₯΄κΈ°κΉμ§ λ€μν©λλ€.
1. μ λ ₯ μ ν¨μ± κ²μ¬
νμ μμ μ±μ λν κ°μ₯ κΈ°λ³Έμ μΈ μ κ·Ό λ°©μμ μΈνλΌ μ μμ μ¬μ©λλ λͺ¨λ λ§€κ°λ³μ λ° κ΅¬μ±μ λν΄ μ λ ₯ μ ν¨μ± κ²μ¬λ₯Ό μννλ κ²μ λλ€. μ¬κΈ°μλ μ 곡λ κ°μ΄ μμλλ νμ κ³Ό μ μ½ μ‘°κ±΄μ μ€μνλμ§ νμΈνλ κ²μ΄ ν¬ν¨λ©λλ€.
μμ (Terraform):
resource "aws_instance" "example" {
ami = var.ami
instance_type = var.instance_type
tags = {
Name = var.instance_name
}
}
variable "ami" {
type = string
validation {
condition = can(regex("^ami-[0-9a-f]+", var.ami))
error_message = "AMI IDλ 'ami-'λ‘ μμνκ³ 16μ§μ λ¬Έμκ° λ€λ°λ₯΄λ μ ν¨ν AMI IDμ¬μΌ ν©λλ€."
}
}
variable "instance_type" {
type = string
default = "t2.micro"
validation {
condition = contains(["t2.micro", "t2.small", "t2.medium"], var.instance_type)
error_message = "μΈμ€ν΄μ€ νμ
μ 't2.micro', 't2.small' λλ 't2.medium' μ€ νλμ¬μΌ ν©λλ€."
}
}
variable "instance_name" {
type = string
description = "μΈμ€ν΄μ€ μ΄λ¦"
}
μ΄ μμ μμ Terraform λ³μλ νΉμ νμ (`string` λ±) λ° μ 곡λ κ°μ΄ νΉμ κΈ°μ€μ μΆ©μ‘±νλμ§ νμΈνκΈ° μν μ ν¨μ± κ²μ¬ κ·μΉμΌλ‘ μ μλ©λλ€. `ami` λ³μμ μ 곡λ κ°μ΄ μμλλ AMI ID νμκ³Ό μΌμΉνμ§ μμΌλ©΄ λ°°ν¬ μ€μ μ€λ₯ λ©μμ§κ° νμλ©λλ€.
2. μ μ λΆμ
μ μ λΆμ λꡬλ₯Ό μ¬μ©νμ¬ μΈνλΌ μ½λλ₯Ό μλμΌλ‘ λΆμνκ³ μ μ¬μ μΈ νμ μ€λ₯ λ° κΈ°ν λ¬Έμ λ₯Ό μλ³ν μ μμ΅λλ€. μ΄λ¬ν λꡬλ κ°λ° μ€μ μ¦μ λͺ ννμ§ μμ μ μλ λΆμΌμΉ, μ¬μ©λμ§ μλ λ³μ λ° κΈ°ν λ¬Έμ λ₯Ό κ°μ§ν μ μμ΅λλ€.
μ μ λΆμ λꡬμ μλ‘λ Checkov, Terrascan λ° tfsecμ΄ μμ΅λλ€. μ΄λ¬ν λꡬλ₯Ό CI/CD νμ΄νλΌμΈμ ν΅ν©νμ¬ λͺ¨λ μΈνλΌ μ½λκ° λ°°ν¬λκΈ° μ μ μ² μ ν λΆμλλλ‘ ν μ μμ΅λλ€.
3. νμ μμ€ν
λ³΄λ€ κ³ κΈ μ κ·Ό λ°©μμλ νμ μμ€ν μ μ¬μ©νμ¬ μΈνλΌ λ¦¬μμ€μ λν νμ μ μ½ μ‘°κ±΄μ μ μνκ³ μ μ©νλ κ²μ΄ ν¬ν¨λ©λλ€. νμ μμ€ν μ μΈνλΌ μ μμ μ¬μ©ν μ μλ λ°μ΄ν°μ νμ μ μ§μ νκ³ λͺ¨λ μμ μ΄ μ¬λ°λ₯Έ νμ μ λ°μ΄ν°μμ μνλλλ‘ λ³΄μ₯νλ 곡μμ μΈ λ°©λ²μ μ 곡ν©λλ€.
Pulumiμ κ°μ μΌλΆ IaC λꡬλ νμ μμ€ν μ λν κΈ°λ³Έ μ§μμ μ 곡ν©λλ€. Pulumiλ₯Ό μ¬μ©νλ©΄ κ°λ°μκ° κ°λ ₯ν νμ κ²μ¬ κΈ°λ₯μ μ 곡νλ TypeScript, Python λ° Goμ κ°μ νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ¬μ©νμ¬ μΈνλΌ λ¦¬μμ€λ₯Ό μ μν μ μμ΅λλ€.
μμ (TypeScriptλ₯Ό μ¬μ©ν Pulumi):
import * as aws from "@pulumi/aws";
const vpc = new aws.ec2.Vpc("my-vpc", {
cidrBlock: "10.0.0.0/16",
tags: {
Name: "my-vpc",
},
});
const subnet = new aws.ec2.Subnet("my-subnet", {
vpcId: vpc.id,
cidrBlock: "10.0.1.0/24",
availabilityZone: "us-west-2a",
tags: {
Name: "my-subnet",
},
});
const instance = new aws.ec2.Instance("my-instance", {
ami: "ami-0c55b25a9b8e31e23", // μ ν¨ν AMI IDλ‘ λ°κΎΈμμμ€.
instanceType: "t2.micro",
subnetId: subnet.id,
tags: {
Name: "my-instance",
},
});
export const publicIp = instance.publicIp;
μ΄ μμ μμ Pulumiλ TypeScriptλ₯Ό μ¬μ©νμ¬ AWS 리μμ€λ₯Ό μ μν©λλ€. TypeScript μ»΄νμΌλ¬λ μ½λμ λν΄ νμ κ²μ¬λ₯Ό μννμ¬ λͺ¨λ λ§€κ°λ³μκ° μ¬λ°λ₯Έ νμ μ΄κ³ λͺ¨λ μμ μ΄ μ ν¨νμ§ νμΈν©λλ€. μλ₯Ό λ€μ΄ `aws.ec2.Subnet` 리μμ€μ `vpcId` μμ±μ λ¬Έμμ΄μΌ κ²μΌλ‘ μμλλ©° TypeScript μ»΄νμΌλ¬λ μ΄ μ μ½ μ‘°κ±΄μ μ μ©ν©λλ€.
4. μ½λ μμ±
νμ μμ μ±μ λν λ λ€λ₯Έ μ κ·Ό λ°©μμ μ½λ μμ± λꡬλ₯Ό μ¬μ©νμ¬ κ³ κΈ μ¬μμμ μΈνλΌ μ½λλ₯Ό μλμΌλ‘ μμ±νλ κ²μ λλ€. μ΄λ¬ν λꡬλ νμ μ μ½ μ‘°κ±΄μ μ μ©νκ³ μμ±λ μ½λκ° μ ν¨νκ³ μΌκ΄μ±μ΄ μλμ§ νμΈν μ μμ΅λλ€.
μλ₯Ό λ€μ΄ μΈνλΌ λ¦¬μμ€μ λν μ€ν€λ§λ₯Ό μ μν λ€μ μ½λ μμ± λꡬλ₯Ό μ¬μ©νμ¬ ν΄λΉ μ€ν€λ§λ₯Ό κΈ°λ°μΌλ‘ Terraform λλ CloudFormation ν νλ¦Ώμ μμ±ν μ μμ΅λλ€. μ½λ μμ± λꡬλ μμ±λ λͺ¨λ μ½λκ° μ§μ λ νμ κ³Ό μ μ½ μ‘°κ±΄μ μ€μνλμ§ νμΈν©λλ€.
κ³Όμ λ° κ³ λ € μ¬ν
νμ μμ μ±μ μΌλ° ν΄λΌμ°λ μΈνλΌμμ μλΉν μ΄μ μ μ 곡νμ§λ§ μΌλμ λμ΄μΌ ν λͺ κ°μ§ κ³Όμ λ° κ³ λ € μ¬νλ μμ΅λλ€.
- 볡μ‘μ±: νμ μμ μ±μ ꡬννλ©΄ μΈνλΌ κ°λ° νλ‘μΈμ€μ 볡μ‘μ±μ΄ μΆκ°λ μ μμ΅λλ€. νμ μ μ½ μ‘°κ±΄μ΄ μ¬λ°λ₯΄κ² μ μλκ³ μ μ©λλλ‘ μ μ€ν κ³ν λ° μ€κ³κ° νμν©λλ€.
- ν΄λ§: λͺ¨λ IaC λκ΅¬κ° νμ μμ€ν μ λν κΈ°λ³Έ μ§μμ μ 곡νλ κ²μ μλλλ€. μ‘°μ§μ νμ μμ μ±μ ꡬννκΈ° μν΄ μΈλΆ λꡬ λ° λΌμ΄λΈλ¬λ¦¬μ μμ‘΄ν΄μΌ ν μ μμ΅λλ€.
- νμ΅ κ³‘μ : κ°λ°μλ νμ μμ€ν λ° μ½λ μμ± λꡬλ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νκΈ° μν΄ μλ‘μ΄ νλ‘κ·Έλλ° μΈμ΄μ κ°λ μ λ°°μμΌ ν μ μμ΅λλ€.
- μ μ§ κ΄λ¦¬: νΉν μΈνλΌκ° μκ°μ΄ μ§λ¨μ λ°λΌ μ§νν¨μ λ°λΌ νμ μ μ λ° μ ν¨μ± κ²μ¬ κ·μΉμ μ μ§ κ΄λ¦¬νλ κ²μ μ΄λ €μΈ μ μμ΅λλ€.
- λ°νμ vs. μ»΄νμΌ νμ κ²μ¬: μ μ λΆμ λ° νμ μμ€ν μ μ»΄νμΌ νμμ λ§μ μ€λ₯λ₯Ό ν¬μ°©ν μ μμ§λ§ μΌλΆ μ€λ₯λ λ°νμμλ§ κ°μ§λ μ μμ΅λλ€. μ΄λ¬ν λ°νμ μ€λ₯λ₯Ό κ°μ§νκ³ ν΄κ²°νκΈ° μν΄ ν¬κ΄μ μΈ λͺ¨λν°λ§ λ° λ‘κΉ μ λ§λ ¨νλ κ²μ΄ μ€μν©λλ€.
νμ μμ μ±μ μν λͺ¨λ² μ¬λ‘
μΌλ° ν΄λΌμ°λ μΈνλΌμμ νμ μμ μ±μ ν¨κ³Όμ μΌλ‘ ꡬννλ €λ©΄ μ‘°μ§μ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λΌμΌ ν©λλ€.
- λͺ νν νμ μ μ: λͺ¨λ μΈνλΌ λ¦¬μμ€ λ° λ§€κ°λ³μμ λν΄ μμλλ λ°μ΄ν°μ νμ μ λͺ ννκ² μ μν©λλ€.
- νμ μ μ½ μ‘°κ±΄ μ μ©: μ λ ₯ μ ν¨μ± κ²μ¬, μ μ λΆμ λ° νμ μμ€ν μ μ¬μ©νμ¬ λͺ¨λ μΈνλΌ μ½λμ λν΄ νμ μ μ½ μ‘°κ±΄μ μ μ©ν©λλ€.
- νμ κ²μ¬ μλν: νμ κ²μ¬λ₯Ό CI/CD νμ΄νλΌμΈμ ν΅ν©νμ¬ λͺ¨λ μ½λκ° λ°°ν¬λκΈ° μ μ μ² μ ν κ²μ¦λλλ‘ ν©λλ€.
- μ½λ μμ± λꡬ μ¬μ©: μ½λ μμ± λꡬλ₯Ό μ¬μ©νμ¬ κ³ κΈ μ¬μμμ μΈνλΌ μ½λλ₯Ό μλμΌλ‘ μμ±νλ κ²μ κ³ λ €ν©λλ€.
- λͺ¨λν°λ§ λ° λ‘κΉ : λ°νμ μ€λ₯λ₯Ό κ°μ§νκ³ ν΄κ²°νκΈ° μν΄ ν¬κ΄μ μΈ λͺ¨λν°λ§ λ° λ‘κΉ μ ꡬνν©λλ€.
- νμ μ μ λ¬Έμν: νμ΄ νμ νκ³ μκ°μ΄ μ§λ¨μ λ°λΌ μΈνλΌλ₯Ό μ μ§ κ΄λ¦¬νλ κ²μ λ μ½κ² λ§λ€κΈ° μν΄ νμ μ μ λ° μ ν¨μ± κ²μ¬ κ·μΉμ λ¬Έμνν©λλ€.
- μ κΈ°μ μΌλ‘ κ²ν λ° μ λ°μ΄νΈ: μΈνλΌ λ° μ ν리μΌμ΄μ μꡬ μ¬νμ λ³κ²½ μ¬νμ λ°μνκΈ° μν΄ νμ μ μ λ° μ ν¨μ± κ²μ¬ κ·μΉμ μ κΈ°μ μΌλ‘ κ²ν νκ³ μ λ°μ΄νΈν©λλ€.
- μ¬λ°λ₯Έ λꡬ μ ν: νμ μμ μ±μ λν μ μ ν μ§μμ μ 곡νκ³ μ‘°μ§μ κΈ°μ μ λ¬Έ μ§μ λ° μꡬ μ¬νμ λ§λ IaC λꡬ λ° λΌμ΄λΈλ¬λ¦¬λ₯Ό μ νν©λλ€. μλ₯Ό λ€μ΄ κ°λ ₯ν νμ΄νμ μν΄ TypeScript/Python/Goκ° μλ Pulumiμ κ°μ λꡬλ₯Ό κ³ λ €νκ±°λ μν¬νλ‘μ Linters(μ: Terraformμ© tflint)λ₯Ό ν΅ν©ν©λλ€.
λ€μν ν΄λΌμ°λ νλ«νΌμ μ
νμ μμ μ± κ΅¬νμ ν΄λΌμ°λ νλ«νΌ λ° IaC λꡬλ§λ€ μ½κ° λ€λ¦ λλ€. λ€μμ λͺ κ°μ§ μμ λλ€.
AWS CloudFormation
CloudFormationμ JSON λλ YAMLμ μ¬μ©νμ¬ μΈνλΌ λ¦¬μμ€λ₯Ό μ μν©λλ€. Pulumiμ κ°μ κ°λ ₯ν νμ μμ€ν μ μμ§λ§ CloudFormationμ λ΄μ₯ ν¨μ λ° μ ν¨μ± κ²μ¬ κ·μΉμ μ¬μ©νμ¬ μ΄λ μ λμ νμ μμ μ±μ μ μ©ν μ μμ΅λλ€.
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref AMI
InstanceType: !Ref InstanceType
Parameters:
AMI:
Type: AWS::SSM::Parameter::Value<String>
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Description: AMI ID
InstanceType:
Type: String
Default: t2.micro
AllowedValues:
- t2.micro
- t2.small
- t2.medium
μ΄ μμ μμ `AllowedValues`λ `InstanceType` λ§€κ°λ³μμ λν΄ νμ©λλ κ°μ μ ννλ λ°©λ²μ μ 곡ν©λλ€.
Azure Resource Manager(ARM) ν νλ¦Ώ
ARM ν νλ¦Ώλ JSONμ μ¬μ©νμ¬ λ¦¬μμ€λ₯Ό μ μν©λλ€. CloudFormationκ³Ό μ μ¬νκ² λ§€κ°λ³μ λ° μ ν¨μ± κ²μ¬ κ·μΉμ μ¬μ©νμ¬ νμ μ μ½ μ‘°κ±΄μ μ μ©ν μ μμ΅λλ€.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_RAGRS",
"Premium_LRS"
],
"metadata": {
"description": "μ€ν λ¦¬μ§ κ³μ νμ
"
}
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2019-04-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]",
"tier": "Standard"
},
"kind": "StorageV2",
"properties": {}
}
]
}
`parameters` μΉμ μ `allowedValues` μμ±μ `storageAccountType` λ§€κ°λ³μμ λν΄ νμ©λλ κ°μ μ νν©λλ€.
Google Cloud Deployment Manager
Deployment Managerλ YAMLμ μ¬μ©νμ¬ μΈνλΌ λ¦¬μμ€λ₯Ό μ μν©λλ€. μ€ν€λ§ μ ν¨μ± κ²μ¬λ₯Ό μ¬μ©νμ¬ νμ μ μ½ μ‘°κ±΄μ μ μ©ν μ μμ΅λλ€.
resources:
- name: the-vm
type: compute.v1.instance
properties:
zone: us-central1-f
machineType: zones/us-central1-f/machineTypes/n1-standard-1
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: projects/debian-cloud/global/images/family/debian-9
# μ€ν€λ§ μΉμ
μμ μ€ν€λ§ μ ν¨μ± κ²μ¬λ₯Ό μ μν μ μμ΅λλ€.
# κ·Έλ¬λ λ¨μμ±μ μν΄ μ΄ μμ μμλ μλ΅ν©λλ€.
Deployment Managerλ μ€ν€λ§ μ ν¨μ± κ²μ¬λ₯Ό μ§μνμ§λ§ κΈ°λ³Έ μ 곡 νμ μμ€ν μ΄ μλ λꡬμ λΉν΄ λ λ§μ μλ ꡬμ±μ΄ νμν κ²½μ°κ° λ§μ΅λλ€.
κ²°λ‘
νμ μμ μ±μ μΌλ° ν΄λΌμ°λ μΈνλΌμμ 볡μ‘μ±μ κ΄λ¦¬νκ³ μμ μ±μ 보μ₯νλ λ° μμ΄ μ€μν μΈ‘λ©΄μ λλ€. μ‘°μ§μ νμ μ ν¨μ± κ²μ¬, μ μ λΆμ λ° νμ μμ€ν μ ꡬννμ¬ μ€λ₯λ₯Ό λ°©μ§νκ³ , 보μμ κ°μ νκ³ , νμ μ μ΄μ§νκ³ , λλ²κΉ μ κ°μνν μ μμ΅λλ€. μΌλμ λμ΄μΌ ν κ³Όμ μ κ³ λ € μ¬νμ΄ μμ§λ§ νμ μμ μ±μ μ΄μ μ λΉμ©λ³΄λ€ ν¨μ¬ ν½λλ€. λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ μ¬λ°λ₯Έ λꡬλ₯Ό μ νν¨μΌλ‘μ¨ μ‘°μ§μ νμ μμ μ±μ ν¨κ³Όμ μΌλ‘ ꡬννκ³ λ³΄λ€ κ°λ ₯νκ³ μ μ§ κ΄λ¦¬ κ°λ₯ν ν΄λΌμ°λ μΈνλΌλ₯Ό ꡬμΆν μ μμ΅λλ€. ν΄λΌμ°λ νλ«νΌμ΄ κ³μ μ§νν¨μ λ°λΌ νμ μμ μ±μ μ€μμ±μ λμ± μ»€μ§ κ²μ΄λ©° ν΄λΌμ°λ κΈ°λ° μ ν리μΌμ΄μ μ ꡬμΆνκ³ κ΄λ¦¬νλ λͺ¨λ μ‘°μ§μ νμμ μΈ κ³ λ € μ¬νμ΄ λ κ²μ λλ€.
κ²°λ‘ μ μΌλ‘ μΌλ° μΈνλΌ μ λ΅μμ νμ μμ μ±μ μμ©νλ κ²μ λ¨μν λͺ¨λ² μ¬λ‘κ° μλλΌ ν΄λΌμ°λ λ°°ν¬μ μ₯κΈ°μ μΈ μμ μ±, 보μ λ° νμ₯μ±μ λν ν¬μμ λλ€. μ μ μλ νμ , μ격ν μ ν¨μ± κ²μ¬ λ° μλνλ κ²μ¬λ₯Ό μ°μ μν¨μΌλ‘μ¨ μ‘°μ§μ μνμ μννκ³ , μ΄μμ κ°μννκ³ , ν΄λΌμ°λ νκ²½μμ μμ μ± λ¬Ένλ₯Ό μ‘°μ±ν μ μμ΅λλ€. μ΄λ κΆκ·Ήμ μΌλ‘ λ λΉ λ₯Έ νμ , κ°λ μ€μ§ μκ° κ°μ λ° μ€μν μ ν리μΌμ΄μ μ λ·λ°μΉ¨νλ μΈνλΌμ λν μμ κ° μ¦κ°λ‘ μ΄μ΄μ§λλ€.