TerraformingでAWSのS3バケットをTerraform化してみる

Terraformというインフラをコードで管理できるツールがあります。で、Terraformingという既に構築済みのインフラをTerraformのコードで管理できるように変換できるジェネレーターツールもあります。便利な世の中ですね。
ということでとりあえず使ってみました。

Terraformingのインストール

$ gem install terraforming

これだけです。
もちろんGemfileに以下のように記述することで、bundlerからインストールすることも可能です。

gem 'terraforming'

インストールに成功していれば、以下のように表示されます。

$ terraforming 
Commands:
  terraforming asg             # AutoScaling Group
  terraforming dbpg            # Database Parameter Group
  terraforming dbsg            # Database Security Group
  terraforming dbsn            # Database Subnet Group
  terraforming ec2             # EC2
  terraforming ecc             # ElastiCache Cluster
  terraforming ecsn            # ElastiCache Subnet Group
  terraforming eip             # EIP
  terraforming elb             # ELB
  terraforming help [COMMAND]  # Describe available commands or one specific command
  terraforming iamg            # IAM Group
  terraforming iamgm           # IAM Group Membership
  terraforming iamgp           # IAM Group Policy
  terraforming iamip           # IAM Instance Profile
  terraforming iamp            # IAM Policy
  terraforming iampa           # IAM Policy Attachment
  terraforming iamr            # IAM Role
  terraforming iamrp           # IAM Role Policy
  terraforming iamu            # IAM User
  terraforming iamup           # IAM User Policy
  terraforming igw             # Internet Gateway
  terraforming lc              # Launch Configuration
  terraforming nacl            # Network ACL
  terraforming nat             # NAT Gateway
  terraforming nif             # Network Interface
  terraforming r53r            # Route53 Record
  terraforming r53z            # Route53 Hosted Zone
  terraforming rds             # RDS
  terraforming rs              # Redshift
  terraforming rt              # Route Table
  terraforming rta             # Route Table Association
  terraforming s3              # S3
  terraforming sg              # Security Group
  terraforming sn              # Subnet
  terraforming sqs             # SQS
  terraforming vgw             # VPN Gateway
  terraforming vpc             # VPC

Options:
  [--merge=MERGE]                                # tfstate file to merge
  [--overwrite], [--no-overwrite]                # Overwrite existng tfstate
  [--tfstate], [--no-tfstate]                    # Generate tfstate
  [--profile=PROFILE]                            # AWS credentials profile
  [--region=REGION]                              # AWS region
  [--use-bundled-cert], [--no-use-bundled-cert]  # Use the bundled CA certificate from AWS SDK

Terraformingする

では早速Terraform化してみましょう。
Terraformingではリソース毎にコマンドを実行する形になります。

例えばS3のバケットをTerraformingする場合は以下のようになります。

$ terraforming --profile YOUR_AWS_PROFILE_NAME s3
resource "aws_s3_bucket" "wp-kyoto" {
    bucket = "wp-kyoto"
    acl    = "private"
}

これだけではCLI上に表示されるのみとなりますので、tfファイルとしてエクスポートさせておきましょう。

$ terraforming --profile YOUR_AWS_PROFILE_NAME s3 > s3.tf

--tfstateオプションを利用することで、tfstate形式でも出力が可能です。

$ terraforming --profile YOUR_AWS_PROFILE_NAME s3 --tfstate > s3.tfstate

AWSの全リソースぶっこ抜き

ちなみにドキュメントを見ると、terraformingが対応しているすべてのリソースをtfファイル化するスクリプトがあったりします。

$ terraforming help | grep terraforming | grep -v help | awk '{print "terraforming", $2, "--profile", "YOUR_AWS_PROFILE", ">", $2".tf";}' | bash

YOUR_AWS_PROFILEのところを、自分のaws-cliのプロファイル名にすればOKです。

実行すると、以下のようにリソース毎にtfファイルを吐き出してくれます。

$ tree
.
├── asg.tf
├── dbpg.tf
├── dbsg.tf
├── dbsn.tf
├── ec2.tf
├── ecc.tf
├── ecsn.tf
├── eip.tf
├── elb.tf
├── iamg.tf
├── iamgm.tf
├── iamgp.tf
├── iamip.tf
├── iamp.tf
├── iampa.tf
├── iamr.tf
├── iamrp.tf
├── iamu.tf
├── iamup.tf
├── igw.tf
├── lc.tf
├── nacl.tf
├── nat.tf
├── nif.tf
├── r53r.tf
├── r53z.tf
├── rds.tf
├── rs.tf
├── rt.tf
├── rta.tf
├── s3.tf
├── sg.tf
├── sn.tf
├── sqs.tf
├── vgw.tf
└── vpc.tf

Follow me!

Okamoto Hidetaka
デジタルキューブのインフラエンジニア。勉強会に和太鼓の練習から直行することが多く「太鼓の人」とかよばれてます。 思いつきで公式ディレクトリにテーマやプラグインをアップしたりテーマレビューやったりしています。 AWS / WordPress / LinkedOpenData周りで活動していて、APIをどうこうして何か作るというのが多いです。 ひとこと
mautic is open source marketing automation