terrafomer에서 기존 자원을 캡처하는 절차
4334 단어 terraformerIaCTerraformAWS
1. terraformer로 캡처
필요한 리소스를 terraformer로 가져옵니다.
$ terraformer import aws --resources=hoge --profile=fuga --path-pattern ./
2. 상태 mv에서 리소스 이름을 관리하기 쉬운 이름으로 변경
terraformer가 생성하는 resoure명은 기존 자원의 ID로부터 생성하거나 이해하기 어렵기 때문에 state mv로 변경한다.
모든 리소스에 대해 수행 (힘든)
$ terraform state mv aws_s3_bucket.tfer--abcdefghijklmn aws_s3_bucket.fuga
3. 필요에 따라 모듈화
기존의 resoure를 module로 하여 관리하기 쉽게 한다.
또는 이미 모듈이 있다면 그것을 사용하여 리소스를 다시 작성할 수 있습니다.
4. provider를 replace한다
자신은 단계 3에서 module에 다시 쓴 직후에 plan을 실행하면 아래와 같은 에러가 나왔다.
$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
Error: Provider configuration not present
To work with aws_s3_bucket.hoge its original provider
configuration at provider["registry.terraform.io/-/aws"] is required, but it
has been removed. This occurs when a provider configuration is removed while
objects created by that provider still exist in the state. Re-add the provider
configuration to destroy aws_s3_bucket.hoge, after which you
can remove the provider configuration again.
아무래도 terraformer가 import할 때에, provider로서 옛의 형식
registry.terraform.io/-/aws
로 받아들여 버리는 것 같은?그래서 terraform v0.13 이후에서 사용되는 새로운 provider 형식
registry.terraform.io/hashicorp/aws
로 변경할 필요가 있다.$ terraform state replace-provider 'registry.terraform.io/-/aws' 'registry.terraform.io/hashicorp/aws'
5. state mv에서 resource에서 module로 변경
단지 resource에서 module로 재작성했을 뿐이라고 terraform은 차분을 검지할 수 없고, destroy & add하려고 하기 때문에, state mv로 resource와 module를 묶어 준다.
$ terraform state mv aws_acm_certificate.hoge module.acm_hoge.aws_acm_certificate.acm
6. terraform plan에서 차이가 나오지 않는지 확인
$ terraform plan
...
...
Plan: 0 to add, 0 to change, 0 to destroy.
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
7. backend를 s3 등으로 변경
terraformer는 디폴트라고 backend를 local로 해 버리므로, s3등으로 변경해 누구라도 만지게 한다.
backend.tf
terraform {
backend "s3" {
bucket = "hoge-backend"
key = "tfstate.json"
region = "ap-northeast-1"
}
}
$ terraform init --reconfigure
여담
처음에는 단계 4의 오류를 모르게 괴롭혔다.
최종적으로 아래의 stackoverflow를 참고로 해 해결.
h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 63590836 / 슈 tch - thora rm - 0 - 12 - 6 - 및 - 0 - 13 - 0 - ゔ ぇ s - m p 로 ぃ기 스트리 - 라라 rm - 이오 누
그리고 terraformer로 가져오면 매번 resource를 mv해야 하는 것은 힘들다.
prefix를 사전에 준다든가 해도 좋은 느낌의 이름을 붙이고 싶지만, 엄밀하게는 어려운 것일까라고 생각하거나.
terraformer에서의 흡수는 완력이 필요하네요. 네.
Reference
이 문제에 관하여(terrafomer에서 기존 자원을 캡처하는 절차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bbq-all-stars/items/3a7447d6763a9f863d8e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)