ನೇಮಿಂಗ್ conventionಗಳು
ಜನರಲ್ conventionಗಳು
ಎಲ್ಲೆಡೆ - (ಡ್ಯಾಶ್) ಬದಲಿಗೆ _ (ಅಂಡರ್ಸ್ಕೋರ್) ಬಳಸಿ (ಸಂಪನ್ಮೂಲ ಹೆಸರುಗಳು, ಡೇಟಾ ಮೂಲ ಹೆಸರುಗಳು, ವೇರಿಯಬಲ್ ಹೆಸರುಗಳು, ಔಟ್ಪುಟ್ಗಳು, ಇತ್ಯಾದಿ).
Lowercase ಅಕ್ಷರಗಳು ಮತ್ತು ಸಂಖ್ಯೆಗಳನ್ನು ಬಳಸಲು ಆದ್ಯತೆ ನೀಡಿ (UTF-8 ಅನ್ನು ಬೆಂಬಲಿಸಿದರೂ ಸಹ).
ಸಂಪನ್ಮೂಲ ಮತ್ತು ಡೇಟಾ ಮೂಲ ಅರ್ಗುಮೆಂಟ್ ಗಳು (arguments)
ಸಂಪನ್ಮೂಲದ ಹೆಸರಿನಲ್ಲಿ ಸಂಪನ್ಮೂಲ ಪ್ರಕಾರವನ್ನು ಪುನರಾವರ್ತಿಸಬೇಡಿ (ಭಾಗಶಃವಾಗಿಯೂ ಅಲ್ಲ ಅಥವಾ ಸಂಪೂರ್ಣವಾಗಿಯೂ ಅಲ್ಲ):
`resource "aws_route_table" "public" {}``resource "aws_route_table" "public_route_table" {}``resource "aws_route_table" "public_aws_route_table" {}`ಹೆಚ್ಚಿನ ವಿವರಣಾತ್ಮಕ ಮತ್ತು ಸಾಮಾನ್ಯ ಹೆಸರು ಲಭ್ಯವಿಲ್ಲದಿದ್ದರೆ ಅಥವಾ ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್ ಈ ಪ್ರಕಾರದ ಒಂದೇ ಸಂಪನ್ಮೂಲವನ್ನು ರಚಿಸಿದರೆ ಸಂಪನ್ಮೂಲ ಹೆಸರನ್ನುthis ಎಂದು ಹೆಸರಿಸಬೇಕು. (ಉದಾ, AWS VPC ಮಾಡ್ಯೂಲ್ನಲ್ಲಿ
aws_nat_gatewayಪ್ರಕಾರದ ಒಂದೇ ಸಂಪನ್ಮೂಲವಿದೆ ಮತ್ತು typeaws_route_tableನ ಬಹು ಸಂಪನ್ಮೂಲಗಳು ಇವೆ . ಆದ್ದರಿಂದaws_nat_gatewayಅನ್ನು this ಎಂದು ಹೆಸರಿಸಬೇಕು ಮತ್ತುaws_route_tableಹೆಚ್ಚು ವಿವರಣಾತ್ಮಕ ಹೆಸರುಗಳನ್ನು ಹೊಂದಿರಬೇಕು -(private,public,database).ಹೆಸರುಗಳಿಗೆ ಯಾವಾಗಲೂ ಏಕವಚನ ನಾಮಪದಗಳನ್ನು ಬಳಸಿ.
ಬಳಕೆ: ಆರ್ಗ್ಯುಮೆಂಟ್ valueಗಳ ಒಳಗೆ. value ಮಾನವನಿಗೆ ಕಾಣುವ ಸ್ಥಳಗಳಲ್ಲಿಇರಬೇಕು(ಉದಾ, RDS ನಿದರ್ಶನದ DNS ಹೆಸರಿನ ಒಳಗೆ).
ಆರ್ಗ್ಯುಮೆಂಟ್
count/for_eachನ ಇನ್ಸೈಡ್ ರಿಸೋರ್ಸ್ ಅಥವಾ ಡೇಟಾ ಸೋರ್ಸ್ ಬ್ಲಾಕ್ ಅನ್ನು ಮೇಲ್ಭಾಗದಲ್ಲಿ ಮೊದಲ ಆರ್ಗ್ಯುಮೆಂಟ್ ಆಗಿ ಸೇರಿಸಿ, ಮತ್ತು ಅದರ ನಂತರ ಹೊಸ ಸಾಲಿನ ಮೂಲಕ ಪ್ರತ್ಯೇಕಿಸಿ.ಆರ್ಗ್ಯುಮೆಂಟ್
tagsಗಳನ್ನು ಸೇರಿಸಿ, ಸಂಪನ್ಮೂಲದಿಂದ ಬೆಂಬಲಿಸಿದರೆ, ಕೊನೆಯ ನೈಜ ಆರ್ಗ್ಯುಮೆಂಟ್ ಆಗಿ, ಅವಶ್ಯವಿದ್ದಲ್ಲಿdepends_onಮತ್ತುlifecycleಅನ್ನು ಅನುಸರಿಸಿ. ಇವೆಲ್ಲವನ್ನೂ ಒಂದೇ ಖಾಲಿ ಲೈನ್ ನಿಂದ ಬೇರ್ಪಡಿಸಬೇಕು.count/for_eachಆರ್ಗ್ಯುಮೆಂಟ್ನಲ್ಲಿ ಷರತ್ತುಗಳನ್ನು ಬಳಸುವಾಗlengthಅಥವಾ ಇತರ ಅಭಿವ್ಯಕ್ತಿಗಳನ್ನು ಬಳಸುವ ಬದಲು, ಬೂಲಿಯನ್ ಮೌಲ್ಯಗಳಿಗೆ ಆದ್ಯತೆ ನೀಡಿ.
resource ಕೋಡ್ ಉದಾಹರಣೆಗಳು
resource ಕೋಡ್ ಉದಾಹರಣೆಗಳುcount / for_eachನ ಬಳಕೆ
count / for_eachನ ಬಳಕೆresource "aws_route_table" "public" {
count = 2
vpc_id = "vpc-12345678"
# ... remaining arguments omitted
}
resource "aws_route_table" "private" {
for_each = toset(["one", "two"])
vpc_id = "vpc-12345678"
# ... remaining arguments omitted
}resource "aws_route_table" "public" {
vpc_id = "vpc-12345678"
count = 2
# ... remaining arguments omitted
}tagsನಿಯೋಜನೆ
tagsನಿಯೋಜನೆresource "aws_nat_gateway" "this" {
count = 2
allocation_id = "..."
subnet_id = "..."
tags = {
Name = "..."
}
depends_on = [aws_internet_gateway.this]
lifecycle {
create_before_destroy = true
}
} resource "aws_nat_gateway" "this" {
count = 2
tags = "..."
depends_on = [aws_internet_gateway.this]
lifecycle {
create_before_destroy = true
}
allocation_id = "..."
subnet_id = "..."
} countಅಲ್ಲಿ ಷರತ್ತುಗಳು
countಅಲ್ಲಿ ಷರತ್ತುಗಳುresource "aws_nat_gateway" "that" { # Best
count = var.create_public_subnets ? 1 : 0
}
resource "aws_nat_gateway" "this" { # Good
count = length(var.public_subnets) > 0 ? 1 : 0
}ವೇರಿಯೇಬಲ್ಗಳು (Variables)
ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್ಗಳಲ್ಲಿ ಬಹಳ ವಿಷಯಗಳನ್ನು ಮರು ಉಪಯೋಗಿಸಬಹುದು: ನೀವು ಕೆಲಸ ಮಾಡುತ್ತಿರುವ ಸಂಪನ್ಮೂಲಕ್ಕಾಗಿ"Argument Reference" ವಿಭಾಗದಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ
name,description, ಮತ್ತುdefaultವೇರಿಯೇಬಲ್ ಗಳನ್ನು ಉಪಯೋಗಿಸಿರಿ.ವೇರಿಯೇಬಲ್ಗಳಲ್ಲಿ ವ್ಯಾಲಿಡೇಷನ್ ಬೆಂಬಲವು ಸೀಮಿತವಾಗಿದೆ (ಉದಾ. ಇತರ ವೇರಿಯೇಬಲ್ಗಳನ್ನು ಆಕ್ಸೆಸ್ ಅಥವಾ ಲುಕಪ್ಗಳನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ). ಅನೇಕ ಸಂದರ್ಭಗಳಲ್ಲಿ ಈ ವೈಶಿಷ್ಟ್ಯವು ನಿಷ್ಪ್ರಯೋಜಕವಾಗಿರುವುದರಿಂದ ಅದಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಯೋಜಿಸಿ.
ಟೈಪ್ ಗಳು
list(...)ಅಥವmap(...)ಆದಾಗ ವೇರಿಯಬಲ್ ಹೆಸರಿನಲ್ಲಿ ಬಹುವಚನ ರೂಪವನ್ನು ಬಳಸಿ.ವೇರಿಯೇಬಲ್ ಬ್ಲಾಕ್ ಗಳಲ್ಲಿ ಕೀ ಗಳನ್ನು ಈ ರೀತಿಯಾಗಿ ಒಂದಾದ ಮೇಲೆ ಇನ್ನೊಂದರಂತೆ ವ್ಯವಸ್ತಿತಗೊಳಿಸಿ:
description,type,default,validation.ವೇರಿಯೇಬಲ್ ಗಳಲ್ಲಿ
descriptionತಪ್ಪದೇ ಹಾಕಿರಿ, ಅದು ಸ್ಪಷ್ಟವಾಗಿದ್ದರೂ ಸಹ (ನಿಮಗೆ ಮುಂದೆ ಬೇಕಾಗುತ್ತದೆ).ಪ್ರತಿ ಕೀಯಲ್ಲಿ ನೀವು ಕಟ್ಟುನಿಟ್ಟಾದ constraint ಗಳನ್ನು ಹೊಂದಿರಬೇಕಿಲ್ಲದಿದ್ದರೆ, ನಿರ್ದಿಷ್ಟ ಪ್ರಕಾರಕ್ಕಿಂತ (
object())ಸರಳ ಪ್ರಕಾರಗಳನ್ನು (number,string,list(...),map(...),any) ಬಳಸಲು ಆದ್ಯತೆ ನೀಡಿ.ಮ್ಯಾಪ್ ನ ಎಲ್ಲಾ ಅಂಶಗಳು ಒಂದೇ ಟೈಪ್ ನವು (ಉದಾ:
string) ಆಗಿದ್ದಲ್ಲಿ ಅಥವಾ ಪರಿವರ್ತಿಸಬಹುದಾಗಿದ್ದಲ್ಲಿ (ಉದಾ:numbertype can be converted tostring)ನಿರ್ದಿಷ್ಟ ಟೈಪ್ ಗಳನ್ನು ಬಳಸಿ.ನಿರ್ದಿಷ್ಟ ಆಳದಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಟೈಪ್ ನ ವ್ಯಾಲಿಡೇಷನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಅಥವ ಬಹು ಟೈಪ್ ಗಳನ್ನು ಬೆಂಬಲಿಸಬೇಕಾದಾಗ
anyಪ್ರಕಾರವನ್ನು ಬಳಸಿ{}ಎನ್ನುವುದು ಕೆಲವೊಂದು ಸಲ ಮ್ಯಾಪ್ ಆಗಿರಬಹುದು ಅಥವ ಆಬ್ಜೆಕ್ಟ್ ಆಗಿರಬಹುದು. ಈ ತರಹ ಇದ್ದಲ್ಲಿ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನುtomap(...)ಬಳಸಿ ಮ್ಯಾಪ್ ಆಗಿ ಪರಿವರ್ತಿಸಿ, ಏಕೆಂದರೆ ಆಬ್ಜೆಕ್ಟ್ ಮಾಡಲು ಆಗುವುದಿಲ್ಲ.
ಔಟ್ಪುಟ್ಗಳು
ಔಟ್ಪುಟ್ಗಳನ್ನು ಅದರ ವ್ಯಾಪ್ತಿಯ ಹೊರಗೆ ಸ್ಥಿರವಾಗಿ ಮತ್ತು ಅರ್ಥವಾಗುವಂತೆ ಮಾಡಿ (ಒಬ್ಬ ಬಳಕೆದಾರರು ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬಳಸುತ್ತಿರುವಾಗ ಅದು ಯಾವ ಟೈಪ್ ಮತ್ತು ಅಟ್ರಿಬ್ಯೂಟ್ ಅನ್ನು ಹಿಂದಿರುಗಿಸುತ್ತದೆ ಎಂಬುದು ಸ್ಪಷ್ಟವಾಗಿರಬೇಕು).
ಔಟ್ಪುಟ್ನ ಹೆಸರು ಅದು ಹೊಂದಿರುವ ಆಸ್ತಿಯನ್ನು ವಿವರಿಸಬೇಕು ಮತ್ತು ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ಬಯಸುವುದಕ್ಕಿಂತ ಕಡಿಮೆ ಮುಕ್ತ-ರೂಪವಾಗಿರಬೇಕು.
ಔಟ್ಪುಟ್ ಹೆಸರಿನ ಉತ್ತಮ ರಚನೆಯು
{name}_{type}_{attribute}ರೀತಿಯಲ್ಲಿ ಇರುತ್ತದೆ . ಇದರಲ್ಲಿ:{name}ಪೂರೈಕೆದಾರರ prefix ಇಲ್ಲದ ಸಂಪನ್ಮೂಲ ಅಥವಾ ಡೇಟಾ ಮೂಲದ ಹೆಸರು.aws_subnetಗೆ{name} subnet,ws_vpcಗೆ ಅದುvpc.{type}ಒಂದು ರೀತಿಯ ಸಂಪನ್ಮೂಲ ಮೂಲವಾಗಿದೆ{attribute}ಔಟ್ಪುಟ್ ಮೂಲಕ ಹಿಂತಿರುಗಿಸಿದ ಅಟ್ರಿಬ್ಯೂಟ್ ಆಗಿದೆ
ಔಟ್ಪುಟ್ ಇಂಟರ್ಪೋಲೇಷನ್ ಫಂಕ್ಷನ್ಗಳ ಮತ್ತು ಬಹು ಸಂಪನ್ಮೂಲಗಳ ಮೂಲಕ value ವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತಿದ್ದರೆ,
{name}ಮತ್ತು{type}ಸಾಧ್ಯವಾದಷ್ಟು generic ಆಗಿರಬೇಕು (thisಅನ್ನು prefix ಆಗಿ ಬಿಟ್ಟುಬಿಡಬೇಕು) ಉದಾ. ನೋಡಿಹಿಂತಿರುಗಿಸಿದ value ಲಿಸ್ಟ್ ಆಗಿದ್ದರೆ ಅದು ಬಹುವಚನ ಹೆಸರನ್ನು ಹೊಂದಿರಬೇಕು. ಉದಾ. ನೋಡಿ.
ಔಟ್ಪುಟ್ಗಳಲ್ಲಿ
descriptionತಪ್ಪದೇ ಹಾಕಿರಿ, ಅದು ಸ್ಪಷ್ಟವಾಗಿದ್ದರೂ ಸಹ (ನಿಮಗೆ ಮುಂದೆ ಬೇಕಾಗುತ್ತದೆ).ಎಲ್ಲಾ ಮಾಡ್ಯೂಲ್ಗಳಲ್ಲಿ ಎಲ್ಲಾ ಸ್ಥಳಗಳಲ್ಲಿ ಈ ಔಟ್ಪುಟ್ನ ಬಳಕೆಯನ್ನು ನಿಮಗೆ ಸಂಪೂರ್ಣವಾಗಿ ನಿಯಂತ್ರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲದಿದ್ದಲ್ಲಿ
sensitiveಆರ್ಗ್ಯುಮೆಂಟ್ ಗಳ ಬಳಕೆಯನ್ನು ತಪ್ಪಿಸಿ.element(concat(...))(0.13ಗಿಂತ ಹಿಂದಿನ ಆವೃತ್ತಿಗಳಿಗೆ) ಬದಲುtry()ಗೆ ಆದ್ಯತೆ (ಟೆರಾಫಾರ್ಮ್ 0.13 ರಿಂದ ಲಭ್ಯವಿದೆ).
outputಕೋಡ್ ಉದಾಹರಣೆಗಳು
outputಕೋಡ್ ಉದಾಹರಣೆಗಳುಹೆಚ್ಚೆಂದರೆ ಭದ್ರತಾ ಗುಂಪಿನ ಒಂದು ID ಮಾತ್ರ ಹಿಂತಿರುಗಿಸಿ :
output "security_group_id" {
description = "The ID of the security group"
value = try(aws_security_group.this[0].id, aws_security_group.name_prefix[0].id, "")
}ಒಂದೇ ರೀತಿಯ ಬಹು ಸಂಪನ್ಮೂಲಗಳನ್ನು ಹೊಂದಿರುವಾಗ,this ಅನ್ನು ಔಟ್ಪುಟ್ ಹೆಸರಿನಲ್ಲಿ ಬಿಟ್ಟುಬಿಡಬೇಕು:
output "this_security_group_id" {
description = "The ID of the security group"
value = element(concat(coalescelist(aws_security_group.this.*.id, aws_security_group.web.*.id), [""]), 0)
}ಹಿಂತಿರುಗಿಸುವ value, ಲಿಸ್ಟ್ ಆಗಿದ್ದರೆ, ಬಹುವಚನ ಹೆಸರನ್ನು ಬಳಸಿ
output "rds_cluster_instance_endpoints" {
description = "A list of all cluster instance endpoints"
value = aws_rds_cluster_instance.this.*.endpoint
}Last updated