今日はInfrastructure as Code(IaC)ツールの一つであるTerraformを使用してAWS S3バケットを作成する方法を2つご紹介。一つはTerraformのモジュールを使用する方法、もう一つは直接コーディングを行う方法です。それぞれの違いと特徴についても触れていきます。
1. Terraformとは
Terraformは、HashiCorp社が開発しているオープンソースのIaCツールです。このツールを使用すると、クラウドリソースの作成、更新、削除をプログラムコードにより管理することができます。それにより、インフラの設定を明示的で再利用可能な形で表現することが可能となります。
2. AWS S3バケットの作成: モジュールを使用しないパターン
まずは、Terraformでモジュールを使わずに直接S3バケットを作成する方法を見てみましょう。
provider "aws" { region = "ap-northeast-1" } resource "aws_s3_bucket" "b" { bucket = "bucket-name" acl = "private" tags = { Name = "My bucket" Environment = "Dev" } }
この例では、providerブロックを使用してAWSを対象とし、リージョンをap-northeast-1に設定しています。次にresourceブロックを使用してS3バケットを作成し、バケットの名前とアクセス権限、タグを指定しています。
3. AWS S3バケットの作成: モジュールを使用するパターン
次に、モジュールを使用してS3バケットを作成する例を見てみましょう。
provider "aws" { region = "ap-northeast-1" } module "s3_bucket" { source = "terraform-aws-modules/s3-bucket/aws" bucket = "bucket-name" acl = "private" tags = { Name = "My bucket" Environment = "Dev" } }
ここでは、同様にproviderブロックでAWSを対象とし、リージョンをus-west-2に設定しています。しかし、バケットを作成する際にはmoduleブロックを使用し、モジュールのソースとして公式のS3バケットモジュールを指定しています。
4. モジュールの利用と直接コーディングの違い
モジュールを使用する場合と直接コードを書く場合の違いは何かというと、主に以下の点になります。
- 再利用性: モジュールは再利用可能なコードの塊です。同じ設定のバケットを複数作成したい場合や、他のプロジェクトでも同様のリソースを作成したい場合にはモジュールが便利です。
- 保守性: モジュールは一度定義すれば何度でも利用できます。したがって、変更が必要な場合にはモジュールの定義を一度だけ更新すれば、それを利用している全てのリソースに対する変更が一度に行えます。
- コードの短さと明瞭さ: モジュールを使用すると、コードが短くなり、それぞれのリソースが何をするためのものなのかが明瞭になる可能性があります。
一方で、直接コードを書く場合は、モジュールが提供している機能以上の細かなカスタマイズが可能です。具体的な設定や制御を自由に行いたい場合には、直接コードを書く方が適しています。
以上がTerraformを用いたS3バケットの作成方法と、そのモジュールの利用と直接コーディングの比較になります。Terraformを使用する際には、自分の要件とタスクに合わせて適切な方法を選択することが重要なんですが、今回の例では全くと言っていいほど違いが出ませんでしたね。
別の題材の時には違いが出るような例を準備したいと思います。
ではでは~。