All pages
Powered by GitBook
1 of 1

Loading...

ನೇಮಿಂಗ್ conventionಗಳು

ಜನರಲ್ conventionಗಳು

ಕನಿಷ್ಠ ಈ conventionಗಳನ್ನು ಅನುಸರಿಸದಿರಲು ಯಾವುದೇ ಕಾರಣವಿರುವುದಿಲ್ಲ :)

ನಿಜವಾದ ಕ್ಲೌಡ್ ಸಂಪನ್ಮೂಲಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಅನುಮತಿಸಲಾದ ಹೆಸರುಗಳಲ್ಲಿ ನಿರ್ಬಂಧಗಳನ್ನು ಹೊಂದಿರುತ್ತವೆ ಎಂದು ಎಚ್ಚರವಹಿಸಿ. ಕೆಲವು ಸಂಪನ್ಮೂಲಗಳು, ಉದಾಹರಣೆಗೆ, ಡ್ಯಾಶ್ ಗಳನ್ನು ಹೊಂದಿರಬಾರದು, ಕೆಲವು ಕ್ಯಾಮೆಲ್ -ಕೇಸ್ ಆಗಿರಬೇಕು. ಈ ಪುಸ್ತಕದಲ್ಲಿನ conventionಗಳು ಟೆರಾಫಾರ್ಮ್ ಹೆಸರುಗಳನ್ನು ಉಲ್ಲೇಖಿಸುತ್ತವೆ

  1. ಎಲ್ಲೆಡೆ - (ಡ್ಯಾಶ್) ಬದಲಿಗೆ _ (ಅಂಡರ್ಸ್ಕೋರ್) ಬಳಸಿ (ಸಂಪನ್ಮೂಲ ಹೆಸರುಗಳು, ಡೇಟಾ ಮೂಲ ಹೆಸರುಗಳು, ವೇರಿಯಬಲ್ ಹೆಸರುಗಳು, ಔಟ್ಪುಟ್ಗಳು, ಇತ್ಯಾದಿ).

  2. Lowercase ಅಕ್ಷರಗಳು ಮತ್ತು ಸಂಖ್ಯೆಗಳನ್ನು ಬಳಸಲು ಆದ್ಯತೆ ನೀಡಿ (UTF-8 ಅನ್ನು ಬೆಂಬಲಿಸಿದರೂ ಸಹ).

ಸಂಪನ್ಮೂಲ ಮತ್ತು ಡೇಟಾ ಮೂಲ ಅರ್ಗುಮೆಂಟ್ ಗಳು (arguments)

  1. ಸಂಪನ್ಮೂಲದ ಹೆಸರಿನಲ್ಲಿ ಸಂಪನ್ಮೂಲ ಪ್ರಕಾರವನ್ನು ಪುನರಾವರ್ತಿಸಬೇಡಿ (ಭಾಗಶಃವಾಗಿಯೂ ಅಲ್ಲ ಅಥವಾ ಸಂಪೂರ್ಣವಾಗಿಯೂ ಅಲ್ಲ):

  1. ಹೆಚ್ಚಿನ ವಿವರಣಾತ್ಮಕ ಮತ್ತು ಸಾಮಾನ್ಯ ಹೆಸರು ಲಭ್ಯವಿಲ್ಲದಿದ್ದರೆ ಅಥವಾ ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್ ಈ ಪ್ರಕಾರದ ಒಂದೇ ಸಂಪನ್ಮೂಲವನ್ನು ರಚಿಸಿದರೆ ಸಂಪನ್ಮೂಲ ಹೆಸರನ್ನುthis ಎಂದು ಹೆಸರಿಸಬೇಕು. (ಉದಾ, ಮಾಡ್ಯೂಲ್‌ನಲ್ಲಿ aws_nat_gateway ಪ್ರಕಾರದ ಒಂದೇ ಸಂಪನ್ಮೂಲವಿದೆ ಮತ್ತು type aws_route_table ನ ಬಹು ಸಂಪನ್ಮೂಲಗಳು ಇವೆ . ಆದ್ದರಿಂದ aws_nat_gateway ಅನ್ನು this ಎಂದು ಹೆಸರಿಸಬೇಕು ಮತ್ತು aws_route_table ಹೆಚ್ಚು ವಿವರಣಾತ್ಮಕ ಹೆಸರುಗಳನ್ನು ಹೊಂದಿರಬೇಕು -(private, public, database).

resource ಕೋಡ್ ಉದಾಹರಣೆಗಳು

count / for_eachನ ಬಳಕೆ

tagsನಿಯೋಜನೆ

countಅಲ್ಲಿ ಷರತ್ತುಗಳು

ವೇರಿಯೇಬಲ್‌ಗಳು (Variables)

  1. ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್‌ಗಳಲ್ಲಿ ಬಹಳ ವಿಷಯಗಳನ್ನು ಮರು ಉಪಯೋಗಿಸಬಹುದು: ನೀವು ಕೆಲಸ ಮಾಡುತ್ತಿರುವ ಸಂಪನ್ಮೂಲಕ್ಕಾಗಿ"Argument Reference" ವಿಭಾಗದಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ name, description, ಮತ್ತು default ವೇರಿಯೇಬಲ್ ಗಳನ್ನು ಉಪಯೋಗಿಸಿರಿ.

  2. ವೇರಿಯೇಬಲ್‌ಗಳಲ್ಲಿ ವ್ಯಾಲಿಡೇಷನ್ ಬೆಂಬಲವು ಸೀಮಿತವಾಗಿದೆ (ಉದಾ. ಇತರ ವೇರಿಯೇಬಲ್‌ಗಳನ್ನು ಆಕ್ಸೆಸ್ ಅಥವಾ ಲುಕಪ್‌ಗಳನ್ನು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ). ಅನೇಕ ಸಂದರ್ಭಗಳಲ್ಲಿ ಈ ವೈಶಿಷ್ಟ್ಯವು ನಿಷ್ಪ್ರಯೋಜಕವಾಗಿರುವುದರಿಂದ ಅದಕ್ಕೆ ಅನುಗುಣವಾಗಿ ಯೋಜಿಸಿ.

  3. ಟೈಪ್ ಗಳು

ಔಟ್‌ಪುಟ್‌ಗಳು

ಔಟ್‌ಪುಟ್‌ಗಳನ್ನು ಅದರ ವ್ಯಾಪ್ತಿಯ ಹೊರಗೆ ಸ್ಥಿರವಾಗಿ ಮತ್ತು ಅರ್ಥವಾಗುವಂತೆ ಮಾಡಿ (ಒಬ್ಬ ಬಳಕೆದಾರರು ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬಳಸುತ್ತಿರುವಾಗ ಅದು ಯಾವ ಟೈಪ್ ಮತ್ತು ಅಟ್ರಿಬ್ಯೂಟ್ ಅನ್ನು ಹಿಂದಿರುಗಿಸುತ್ತದೆ ಎಂಬುದು ಸ್ಪಷ್ಟವಾಗಿರಬೇಕು).

  1. ಔಟ್‌ಪುಟ್‌ನ ಹೆಸರು ಅದು ಹೊಂದಿರುವ ಆಸ್ತಿಯನ್ನು ವಿವರಿಸಬೇಕು ಮತ್ತು ನೀವು ಸಾಮಾನ್ಯವಾಗಿ ಬಯಸುವುದಕ್ಕಿಂತ ಕಡಿಮೆ ಮುಕ್ತ-ರೂಪವಾಗಿರಬೇಕು.

  2. ಔಟ್ಪುಟ್ ಹೆಸರಿನ ಉತ್ತಮ ರಚನೆಯು{name}_{type}_{attribute} ರೀತಿಯಲ್ಲಿ ಇರುತ್ತದೆ . ಇದರಲ್ಲಿ:

    1. {name}ಪೂರೈಕೆದಾರರ prefix ಇಲ್ಲದ ಸಂಪನ್ಮೂಲ ಅಥವಾ ಡೇಟಾ ಮೂಲದ ಹೆಸರು.aws_subnet

outputಕೋಡ್ ಉದಾಹರಣೆಗಳು

ಹೆಚ್ಚೆಂದರೆ ಭದ್ರತಾ ಗುಂಪಿನ ಒಂದು ID ಮಾತ್ರ ಹಿಂತಿರುಗಿಸಿ :

ಒಂದೇ ರೀತಿಯ ಬಹು ಸಂಪನ್ಮೂಲಗಳನ್ನು ಹೊಂದಿರುವಾಗ,this ಅನ್ನು ಔಟ್‌ಪುಟ್ ಹೆಸರಿನಲ್ಲಿ ಬಿಟ್ಟುಬಿಡಬೇಕು:

ಹಿಂತಿರುಗಿಸುವ value, ಲಿಸ್ಟ್ ಆಗಿದ್ದರೆ, ಬಹುವಚನ ಹೆಸರನ್ನು ಬಳಸಿ

ಹೆಸರುಗಳಿಗೆ ಯಾವಾಗಲೂ ಏಕವಚನ ನಾಮಪದಗಳನ್ನು ಬಳಸಿ.
  • ಬಳಕೆ: ಆರ್ಗ್ಯುಮೆಂಟ್‌ valueಗಳ ಒಳಗೆ. value ಮಾನವನಿಗೆ ಕಾಣುವ ಸ್ಥಳಗಳಲ್ಲಿಇರಬೇಕು(ಉದಾ, RDS ನಿದರ್ಶನದ DNS ಹೆಸರಿನ ಒಳಗೆ).

  • ಆರ್ಗ್ಯುಮೆಂಟ್ count / for_eachನ ಇನ್‌ಸೈಡ್ ರಿಸೋರ್ಸ್ ಅಥವಾ ಡೇಟಾ ಸೋರ್ಸ್ ಬ್ಲಾಕ್ ಅನ್ನು ಮೇಲ್ಭಾಗದಲ್ಲಿ ಮೊದಲ ಆರ್ಗ್ಯುಮೆಂಟ್ ಆಗಿ ಸೇರಿಸಿ, ಮತ್ತು ಅದರ ನಂತರ ಹೊಸ ಸಾಲಿನ ಮೂಲಕ ಪ್ರತ್ಯೇಕಿಸಿ.

  • ಆರ್ಗ್ಯುಮೆಂಟ್ tagsಗಳನ್ನು ಸೇರಿಸಿ, ಸಂಪನ್ಮೂಲದಿಂದ ಬೆಂಬಲಿಸಿದರೆ, ಕೊನೆಯ ನೈಜ ಆರ್ಗ್ಯುಮೆಂಟ್ ಆಗಿ, ಅವಶ್ಯವಿದ್ದಲ್ಲಿ depends_on ಮತ್ತು lifecycle ಅನ್ನು ಅನುಸರಿಸಿ. ಇವೆಲ್ಲವನ್ನೂ ಒಂದೇ ಖಾಲಿ ಲೈನ್ ನಿಂದ ಬೇರ್ಪಡಿಸಬೇಕು.

  • count / for_each ಆರ್ಗ್ಯುಮೆಂಟ್‌ನಲ್ಲಿ ಷರತ್ತುಗಳನ್ನು ಬಳಸುವಾಗ length ಅಥವಾ ಇತರ ಅಭಿವ್ಯಕ್ತಿಗಳನ್ನು ಬಳಸುವ ಬದಲು, ಬೂಲಿಯನ್ ಮೌಲ್ಯಗಳಿಗೆ ಆದ್ಯತೆ ನೀಡಿ.

  • list(...)
    ಅಥವ
    map(...)
    ಆದಾಗ ವೇರಿಯಬಲ್ ಹೆಸರಿನಲ್ಲಿ ಬಹುವಚನ ರೂಪವನ್ನು ಬಳಸಿ.
  • ವೇರಿಯೇಬಲ್ ಬ್ಲಾಕ್ ಗಳಲ್ಲಿ ಕೀ ಗಳನ್ನು ಈ ರೀತಿಯಾಗಿ ಒಂದಾದ ಮೇಲೆ ಇನ್ನೊಂದರಂತೆ ವ್ಯವಸ್ತಿತಗೊಳಿಸಿ: description , type, default, validation.

  • ವೇರಿಯೇಬಲ್ ಗಳಲ್ಲಿ description ತಪ್ಪದೇ ಹಾಕಿರಿ, ಅದು ಸ್ಪಷ್ಟವಾಗಿದ್ದರೂ ಸಹ (ನಿಮಗೆ ಮುಂದೆ ಬೇಕಾಗುತ್ತದೆ).

  • ಪ್ರತಿ ಕೀಯಲ್ಲಿ ನೀವು ಕಟ್ಟುನಿಟ್ಟಾದ constraint ಗಳನ್ನು ಹೊಂದಿರಬೇಕಿಲ್ಲದಿದ್ದರೆ, ನಿರ್ದಿಷ್ಟ ಪ್ರಕಾರಕ್ಕಿಂತ (object()) ಸರಳ ಪ್ರಕಾರಗಳನ್ನು (number, string, list(...), map(...), any) ಬಳಸಲು ಆದ್ಯತೆ ನೀಡಿ.

  • ಮ್ಯಾಪ್ ನ ಎಲ್ಲಾ ಅಂಶಗಳು ಒಂದೇ ಟೈಪ್ ನವು (ಉದಾ:string) ಆಗಿದ್ದಲ್ಲಿ ಅಥವಾ ಪರಿವರ್ತಿಸಬಹುದಾಗಿದ್ದಲ್ಲಿ (ಉದಾ:number type can be converted to string) ನಿರ್ದಿಷ್ಟ ಟೈಪ್ ಗಳನ್ನು ಬಳಸಿ.

  • ನಿರ್ದಿಷ್ಟ ಆಳದಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಟೈಪ್ ನ ವ್ಯಾಲಿಡೇಷನ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಅಥವ ಬಹು ಟೈಪ್ ಗಳನ್ನು ಬೆಂಬಲಿಸಬೇಕಾದಾಗ any ಪ್ರಕಾರವನ್ನು ಬಳಸಿ

  • {}ಎನ್ನುವುದು ಕೆಲವೊಂದು ಸಲ ಮ್ಯಾಪ್ ಆಗಿರಬಹುದು ಅಥವ ಆಬ್ಜೆಕ್ಟ್ ಆಗಿರಬಹುದು. ಈ ತರಹ ಇದ್ದಲ್ಲಿ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನುtomap(...) ಬಳಸಿ ಮ್ಯಾಪ್ ಆಗಿ ಪರಿವರ್ತಿಸಿ, ಏಕೆಂದರೆ ಆಬ್ಜೆಕ್ಟ್ ಮಾಡಲು ಆಗುವುದಿಲ್ಲ.

  • ಗೆ
    {name} subnet
    ,
    ws_vpc
    ಗೆ ಅದು
    vpc
    .
  • {type}ಒಂದು ರೀತಿಯ ಸಂಪನ್ಮೂಲ ಮೂಲವಾಗಿದೆ

  • {attribute}ಔಟ್ಪುಟ್ ಮೂಲಕ ಹಿಂತಿರುಗಿಸಿದ ಅಟ್ರಿಬ್ಯೂಟ್ ಆಗಿದೆ

  • ಉದಾ. ನೋಡಿ

  • ಔಟ್‌ಪುಟ್ ಇಂಟರ್‌ಪೋಲೇಷನ್ ಫಂಕ್ಷನ್‌ಗಳ ಮತ್ತು ಬಹು ಸಂಪನ್ಮೂಲಗಳ ಮೂಲಕ value ವನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತಿದ್ದರೆ,{name} ಮತ್ತು {type} ಸಾಧ್ಯವಾದಷ್ಟು generic ಆಗಿರಬೇಕು (this ಅನ್ನು prefix ಆಗಿ ಬಿಟ್ಟುಬಿಡಬೇಕು) ಉದಾ. ನೋಡಿ

  • ಹಿಂತಿರುಗಿಸಿದ value ಲಿಸ್ಟ್ ಆಗಿದ್ದರೆ ಅದು ಬಹುವಚನ ಹೆಸರನ್ನು ಹೊಂದಿರಬೇಕು. ಉದಾ. ನೋಡಿ.

  • ಔಟ್‌ಪುಟ್‌ಗಳಲ್ಲಿ description ತಪ್ಪದೇ ಹಾಕಿರಿ, ಅದು ಸ್ಪಷ್ಟವಾಗಿದ್ದರೂ ಸಹ (ನಿಮಗೆ ಮುಂದೆ ಬೇಕಾಗುತ್ತದೆ).

  • ಎಲ್ಲಾ ಮಾಡ್ಯೂಲ್‌ಗಳಲ್ಲಿ ಎಲ್ಲಾ ಸ್ಥಳಗಳಲ್ಲಿ ಈ ಔಟ್‌ಪುಟ್‌ನ ಬಳಕೆಯನ್ನು ನಿಮಗೆ ಸಂಪೂರ್ಣವಾಗಿ ನಿಯಂತ್ರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲದಿದ್ದಲ್ಲಿ sensitive ಆರ್ಗ್ಯುಮೆಂಟ್ ಗಳ ಬಳಕೆಯನ್ನು ತಪ್ಪಿಸಿ.

  • element(concat(...))(0.13ಗಿಂತ ಹಿಂದಿನ ಆವೃತ್ತಿಗಳಿಗೆ) ಬದಲು try()ಗೆ ಆದ್ಯತೆ (ಟೆರಾಫಾರ್ಮ್ 0.13 ರಿಂದ ಲಭ್ಯವಿದೆ).

  • AWS VPC
    `resource "aws_route_table" "public" {}`
    `resource "aws_route_table" "public_route_table" {}`
    `resource "aws_route_table" "public_aws_route_table" {}`
    main.tf
    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
    }
    main.tf
    resource "aws_route_table" "public" {
      vpc_id = "vpc-12345678"
      count  = 2
    
      # ... remaining arguments omitted
    }
    main.tf
    resource "aws_nat_gateway" "this" {
      count = 2
    
      allocation_id = "..."
      subnet_id     = "..."
    
      tags = {
        Name = "..."
      }
    
      depends_on = [aws_internet_gateway.this]
    
      lifecycle {
        create_before_destroy = true
      }
    }   
    main.tf
    resource "aws_nat_gateway" "this" {
      count = 2
    
      tags = "..."
    
      depends_on = [aws_internet_gateway.this]
    
      lifecycle {
        create_before_destroy = true
      }
    
      allocation_id = "..."
      subnet_id     = "..."
    }
    outputs.tf
    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
    }
    outputs.tf
    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, "")
    }
    outputs.tf
    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)
    }
    outputs.tf
    output "rds_cluster_instance_endpoints" {
      description = "A list of all cluster instance endpoints"
      value       = aws_rds_cluster_instance.this.*.endpoint
    }