Terraformは、HashiCorp社によって、オープン化されたIaC(infrastructure as code)ツールです。
DevOps RoadmapでもInfrastructure Provisioningの推奨ツールとして掲載されており、ITインフラエンジニア、DevOpsエンジニア、SREなどの職種に従事される方にぴったりのツールです。
- ドリコム社内で利用する新米SREのためのレクチャー用コンテンツを元に、オープン可能の状態にした物
- ハンズオン経由でterraformの使い方、動きを肌感覚で取り入れるための練習用リポジトリ
- ドリコム式のterraform利用方法が含まれており、あくまでもドリコム色の書き方や利用方法であることを予めご了承ください
- 利用されるAWSリソース:
- IAM
- S3
- Api-gateway
- Lambda function
- ECR
- App Runner
- Terraform初心者
- 新米DevOps engineer
- 新米SRE
- Terminalアプリ(iTerm2やwsl2など)
- curl
- AWSアカウント
- ブラウザ(AWSコンソールログイン用)
- Terraform(0.12+)
- ここで1.0.0バージョンを利用してるが、適宜に変更していただくことが可能
- docker
- AWSクレデンシャルの設置
- service_account_id = ""
- aws_access_key = ""
- aws_secret_key = ""
- region = "ap-northeast-1"
$ mv terraform.tfvars.example terraform.tfvars
# 実際のAWS認証情報を入れる
$ vi terraform.tfvars
- ドリコムでは、各環境(staging, productionなど)のリソースを相互に影響されないようにするため、terraform workspace機能を利用し、各環境のリソース隔離を実施
- まずIAM, s3 bucketなどの各環境の共通リソースを作るためのworkspace commonにて、plan&applyを体験していただく
- 次に、lambda-function, api-gateway, ecrなどの通信を司るリソースを作るために、workspace systemにて、plan&applyを体験していただく
- 最後、apprunnerなどのメインディッシュをproduction環境に作るためのworkspace productionにて、plan&applyを体験していただく
- 初期のファイルで加え、自由に.tfファイルを追加してもらって、terraformの機能を体験していただく
- issueベースに実現したい機能をディスカッションし、applyできるまでcommitを模索していただく
- 一通り触れて頂いたら、無駄なコストを発生させないため、リソースの掃除をお忘れなく :)
ここではローカル環境にtfstateファイルを保存されてるように見受けられるが、
実際社内で使われてる時、plan & applyのステップは全部CI(ドリコムの場合はGitlab-CI)に任せて、tfstateファイルも管理されてるが、公開するといろいろまずいのでここでは割愛させていただきます
$ git clone git@github.com:drecom/terraform-onboarding.git
$ cd terraform-onboarding
$ mv terraform.tfvars.example terraform.tfvars
# 実際のAWS認証情報を入れる
$ vi terraform.tfvars
# 各varsが基本的に下記ファイルに定義されており、まず一通り目を通して頂いて、適宜に編集してください
$ vi variables.tf
$ terraform init
# show all existing workspaces
$ terraform workspace list
$ terraform workspace select common
$ terraform plan
$ terraform apply
drecom/demo-boxのリポジトリをcloneし、READMEを参考に実行してください
$ terraform init
$ terraform workspace select system
$ terraform plan
$ terraform apply
# on workspace system
$ terraform output | grep deployment-invoke-url | awk '{print $3}' | xargs curl
{"drecom": "with entertainment <TIME_NOW+0900>"}
sample-appのREADMEを参考に、イメージをpushしてください
$ terraform workspace select production
$ terraform plan
# 数分かかります...
$ terraform apply
- apprunner-url
$ terraform workspace select production
# switch “production = false” to “production = true”
$ vi ec2_variables.tf
$ terraform plan
# 数分かかります...
$ terraform apply
# インスタンスの状態がhealthyになるまでしばらくお待ちを(3分程度)
# AWS consoleから確認できます
$ terraform output | grep practice-ec2-public-dns | awk '{print $3}' | xargs curl
$ terraform workspace select production
$ terraform destroy
$ terraform workspace select system
$ terraform destroy
$ terraform workspace select common
$ terraform destroy