もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

実践 Terraformを読んでTerraform勉強中 Vol.3

はじめに

こんばんは。

今回は以下の本を読んで勉強中です。

前回の記事はこちら

kojirooooocks.hatenablog.com

kojirooooocks.hatenablog.com

今回は第4章から第6章です。

バージョンは以下です。

$ terraform --version
Terraform v1.0.3

本題

第4章 全体設計

4章から本格的なTerraformの実装に入ります。

アーキテクチャは以下

  • IAMポリシー, IAMロール
  • S3
  • VPC, NATゲートウェイ, セキュリティグループ
  • ALB, Route53, ACM
  • ECS Fragete
  • ECS Scheduled Tasks
  • KMS
  • SSMパラメータストア
  • ECR, CodeBuild, CodePipeline
  • EC2, Session Manager
  • CloudWatch Logs, Kinesis Data Firehose

使ったことあったりなかったりするものがあって、全部やりきったら普通に本番環境でも使えそうな感じで、ワクワクしています。

というかAWSの知識も付きそうです。

第5章 権限管理

前提のiamの知識が乏しいから本読んでも理解できませんでした...w

ただ、本では AssumeRole を使用していました。これはデプロイ時のみ使うから、AssumeRoleで一時的に権限を付与しているイメージなのでしょうか?

とりあえず実行してみると、問題なく作れていました。

f:id:kojirooooocks:20210814010746p:plain f:id:kojirooooocks:20210814010749p:plain

今まで思考停止でフル権限を持つデプロイ用ユーザーを作ったりしていました... (俺だけじゃないはず!!)

第6章 ストレージ

S3でプラベートバケットやパブリックバケットの作成を学べます。

結構決め打ちでのコードだったので前回習ったような variable でデフォルトや上書きの対応って出来ないかな?と思ったのですが、出来ました。 以下は、パブリックバケットの設定です。

variable "bucket_name" {}
variable "bucket_acl" {}
variable "force_destory" {
  type    = bool
  default = false
}
variable "cors_rule_allowed_origins" {
  type    = list(string)
  default = ["*"]
}
variable "cors_rule_allowed_methods" {
  type    = list(string)
  default = ["GET"]
}
variable "cors_rule_allowed_headers" {
  type    = list(string)
  default = ["*"]
}
variable "cors_rule_max_age_seconds" {
  type    = number
  default = 3000
}

// パブリックバケットの設定
resource "aws_s3_bucket" "public" {
  bucket        = var.bucket_name
  acl           = var.bucket_acl
  force_destroy = var.force_destory

  // CORS設定
  cors_rule {
    allowed_origins = var.cors_rule_allowed_origins
    allowed_methods = var.cors_rule_allowed_methods
    allowed_headers = var.cors_rule_allowed_headers
    max_age_seconds = var.cors_rule_max_age_seconds
  }
}

呼び出し側は以下

module "public_bucket" {
  source                    = "./storage/public"
  bucket_name               = "kojirock-example-public-bucket"
  bucket_acl                = "public-read"
  cors_rule_allowed_origins = ["https://kojirooooocks.hatenablog.com/"]
  cors_rule_allowed_methods = ["GET", "POST", "DELETE", "PUT"]
  cors_rule_max_age_seconds = 5000
  force_destory             = true
}

applyしたところ上手いこといってました。

f:id:kojirooooocks:20210817000652p:plain f:id:kojirooooocks:20210817000717p:plain

終わりに

いまんところ terraform をやってみてすげー便利だなぁと思ったのは terraform destroyterraform fmt --recursive です。

現場からは以上です。