はじめに
こんばんは。
今回は以下の本を読んで勉強中です。
前回の記事はこちら
今回は第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で一時的に権限を付与しているイメージなのでしょうか?
とりあえず実行してみると、問題なく作れていました。
今まで思考停止でフル権限を持つデプロイ用ユーザーを作ったりしていました... (俺だけじゃないはず!!)
第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したところ上手いこといってました。
終わりに
いまんところ terraform をやってみてすげー便利だなぁと思ったのは terraform destroy
と terraform fmt --recursive
です。
現場からは以上です。