terraform aws, Google Cloudの公開モジュール試用
概要
先日こちらの記事を書きました。
これが我ながらとても気持ち悪い仕上がりになってしまい(気持ち悪いけどもう面倒なので直さない)、当初やりたかったawsとGoogle Cloudのモジュールを使ってリソース作成する、という目的が一切果たせんかったな、と思いながら後日awsとGoogle Cloudの公開モジュールを試しました。
したら思った以上にすんなりとリソース作成ができてしまったので、これは良いぞ!と思い早速で記事でも簡単に書いておこうと思い、以下に試し記録を書き残し。
awsの公開モジュールを使う
こちらのリンクからが探しやすいかなと。
で今回はS3のバケット作成を試そうと思います。
上記リンクから探してくとS3バケットのモジュールはこれだ
-
static web-site hosting
-
access logging
-
versioning
-
CORS
.
.
.
などなどの機能がサポートされてるよ、と書いてあります。 -
S3バケットのサンプル
それで早速サンプルが載ってます。バージョニングが有効なバケットを作るサンプルですね。
module "s3_bucket" {
source = "terraform-aws-modules/s3-bucket/aws"
bucket = "my-s3-bucket"
acl = "private"
control_object_ownership = true
object_ownership = "ObjectWriter"
versioning = {
enabled = true
}
}
上記コードのバケット名だけ変えて、もうそれで試してみよう。
main.tf
に上記コードを記載します。(ファイル名は.tf
なら何でも良い。)
-
準備: providerファイル
あとはawsのproviderのファイルを用意します。
providerファイルの設定については今回は詳細は触れませんがリンク貼っておきます。providerの方は自分もまた使いそうだし -
作業ディレクトリ内はこんな感じで至ってシンプル。
.
├── main.tf
└── provider.tf
-
準備: aws接続の設定
あとは各自の環境に合わせてawsに接続するためのcredentialやらの設定をします。
こちらも詳細は触れませんがリンクを貼っておきます。設定についてはこちらのページが分かりやすいかなと思います。
-
準備: terraform init
モジュールの使用時は一通りtfファイルの設定が終わったらまずterraform init
を実行します。
これでS3バケットのモジュールやらaws providerのpluginやらがインストールされます。 -
いざ apply
terraform apply
出力内容
### 出力省略
Plan: 5 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
module.s3_bucket.aws_s3_bucket.this[0]: Creating...
module.s3_bucket.aws_s3_bucket.this[0]: Creation complete after 2s [id=haga-haga-s3-bucket]
module.s3_bucket.aws_s3_bucket_public_access_block.this[0]: Creating...
module.s3_bucket.aws_s3_bucket_versioning.this[0]: Creating...
module.s3_bucket.aws_s3_bucket_public_access_block.this[0]: Creation complete after 0s [id=haga-haga-s3-bucket]
module.s3_bucket.aws_s3_bucket_ownership_controls.this[0]: Creating...
module.s3_bucket.aws_s3_bucket_ownership_controls.this[0]: Creation complete after 1s [id=haga-haga-s3-bucket]
module.s3_bucket.aws_s3_bucket_acl.this[0]: Creating...
module.s3_bucket.aws_s3_bucket_acl.this[0]: Creation complete after 0s [id=haga-haga-s3-bucket,private]
module.s3_bucket.aws_s3_bucket_versioning.this[0]: Creation complete after 2s [id=haga-haga-s3-bucket]
Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
あっさりできちゃいました。
あとこれ何が嬉しいかって、通常?resource
ブロック使ってS3バケット作成しようとすると、一つのバケットに対してaws_s3_bucket_public_access_block
のリソースとかaws_s3_bucket_versioning
のリソースとかそれぞれ作ってバケット一つ作るにも複数のリソースブロックが必要だったりする訳なんですが、モジュールではこれがオールインワン!(語弊ありそうですが)
今後個人開発やらでterraform使う時はモジュール使おうと誓いました。
Google Cloudの公開モジュールを使う
こちらのリンクからが探しやすいかなと。
Google cloudの方もバケット(cloud storage)でいこう。
するとモジュールはこれかな。
簡単に一つまたは複数のバケットが作れて、バケットに対する基本的な権限設定もできるよといった事が書かれてます。(Google Cloudのことあんま知らんのでちゃんと分かってないですが)
ちなみにシンプルにバケット作るモジュールならこっちのモジュールとの事です。
- GCSバケットのサンプル
module "gcs_buckets" {
source = "terraform-google-modules/cloud-storage/google"
version = "~> 6.1"
project_id = "<PROJECT ID>"
names = ["first", "second"]
prefix = "my-unique-prefix"
set_admin_roles = true
admins = ["group:foo-admins@example.com"]
versioning = {
first = true
}
bucket_admins = {
second = "user:spam@example.com,user:eggs@example.com"
}
}
うむ、たしかに何かしらのIAM設定をしようとしてる感。。。とりあえず今回は何かバケットができればいいので、上記コードからいくつかの行は抜いちゃおう。
set_admin_roles
,admins
,bucket_admins
のパラメータは抜いたコードをmain.tf
として使ってきます。(ファイル名は.tf
なら何でも良い。)
-
準備: Google Cloudコンソールでcloudshell起動
今回Google Cloudの方の試しはcloudshellから行います。なので必要なファイルもcloudshellエディタを使ってきます。先日受けたG-genさんのトレーニングでもcloudshellを使ったハンズオンを行ってて便利さは何となく把握できたので。
詳細は触れませんが、最初からterraform入ってるのと、エディタ機能があること、そのエディタでterraformの構文チェックしてくれる機能も最初から入ってるのがgood!!
ちなみにawsのモジュール使用の時に「準備: aws接続の設定」として記載してたcredentialの設定やらも不要!いいね。
-
準備: providerファイル
Google Cloud用のproviderファイルを用意します
こちらのページなど参考に設定します。
Google Cloud provider
これで必要なファイルの準備はok。
-
準備: terraform init
繰り返しになりますが、モジュールの使用時は一通りtfファイルの設定が終わったらまずterraform init
を実行します。
これでGCSバケットのモジュールやらGoogle Cloud providerのpluginやらをインストール。 -
いざ apply
エディタからターミナルに戻ってterraform apply
です
出力内容
### 出力省略
Plan: 2 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
module.gcs_buckets.google_storage_bucket.buckets["first"]: Creating...
module.gcs_buckets.google_storage_bucket.buckets["second"]: Creating...
module.gcs_buckets.google_storage_bucket.buckets["second"]: Creation complete after 1s [id=bucket-hogege-second]
module.gcs_buckets.google_storage_bucket.buckets["first"]: Creation complete after 1s [id=bucket-hogege-first]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
こちらもあっさりできました!
Google Cloudのことよく分かってなくてもできちゃう。
「terraformモジュールこれからも使う」と再び誓いました。
さいごにぼやき
今回はawsもGoogle Cloudも単純なバケット作成のみ、というところでしたが公開モジュールを使って簡単にリソースが作れることは把握できました。
特にawsの複数リソースが必要だったものが単一ブロックで済むようになるのは嬉しかったなぁ。
今度はこの公開モジュールをあれこれ使ってWEBアプリの一般的な構成を一通り作ってみたいなぁ、と展望が生まれた。
あと今回全く触れてないですが、モジュールの使い方は公開されてるリモートのよりローカルファイルをモジュールとして扱う方が難易度高いです。こっちも改めて試さんと。
以上
Discussion