IaC
-
Terraform LocalIaC/Terraform 기초 2023. 9. 20. 01:21
이번엔 terraform local에 대해서 알아보겠습니다. 테라폼에서는 locals라는 블록 안에 local value들을 만들어서 활용할 수 있습니다. 그리고 local 안에서 프로그래밍 언어처럼 반복문이나 조건문을 통해 로직을 구현하는 것도 가능합니다. 한번 간단한 코드와 함께 살펴보겠습니다. locals { s3_bucket_name = "cloudman-sample-bucket-01" } resource "aws_s3_bucket" "cloudman_s3_sample_bucket" { bucket = local.s3_bucket_name bucket_prefix = "logs/" tags = { log = "yes" expired = "yes" } } 예전에는 s3 bucket 이름을 var.c..
-
Backend Credential ErrorIaC/Terraform Error Case 2023. 9. 20. 01:11
다음과 같은 에러가 발생하면 Error: error configuring S3 Backend: error validating provider credentials: error calling sts:GetCallerIdentity: InvalidClientTokenId: The security token included in the request is invalid. 현재 설정된 backend가 위치한 클라우드의 storage에 대한 권한이 없는 상태이므로 발생하는 에러입니다. S3 backend의 경우, export AWS_PROFILE="YOUR PROFILE"이나 aws configure 명령어를 통한 AWS profile의 설정을 하면 해결됩니다. Google Cloud Storage(GCS)의 경..
-
Terraform VariableIaC/Terraform 기초 2023. 9. 19. 23:17
이번엔 테라폼 Variable에 대해서 알아보겠습니다. variable은 테라폼에서 사용되는 변수입니다. 다른 일반적인 개발 언어로 개발을 하셨던 분들은 변수가 무엇인지 다 아실 것이라고 생각합니다. 혹시 모르시는 분들을 위해 간단하게 설명하면 변수는 값을 담는 그릇이라고 생각하시면 좋습니다. 그럼 테라폼에서 변수는 어떤 역할을 하는거죠? 변수는 값을 입력받아서 그 값을 담아서 전달할 수 있죠. 테라폼에서 변수도 마찬가지입니다. 어떤 변수로 설정하면 하드코딩을 하지 않고 외부의 값을 입력받아서 해당 값에 따라 리소스의 생성 조건을 다양하게 변화시킬 수 있습니다. 그럼 테라폼에 어떤 변수 타입이 있는지 코드로 간단하게 살펴봅시다. variable "cloudman_string" { type = string..
-
Terraform - AWS IAMIaC/Terraform AWS 2023. 9. 17. 05:36
(이 글은 AWS IAM에 대한 이해를 전제로 작성되었습니다. 관련 내용은 https://kh-archive.tistory.com/38를 참고하세요) 테라폼으로 AWS IAM 리소스들을 생성하는 방법에 대해서 알아봅시다. 우선, 바로 테라폼 코드를 보고 어떤 식으로 구성되는지 말씀드리겠습니다. resource "aws_iam_policy" "cloud_man_lambda_tagging_policy" { name = "lambda-tagging-sample-policy" description = "Policy for Lambda functions to tag themselves" policy = jsonencode({ Version = "2012-10-17", Statement = [ { Action = ..
-
Terraform - AWS S3IaC/Terraform AWS 2023. 9. 16. 22:25
(이 글은 AWS S3에 대한 이해를 전제로 작성되었습니다. 관련 내용은 https://kh-archive.tistory.com/26 를 참고하세요) Terraform으로 AWS의 S3를 생성하는 코드에 대해서 살펴보겠습니다. resource "aws_s3_bucket" "cloudman_s3_sample_bucket" { bucket = "cloudman-s3-bucket-01" bucket_prefix = "logs/" tags = { log = "yes" expired = "yes" } } 코드가 이게 다인가요? 네! 놀랍게도 이게 다입니다. 만들어지는 S3의 내용을 살펴보면 S3 bucket의 이름은 "cloudman-s3-bucket-01"이고, bucket의 prefix를 "logs"로 만들고..
-
Terraform State LockIaC/Terraform 기초 2023. 9. 15. 20:34
이전에 Terraform에서 state파일을 통해 인프라의 현재 상태를 파악하고 관리한다고 말씀드렸습니다. (Terraform State에 관한 내용을 아직 모르시는 분들은 링크를 참고해주세요.) 그러면 한 가지 고민이 생깁니다. 만약에 동시에 state 파일을 수정하려고 하면 꼬이는거 아닐까? 여러 명이 하나의 state 을 바라보고 있다면 어떻게 관리해야하지? 이런 고민을 해결해주는 것이 state lock입니다. 만약 하나의 state을 바라보고 손오공과 저팔계라는 테라폼 개발자가 각자 다른 인프라를 개발하고 있다고 가정해봅시다. (하지만 Github에서 같은 코드를 공유하고 terraform apply는 main(master) 브랜치의 최신 commit을 기준으로 합니다) 그리고 동시에 손오공은 ..
-
Terraform BackendIaC/Terraform 기초 2023. 9. 12. 23:56
(이 글은 Terraform state에 대한 이해를 바탕으로 작성되었습니다. 관련 내용은 https://kh-archive.tistory.com/22를 참고해주세요.) 테라폼의 백엔드 설정에 대해서 알아보겠습니다. 테라폼에서 State 파일에 대한 관리를 설정하는 것이 backend 설정입니다. backend 설정을 따로 하지 않으면 로컬에서 state 파일을 생성하여 관리합니다. 그러면 굳이 Backend 설정을 하지 않아도 되나요? 혼자서 개발할 것이라면 굳이 Backend 설정이 필요하지는 않습니다. 하지만 대부분의 경우 인프라 개발을 혼자서 개발을 하는 경우는 드물죠. 그리고 지금 당장은 혼자서 인프라 및 데봅스 개발을 하더라도 나중에 누군가와 협업을 해야하는 상황이 올 수도 있다는 가정을 하면..
-
Terraform ProviderIaC/Terraform 기초 2023. 9. 12. 23:50
지금까지 기본적인 테라폼 명령어를 살펴보았으니, 기본 테라폼 코드를 살펴보고 terraform apply를 통해 리소스를 하나씩 생성해봅시다. 우선, 테라폼에서 가장 먼저 작성되어야 하는 부분 중에 하나인 provider에 대해서 살펴봅시다. terraform provider는 테라폼이 특정 인프라 혹은 특정 클라우드의 리소스를 관리할 수 있도록 하는 일종의 Plugin으로 볼 수 있습니다. 뭔가 복잡한 얘기같지만 좀 더 쉽게 설명해보겠습니다. 테라폼으로 코드를 짜서 클라우드의 인프라를 만들 수 있다고 했죠? 그러면 내가 이 테라폼 코드를 실행하면 어떤 클라우드의 리소스를 만들지 알아야 하는데, 그걸 결정해주는 것이 바로 provider라고 보면 됩니다. 즉, provider가 AWS라면 terrafor..