【AWS】構成情報をぶっこ抜くterraformerは運用効率化の救世主になるのか?
こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。
一度構築した環境をterraformのcodeに落とし込むのはかなり骨が折れますよね。
エンタープライズレベルの環境でリバースエンジニアリングをしながらterraform化を行うのは、
正直難しいという実感です。
かといって、最初からterraformでcodeを書きながらリソースを作るのは時間がかかります。
マネジメントコンソールでポチッとリソース作成できるのに、code書いてPull Requestを通さないといけないんだからそりゃそうですよね。
しかし、マネジメントコンソールでぽちぽちを続けると永遠に自動化できないですし、サービスが大きくなるにつれて工数がリニアに増えて行きます。
しかし、terraformerというツールを使うと既存のAWS環境をterraformのcodeに
変換できるみたいなので検証しようと思います。
- TL;DR(要約)
- terraformerとは何か?
- 使用イメージ
- install
- 環境変数の設定
- 初期化
- vpc,subnet,igw,sg,alb,ec2_instanceを出力する
- 出力
- 対応しているリソースは?
TL;DR(要約)
初期構築時に作る際はマネジメントコンソール上でリソースを作り、
運用フェーズにはいったらterraformerでterraform化を行う、という使い方ができそうです。
小規模なサービスならterraformerでterraform化を行い、その後は、terraformで運用することは現実的だと思います。
ただ、エンタープライズレベルのサービスで使うとなるとそもそも存在するリソースが多いと思うので、terraformerを使ってcodeに落とした後、被って書かれている箇所をfor文でまとめたり、変数化したり、tfstateをs3においたり等、リファクタリングする手間がまだまだかかると思います。
terraformerとは何か?
githubには以下のように書かれています。
既存のクラウド環境をTerraform化できるツールです。google のエンジニアに寄って書かれているのでクオリティは高いでしょう。
A CLI tool that generates tf and tfstate files based on existing infrastructure (reverse Terraform).
Disclaimer: This is not an official Google product
Status: beta - we still need to improve documentation, squash some bugs, etc...
Created by: Waze SRE
ちなみにソースはこちらで公開されています。
環境変数の設定
Credential情報を環境変数にセットします。
~/tmp/terraformer ❯ export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXX ~/tmp/terraformer ❯ export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXX ~/tmp/terraformer ❯ export AWS_DEFAULT_REGION=ap-northeast-1
初期化
~/tmp/terraformer ❯ echo 'provider "aws" {}' > init.tf ~/tmp/terraformer ❯ terraform init
vpc,subnet,igw,sg,alb,ec2_instanceを出力する
~/tmp/terraformer ❯ terraformer import aws --resources=vpc,subnet,igw,sg,alb,ec2_instance --connect=true --regions=ap-northeast-1
出力
実行が成功すると以下のように出力されます。
~/tmp/terraformer ❯ tree -L 5 . ├── generated │ └── aws │ ├── alb │ │ └── ap-northeast-1 │ │ ├── lb.tf │ │ ├── lb_listener.tf │ │ ├── lb_listener_rule.tf │ │ ├── lb_target_group.tf │ │ ├── lb_target_group_attachment.tf │ │ ├── outputs.tf │ │ ├── provider.tf │ │ ├── terraform.tfstate │ │ └── variables.tf │ ├── ec2_instance │ │ └── ap-northeast-1 │ │ ├── instance.tf │ │ ├── outputs.tf │ │ ├── provider.tf │ │ ├── terraform.tfstate │ │ └── variables.tf │ ├── igw │ │ └── ap-northeast-1 │ │ ├── internet_gateway.tf │ │ ├── outputs.tf │ │ ├── provider.tf │ │ ├── terraform.tfstate │ │ └── variables.tf │ ├── sg │ │ └── ap-northeast-1 │ │ ├── outputs.tf │ │ ├── provider.tf │ │ ├── security_group.tf │ │ └── terraform.tfstate │ ├── subnet │ │ └── ap-northeast-1 │ │ ├── outputs.tf │ │ ├── provider.tf │ │ ├── subnet.tf │ │ ├── terraform.tfstate │ │ └── variables.tf │ └── vpc │ └── ap-northeast-1 │ ├── outputs.tf │ ├── provider.tf │ ├── terraform.tfstate │ └── vpc.tf └── init.tf
エラー対応
下記のエラーが出力される場合は、A/S Keyに割り当てられている権限がたりません。Adminレベルの権限が必要です。
❯ terraformer import aws --resources=vpc,subnet --connect=true --regions=ap-northeast-1 2019/09/25 11:56:58 aws importing region ap-northeast-1 2019/09/25 11:56:58 aws importing... vpc 2019/09/25 11:56:59 UnauthorizedOperation: You are not authorized to perform this operation. status code: 403, request id:
対応しているリソースは?
結構満遍なくあります。
基本的にterraformのaws-providerが対応していればぶっこぬけるようです。
つまりterraformで作れるAWSリソースならterraformerは対応している、ということです。
https://github.com/GoogleCloudPlatform/terraformer#use-with-aws
結構アップデートされているので引き続きwatchして行きたいと思います。
以上です
Infrastructure as Code ―クラウドにおけるサーバ管理の原則とプラクティス
- 作者: Kief Morris,宮下剛輔,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/03/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る