[CHORE] terraformer로 현재 AWS 인프라 IaC 스냅샷#18
Conversation
- OpenTofu + AWS provider(~> 5.0, ap-northeast-2) 선언 추가 - .gitignore에 terraform 산출물 규칙 추가 (tfstate/.terraform/tfvars/lock) IssueNum #17
- 네트워크: vpc/subnet/route_table/igw/eip/nacl - 컴퓨트: ec2_instance(app·db)/eni/sg - DNS: route53(zone·record) - region ap-northeast-2, terraformer 0.8.30 + connect=true IssueNum #17
- github-actions-deploy(OIDC 배포 역할), linclean-ec2-role(EC2 역할) - linclean-deploy-ssm, linclean-ec2-ssm-read 정책 및 인스턴스 프로파일 - 계정 전체 export에서 사용자/access key/서비스연결역할 제거 (시크릿·잡음 방지) - 공개 레포 대비: ARN의 계정 ID를 평문 대신 data.aws_caller_identity로 동적 참조 IssueNum #17
- 도구 버전·디렉터리 구조·스냅샷 범위(50개) 정리 - 재현 방법(provider 연결, AWS_REGION 우회) 기록 - 후속 작업 체크리스트(state 정합성/모듈화/OIDC 누락/레거시 provider/region·version) IssueNum #17
| } | ||
|
|
||
| ingress { | ||
| cidr_blocks = ["116.121.87.170/32"] |
There was a problem hiding this comment.
보안 그룹에 특정 공인 IP(116.121.87.170/32)가 그대로 포함되어 있습니다. 관리자 개인 또는 사무실 IP라면 운영 환경의 접근 지점이 공개될 수 있으므로, 실제 값은 저장소에서 제거하는 편이 안전해 보입니다.
변수로 분리하고 실제 값은 Git에 포함하지 않는 tfvars 파일이나 배포 환경에서 주입하는 방식을 검토해 주시면 좋겠습니다.
| } | ||
| POLICY | ||
|
|
||
| managed_policy_arns = ["arn:aws:iam::${data.aws_caller_identity.current.account_id}:policy/linclean-deploy-ssm"] |
There was a problem hiding this comment.
iam_role.tf의 managed_policy_arns에서 정책을 연결하면서, 동일한 정책 연결을 aws_iam_role_policy_attachment(terraform/generated/aws/iam/iam_role_policy_attachment.tf)로도 선언하고 있습니다.
동일한 IAM 정책 연결을 두 방식으로 관리하면 추후 terraform plan 또는 apply 과정에서 반복적인 변경 사항이 발생하거나, 두 리소스가 서로의 설정을 덮어쓰려는 문제가 생길 수 있습니다.
managed_policy_arns와 aws_iam_role_policy_attachment 중 한 가지 방식으로 통일해 주시면 좋겠습니다. 정책 연결을 개별적으로 관리하려는 목적이라면 후자만 사용하는 방식이 더명확해 보입니다!
| cp .terraform/providers/registry.opentofu.org/hashicorp/aws/*/darwin_arm64/terraform-provider-aws \ | ||
| ~/.terraform.d/plugins/darwin_arm64/terraform-provider-aws_v5.100.0_x5 | ||
|
|
||
| # EC2 계열은 AWS_REGION 환경변수가 있어야 aws-global 오해석을 피함 |
There was a problem hiding this comment.
첫 번째 terraformer import 명령의 --resources에 이미 route53이 포함되어 있지만, 56번째 줄에서 IAM과 Route53을 다시 export하고 있습니다.
README의 설명대로 Route53을 글로벌 서비스로 분리해서 실행하려는 의도라면, 첫 번째 명령에서는 route53을 제거해야 할 것 같습니다.
| ``` | ||
|
|
||
| ## 스냅샷 범위 (50개 리소스) | ||
|
|
There was a problem hiding this comment.
30번째 줄에는 스냅샷 범위가 총 50개 리소스라고 작성되어 있지만, 아래 표의 합계와 실제 Terraform resource 선언은 모두 37개입니다.
리소스를 정리하는 과정에서 문서만 갱신되지 않은 것으로 보입니다. 현재 커밋된 코드를 기준으로 작성한 문서라면 수정 부탁드립니다.
개요
운영 중인 AWS 인프라를 terraformer로 떠낸 초기 IaC 스냅샷. brownfield IaC 전환의 baseline이다.
실물 변경 없이(read-only) 현재 상태를 코드로 캡처하는 것이 목표이며, 모듈화·state 연결은 후속 PR로 분리한다.
작업 내용
ap-northeast-2).gitignore에 terraform 산출물(tfstate/.terraform/tfvars/lock) 규칙 추가terraform/README.md에 도구·재현법·후속 작업 정리보안 처리
data.aws_caller_identity.current.account_id로 동적 참조커밋
[chore]작업 환경 세팅 (provider + gitignore)[chore]네트워크·컴퓨트·DNS 스냅샷[chore]LinClean IAM 스냅샷[docs]README후속 작업 (별도 이슈)
tofu plan"No changes" 검증)tfer--자동생성 코드 모듈화 (+ 레거시 provider 주소, region/version 일원화)Closes #17