✅ 오늘 배운 것
이제는 서버 이관 시간이 하루 남았다. 어제 남겨둔 이슈를 다시 잡아보자. 어제 끝부분에 물었던 대로 aws cli로 입력한 정보는 terraform의 plugin 중 하나인 aws provider가 인식할 수 있었다. 그러므로 aws cli에서 명령어를 실행해서 정보를 이관하려던 기존 소마 계정의 credential들을 입력해 보자.
aws cli에서 기본으로 사용되는 정보는 다음 명령어를 통해 볼 수 있다고 한다. 명령어를 입력하자 aws의 access key id와 secret access key가 나타났다.
cat ~/.aws/credentials
그러면 해당 프로파일의 이름(나의 경우는 'default')을 .tf 파일에 region(나의 경우는 'ap-northeast-2')과 같이 명시해주면 된다. 이렇게 말이다.
provider "aws" {
region = "ap-northeast-2"
profile = "default"
}
그런데 이렇게만 작성한다고 aws 계정의 모든 것을 가져올 수 있는 건 아니었다. 사실 '가져온다'는 개념이 무엇인지 아직도 모호하기만 하다. 그래서 추가적인 질의를 해 보았다.
그랬더니 GPT는 조금은 모호한 코드를 주었다. 코드는 대략 이런 방식으로 생겼는데, 처음 따옴표에 들어간 단어는 aws 서비스의 세부 리소스를 말하는 것 같았으나 그 다음 따옴표에 무엇이 들어가는 것인지를 잘 이해할 수 없었다. 어쩌면 "rds_instance" 대신에 instance의 이름이 들어가야 하는 것 같았는데, 확신을 얻고 싶어서 한번 더 물어봤다.
# RDS
resource "aws_db_instance" "rds_instance" {
# Import할 때 기본적으로 빈 블록으로 작성
}
알고보니 이는 RDS 인스턴스의 이름과는 관련이 없었다. 이는 terraform에서 가져올 RDS 정보를 어떻게 칭할지를 나타내는 별칭이었다. 'rds_instance'도 썩 나쁘지 않은 별칭이었으므로 그대로 두기로 했다.
그런데 모호한 건 이뿐만이 아니었다. GPT는 RDS resource를 정의할 때는 'import할 때 빈 블록으로 작성'이라는 주석을 달아 주었지만, 그를 제외한 나머지 서비스들은 모두 '~서비스를 가져오기 위한 정의'라는 주석이 있었다. 무언가가 필요하다는 의미였다. 물어보지 않을 수 없었다.
녀석은 이번에야말로 각 서비스 별로 구체적인 예시를 주었다. 우선은 RDS부터 시작해보자면, 중괄호 안에 명시되어야 할 정보로는 identifier(실제 RDS 이름), engine(mysql, postgres와 같은 RDS 엔진), instance_class('db.t3.micro'와 같은 인스턴스 유형), allocated_storage(스토리지의 크기), publicly_accessible(퍼블릭 액세스가 가능한지에 대한 여부) 정보를 제공해 줘야 했다.
나머지 경우도 마찬가지다. 실제 작성한 파일을 참고용으로 한번 올려 본다. 우선 AWS provider를 먼저 선언해 주자. 이게 있어야 AWS resource들을 가져올 수 있다.
그리고 아래에는 resource를 선언한다. RDS부터 선언해 보자. 다음과 같이 선언하고, 명령어를 입력하면 성공적으로 import가 되었다고 뜬다.
terraform import aws_db_instance.rds_instance my-rds-instance # rds instance의 이름
이번에는 Route53을 선언해 보자.
terraform import aws_route53_zone.route53_zone Z1234567890ABCDEFG # route53 hosting zone의 ID
이번에는 ECR(elastic container registry)를 선언해 보자.
terraform import aws_ecr_repository.ecr_repo my-repo # ECR repository 이름
이번에는 ECS(elastic container service)를 가져와 보자. ECS의 경우 cluster, task definition, service를 차례로 정의해야 해서 코드를 제법 작성해 주어야 했다.
terraform import aws_ecs_cluster.ecs_cluster my-ecs-cluster # 클러스터 이름
terraform import aws_ecs_task_definition.ecs_task_definition my-task-family:1 # 태스크 정의 이름
terraform import aws_ecs_service.ecs_service my-service # 서비스 이름
이번에는 EC2 인스턴스 정보를 가져와 보자.
terraform import aws_instance.ec2_instance i-1234567890abcdef0 # EC2 인스턴스 고유 ID
마지막으로 Secrets Manager를 import 해 보자.
terraform import aws_secretsmanager_secret.secret arn:aws:secretsmanager:region:123456789012:secret:my-secret # 보안 암호 ARN
관련된 설정을 import하는 것 까지는 완료했다. 이제는 해당 정보를 새 계정으로 옮기는 방법에 대해 생각해 보자.
'개발 일기장 > SWM Onestep' 카테고리의 다른 글
20241208 TIL: terraform으로 AWS 설정 새로 세팅하기 [진행중] (0) | 2024.12.08 |
---|---|
20241129 TIL: terraform으로 IaC를 통해 AWS 설정 복사하기 [보류] (1) | 2024.11.30 |
20241127 TIL: terraform으로 IaC를 통해 AWS 설정 복사하기 [진행중] (0) | 2024.11.28 |
20241110 TIL: React Native에서 UI Kitten dependency 최대한 제거하면서 디자인 붙이기 (1) | 2024.11.12 |
20241102 TIL: 드디어 에뮬레이터 실행 관련 이슈 청산하고 애플로그인 마무리하기 [진행중] (2) | 2024.11.02 |