vpc를 모듈화하여 환경별로 다르게 vpc를 생성할 수 있도록 해보자. 아래의 파일 명, 리소스 명 등은 임의로 변경하여도 완전히 무방하다! 1. module 작성하기 먼저 테라폼 디렉토리에 하위 디렉토리를 만들어준다. 해당 디렉토리 명은 이후 모듈에서 사용할 것임! [terraform] tree terraform ├── ec2.tf ├── main.tf ├── variables.tf └── vpc_module ├── gateway.tf ├── outputs.tf ├── route.tf ├── variables.tf └── vpc.tf vpc_module의 tf 파일들의 내용은 일반적인 작성 방법과 다르지 않다. 다만 cidr 블록 등은 유동적으로 변경할 수 있도록, 다음과 같이 vpc_module/va..
terraform init은 해당 명령어를 사용한 디렉토리를 기준으로 .tf 파일을 스캔한 후, 필요한 plugin을 확인한다. 필요한 plugin 목록을 정리한 후 .terraform 디렉토리를 만들고, releases.hashicorp.com로부터 필요한 plugin을 제공하는 provider 파일을 다운로드 받는다. terraform의 제작사인 hashicorp의 경우, registry 또는 releases를 위해 Fastly(회사 이름)의 CDN을 사용하지만 한국에서는 해당 CDN이 먹통이 되는 경우가 종종 있다. 이에 따라 1분 안팎으로 종료되는 terraform init 과정이 20분을 넘어가는 경우가 생김! 이 경우, https://releases.hashicorp.com/에 접속하여 필요한..
bucket.tf variable "bucket-name" { type = string default = "my-name-is-ingnoh-bucket" } resource "aws_s3_bucket" "common_s3_bucket" { bucket = var.bucket-name acl = "private" versioning { // 버킷 버전관리를 켜지 않을 것이라면 versioning 블록을 제거할 것 enabled = true } } resource "aws_s3_bucket_object" "bucket_folder_ingnoh" { bucket = aws_s3_bucket.common_s3_bucket.id key = "ingnoh/" source = "/dev/null" } terrafor..
variable.tf를 다음과 같이 작성 bucket-name-for-job : 사용할 Bucket이 유동적이라면 변수로 선언하여 사용. 주의 : variable로 만든다고 해서 Bucket이 실제로 생성되는 것은 아님을 명심할 것. 실제 생성은 resource "aws_s3_bucket"과 같은 형식으로, 별도로 코드를 작성해주어야 한다. assumeRoleiot : Role 생성시 해당 Role이 신뢰할 수 있는 개체를 지정 policy_job_s3 : IoT의 작업에 사용하기 위한 실제 권한을 할당 특히, resources의 bucket-name-for-job을 변수에 지정하여 사용할 수 있음 //variable.tf // 사용할 Bucket 명을 변수로 지정 variable "bucket-name..
EC2 resource "aws_instance" "common_ec2" { // 생략 count = var.instance_count tags = { Name = "Common-EC2-${count.index}" } provisioner "local-exec" { command = "echo ${self.private_ip} >> ./output/common_backend.txt" } } CLB resource "aws_elb" "LB_Public" { name = "LB" // 생략 listener { lb_port = 80 lb_protocol = "HTTP" instance_port = 80 instance_protocol = "HTTP" } instances = aws_instance.commo..
IAM Role을 인스턴스에 붙여줄 경우 assumeRole 설정을 누락했기 때문. 다음과 같은 형식으로 작성해보자 resource "aws_iam_role" "ec2-role" { name = "default-role" assume_role_policy = data.aws_iam_policy_document.sts_assumerole.json } resource "aws_iam_role_policy" "ec2-role-policy" { policy = data.aws_iam_policy_document.privilege.json role = aws_iam_role.ec2-role.id } resource "aws_iam_instance_profile" "ec2-role-profile" { name = ..
다음은 aws_elb 타입의 리소스인 "My_LB"의 설정이다. resource "aws_elb" "My_LB" { name = "My-Public-LB" // availability_zones = ["ap-northeast-2a"] security_groups = [aws_security_group.my_lb_sg.id] subnets = [aws_subnet.my_subnet.id] listener { instance_port = 12345 instance_protocol = "HTTP" lb_port = 80 lb_protocol = "HTTP" } listener { instance_port = 12345 instance_protocol = "HTTP" lb_port = 8080 lb_protoc..
1. 테라폼이란? IaaC를 위한 클라우드 인프라 환경 배포 툴의 일종 일반 서버, 가상 머신 등에서 동일 환경을 보장하는 Ansible과 비교하여 Terraform은 클라우드 플랫폼에 초점을 맞추는 것이 특징. 특징 : WRITE : Infrastructure as a Code PLAN : Preview changes before applying CREATE : Reproducible Infrastructure 클라우드 친화적인 툴이므로, 왠만한 클라우드 벤더에서 모두 지원한다고 함. 2. .tf 파일 살펴보기 resource "aws_key_pair" "ingnoh_key" { key_name = "ingnohKey" public_key = "${file("./ingnohKey.pub")}" } re..
- Total
- Today
- Yesterday
- react
- mysql
- spring boot
- Vault
- eureka
- AWS
- Linux
- IntelliJ
- etc
- Puppeteer
- Database
- JEST
- Gradle
- pgloader
- shell
- kotlin
- postgresql
- hashicorp
- RancherDesktop
- Java
- AWS IoT
- terraform
- Spring Cloud Config
- jQuery
- javascript
- Git
- Docker
- JPA
- Node.js
- 코딩테스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |