継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AWS のリソースを Terraform ファイルに変換する『aws2tf』を使ってみる

タダです.

AWSリポジトリを見ていたら aws2tf というツールを見つけました. Terrafrom を使ってのリソース管理をし始めたのでどんな動きをするかを知りたくてこのツールを使ってみることにしました.この記事で aws2tf のツールをさらっていければと思います.

aws2tf って?

このツールは AWS のアカウントの設定を読み込んで tf ファイルを生成するものです.ツールの中では terraform impotterraform plan を実行して tf ファイルを作っているようです.記事を書いている時点では開発中のステータスです.

Work in progress - please report any issues you find

github.com

使用上の前提条件

aws2tf を使う条件として次のものがあります.AWS CLIjq もツール内部で使っているのかと想像できます.

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 [プロファイル名]

所感

ざっと使ってみて感じたところをまとめてみます.

  • ツールの実態がシェルスクリプト になっており,読み解きやすいツールになっていると感じた
    • scriptsディレクトリ のスクリプトAWS CLI のコマンド群で書かれているため AWS CLI に慣れていればこのツールを使うだけでなくサポートされてないリソースの変換もできそう
  • これは好みの問題と思いますが tf ファイルの生成が1ファイルごとになっているため,例えば VPC のリソースを見ようとするときに各ファイルの中身を見ないとわからない
    • 似たようなツールで TerraformerTerraforming は1ファイルでサポートリソースの情報を入れてくれる

まとめ

aws2tf のツールの概要と実際に使ってみた所感をまとめてみました.冒頭に書いたように現在開発中のツールというところで興味があればフィードバックなどで参加してみるのも良いかもしれません.