タダです.
AWS のリポジトリを見ていたら aws2tf
というツールを見つけました. Terrafrom を使ってのリソース管理をし始めたのでどんな動きをするかを知りたくてこのツールを使ってみることにしました.この記事で aws2tf
のツールをさらっていければと思います.
aws2tf って?
このツールは AWS のアカウントの設定を読み込んで tf ファイルを生成するものです.ツールの中では terraform impot
と terraform plan
を実行して tf ファイルを作っているようです.記事を書いている時点では開発中のステータスです.
Work in progress - please report any issues you find
使用上の前提条件
aws2tf
を使う条件として次のものがあります.AWS CLI
や jq
もツール内部で使っているのかと想像できます.
macOS 10.15.7 以上
AWS CLI v2 バージョン 2.1.15 以上かつ読み取り権限のアクセスを持つこと
terraform バージョン v0.14.3 以上
jq バージョン 1.6 以上
サポートされているリソース
記事執筆時点のサポートされているリソースは以下のものです.
- App Mesh
- Athena
- AutoScaling
- CloudTrail
- CloudWatch Logs
- CodeBuild
- CodePipeline
- Config
- Directory Services
- EC2
- ECS
- EKS
- ALB
- NLB
- Glue
- IAM
- KMS
- Lambda
- Resource Groups
- RDS
- Route53
- S3
- Sercice Discovery
- VPC
aws2tf の実行
早速ツールを使ってみます.サポートされている全リソースの取り込みを行うのは下記コマンド1発で終わりです.scripts
ディレクトリ下のget
から始まるスクリプトが実行されます.
$ ./aws2tf.sh ~中略~ --------------------------------------------------------------------------- aws2tf output files are in generated/tf.[アカウント番号] --------------------------------------------------------------------------- $ tree scripts scripts ├── 030-get-iam-users.sh ├── 034-get-iam-groups.sh ├── 050-get-iam-roles.sh ├── 051-get-iam-role-policies.sh ├── 052-get-iam-attached-role-policies.sh ├── 055-get-iam-policies.sh ├── 056-get-instance-profile.sh ├── 060-get-s3.sh ├── 061-get-s3-policies.sh ├── 062-get-s3-aps.sh ├── 070-get-cw-log-grp.sh ├── 080-get-kms-key.sh ├── 081-get-kms-alias.sh ├── 090-get-cloudtrail.sh ├── 100-get-vpc.py ├── 100-get-vpc.sh ├── 101-get-vpc-cidr.sh ├── 105-get-subnet.sh ├── 110-get-security-group.sh ├── 111-get-dhcp-options.sh ├── 120-get-igw.sh ├── 130-get-natgw.sh ├── 135-get-transit-gateway-vpc-attachments.sh ├── 140-get-route-table.sh ├── 141-get-route-table-associations.sh ├── 161-get-vpce.sh ├── 201-get-transit-gateway.sh ├── 202-get-transit-gateway-route-tables.sh ├── 209-get-transit-gateway-route-table-associations.sh ├── 210-get-vpcpeer.sh ├── 220-get-custgw.sh ├── 225-get-cvpn-endpoints.sh ├── 227-get-vpn-connections.sh ├── 240-get-directories.sh ├── 250-get-instances.sh ├── 252-get-c9.sh ├── 255-get-launch-templates.sh ├── 260-get-autoscaling-groups.sh ├── 300-get-eks-cluster.sh ├── 350-get-ecs-cluster.sh ├── 351-get-ecs-task.sh ├── 360-get-appmesh-mesh.sh ├── 410-get-config-recorder.sh ├── 412-get-config-delivery_channel.sh ├── 414-get-config-recorder-status.sh ├── 420-get-config-rule.sh ├── 440-get-ssm-doc.sh ├── 442-get-ssm-association.sh ├── 601-get-rds-ins.sh ├── 611-get-dms-ins.sh ├── 612-get-dms-endp.sh ├── 613-get-dms-tasks.sh ├── 625-get-code-build-project.sh ├── 629-get-code-pipeline.sh ├── 650-get-glue.sh ├── 660-athena-queries.sh ├── 700-get-lambda-function.sh ├── 800-get-cloudfront-dist.sh ├── 810-get-wafv2.sh.tfbug
スクリプトが終わると generated/tf.[アカウント番号]
ディレクトリ下に tf ファイルが作られます.また,スクリプトの実行結果はimport.log
に残るようです.スクリプトの結果はすごい勢いで流れるのでどこで成功,失敗しているのかをみるのに良さそうです.
tree generated/tf.[アカウント番号] generated/tf.[アカウント番号] ├── aws.tf ├── aws_autoscaling_group__xxx.tf ~中略~ ├── data │ ├── aws_xxx.json ~中略~ ├── import.log ├── import_.sh ├── terraform.tfstate └── tf2.tmp
個別実行をしたい場合は次のようにサポートされているようなので,特定リソースの tf ファイルを生成されます.
- Transit Gateway リソース :
./aws2tf.sh -t tgw -i transit-gateway ID
- VPC リソース:
./aws2tf.sh -t vpc -i VPC ID
- EKS リソース:
./aws2tf -t eks -i Cluster-Name
- ECS リソース:
./aws2tf -t ecs -i Cluster-Name
- IAM リソース:
./aws2tf -t iam
- KMS リソース:
./aws2tf -t kms
- Code 系リソース:
./aws2tf -t code
- AppMesh リソース:
./aws2tf -t appmesh
また,アカウントが複数ある場合は AWS CLI のプロファイルを使ってツールを実行します.リージョンもパラメーターで指定できます.
./aws2tf.sh -r [リージョン名] -p [プロファイル名]
所感
ざっと使ってみて感じたところをまとめてみます.
- ツールの実態がシェルスクリプト になっており,読み解きやすいツールになっていると感じた
- これは好みの問題と思いますが tf ファイルの生成が1ファイルごとになっているため,例えば VPC のリソースを見ようとするときに各ファイルの中身を見ないとわからない
- 似たようなツールで Terraformer や Terraforming は1ファイルでサポートリソースの情報を入れてくれる
まとめ
aws2tf
のツールの概要と実際に使ってみた所感をまとめてみました.冒頭に書いたように現在開発中のツールというところで興味があればフィードバックなどで参加してみるのも良いかもしれません.