terraform -コード構造
前の地形は、私たちにterraformへの基本的な導入を与えました.また、最小のコードでAWS EC 2インスタンスを作成するために単純な地形形式コードを書くことについて議論しました.
つの
符号モジュール化のための他の決定因子は以下の通りである
プロジェクトの複雑さ
に関係する地形形態プロバイダーのカウント terraform によって維持されるべき資源のカウント
基盤変更のケイデンス-毎日/毎週/毎月 展開戦略- CI/CDパイプライン、Gitopsなど
ソースコードを論理的に分割することを推奨します. のプロバイダー構成を含みます を作成するために、モジュール、locals、およびデータソースを呼び出します
最初のterraformコードを参照してください、そして、我々が論理的にそれをさらに壊すことができる方法を理解しましょう.
上記のように、レッドブロックは、
緑のブロックは、
私たちがIRACとしてterraformを扱うので、我々はhardcodingsがないことを確実としなければなりません.これらは
既定値は、変数に対して(上記のように)設定できます.ただし、実行時にコードを実行しながらこの値をオーバーライドできます.
また、Torraformは
バルク値については、変数定義ファイルで値を指定するのが便利です(ファイル名を
terraformも自動的に変数定義ファイルの数をロードします.
ファイルは名のファイルは この変数を使用して、hardcodingsを置き換えることができます.
任意のコストを避けるために作成されたインフラストラクチャを削除することを忘れないでください.
将来の投稿では、terraformモジュールを調べます.
つの
main.tf
ファイルのすべてのコードベースを維持することは初心者にとって良いです.しかし、このアプローチは、私たちの根底にあるインフラストラクチャが成長するにつれて、保全性の問題につながります.さらに、実際の状況では、複数の環境(例えばDTAP - dev/test/accept/production)に対処する必要があります.符号モジュール化のための他の決定因子は以下の通りである
プロジェクトの複雑さ
に関係する地形形態プロバイダーのカウント
ソースコードを論理的に分割することを推奨します.
provider.tf
-ルートモジュールmain.tf
-すべてのリソースvariables.tf
- main.tf
で使用される変数宣言を含みますoutputs.tf
- main.tf
に作成されたリソースからの出力を含みますterraform.tfvars
-デフォルト変数値を提供する変数定義を含みます.Terraformは自動的にこれらのファイルから変数をロードします.上記のように、
provider.tf
の一部ですmain.tf
の一部です入力変数値の使用
私たちがIRACとしてterraformを扱うので、我々はhardcodingsがないことを確実としなければなりません.これらは
variables.tf
に設定しなければなりません.すべての変数に対して以下のブロックを定義する必要があります.variable "aws_region" {
type = string
description = "AWS Region"
# default value is optional.
default = "us-east-1"
}
コマンドライン上の変数
既定値は、変数に対して(上記のように)設定できます.ただし、実行時にコードを実行しながらこの値をオーバーライドできます.
terraform apply -var aws_region="eu-west-1"
環境変数
また、Torraformは
TF_VAR_
という名前の環境変数のための独自のプロセスの環境を検索し、続いて宣言された変数の名前を検索できます.これは自動化でterraformを実行するときに便利です.export TF_VAR_aws_region = eu-west-1
変数定義(. tfvars )ファイル
バルク値については、変数定義ファイルで値を指定するのが便利です(ファイル名を
.tfvars
または.tfvars.json
に終了します).terraformも自動的に変数定義ファイルの数をロードします.
ファイルは
terraform.tfvars
またはterraform.tfvars.json
という名前のファイルです..auto.tfvars
または.auto.tfvars.json
で終わる.region = var.aws_region
次のようにしてコード投稿書式を設定しますプロバイダ。TF
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~>3.0"
}
}
}
provider "aws" {
region = var.aws_region
default_tags {
tags = {
"Environment" = "dev"
"Owner" = "g33kzone"
}
}
}
変数。TF
variable "aws_region" {
type = string
description = "AWS Region"
}
variable "instance_type" {
type = string
description = "AWS EC2 Instance Type"
}
variable "aws_ec2_ami" {
type = string
description = "EC2 AMI for Amazon Linux 2"
}
メイン.TF
resource "aws_instance" "web" {
instance_type = var.instance_type
ami = var.aws_ec2_ami
tags = {
"Name" = "aws-ec2-demo"
}
}
地形TFVARS
aws_region = "us-east-1"
instance_type = "t2.micro"
aws_ec2_ami = "ami-04d29b6f966df1537"
我々はコーディングを行っています.このterraformコードを以下のコマンドで実行しましょう.# open your shell in the same project folder
# download the terraform core components
# and initialize terraform in this directory
terraform init
# Validate changes to be made in AWS after the execution
terraform plan
# -auto-approve is used to skip manual approval prompt
terraform apply -auto-approve
非常に重要
クリーンアップ
任意のコストを避けるために作成されたインフラストラクチャを削除することを忘れないでください.
# running this command will destroy all the resources
terraform destroy -auto-approve
ギタブレポ将来の投稿では、terraformモジュールを調べます.
Reference
この問題について(terraform -コード構造), 我々は、より多くの情報をここで見つけました https://dev.to/g33kzone/terraform-code-structure-3nhjテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol