> For the complete documentation index, see [llms.txt](https://www.terraform-best-practices.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.terraform-best-practices.com/kn/key-concepts.md).

# ಮುಖ್ಯ ಪರಿಕಲ್ಪನೆಗಳು

ಅಧಿಕೃತ ಟೆರಾಫಾರ್ಮ್ ದಾಖಲೆಗಳು ಎಲ್ಲಾ [ಅಂಶಗಳನ್ನು](https://www.terraform.io/docs/configuration/index.html) ವಿವರವಾಗಿ ವಿವರಿಸುತ್ತವೆ .ಈ ವಿಭಾಗದ ಉಳಿದ ಭಾಗವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಅದನ್ನು ಗಮನವಿಟ್ಟು ಓದಿ.

ಈ ವಿಭಾಗವು ಪುಸ್ತಕದೊಳಗೆ ಬಳಸಲಾದ ಪ್ರಮುಖ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ.

## ಸಂಪನ್ಮೂಲ (Resource)

ಸಂಪನ್ಮೂಲಗಳು ಎಂದರೆ `aws_vpc`, `aws_db_instance`, ಇತ್ಯಾದಿ. ಸಂಪನ್ಮೂಲವು ಪೂರೈಕೆದಾರರಿಗೆ ಸೇರಿದೆ, argument ಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ, property ಗಳನ್ನು ನಿಯೋಜಿಸುತ್ತದೆ ಮತ್ತು life cycleಅನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಸಂಪನ್ಮೂಲವನ್ನು ರಚಿಸಬಹುದು, retrieve ಮಾಡಬಹುದು, ನವೀಕರಿಸಬಹುದು ಮತ್ತು ಅಳಿಸಬಹುದು.

## ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್

ಸಂಪನ್ಮೂಲ module ಎನ್ನುವುದು ಸಂಪರ್ಕಿತ ಸಂಪನ್ಮೂಲಗಳ ಸಂಗ್ರಹವಾಗಿದ್ದು ಅದು ಸಾಮಾನ್ಯ ಕ್ರಿಯೆಯನ್ನು ಒಟ್ಟಿಗೆ ನಿರ್ವಹಿಸುತ್ತದೆ (ಉದಾಹರಣೆಗೆ, AWS VPC ಟೆರಾಫಾರ್ಮ್ ಮಾಡ್ಯೂಲ್ VPC, ಸಬ್‌ನೆಟ್‌ಗಳು, NAT ಗೇಟ್‌ವೇ, ಇತ್ಯಾದಿಗಳನ್ನು ರಚಿಸುತ್ತದೆ). ಇದು ಪೂರೈಕೆದಾರರ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ, ಅದರಲ್ಲಿ ಅಥವಾ ಉನ್ನತ ಮಟ್ಟದ ರಚನೆಗಳಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಬಹುದಾಗಿದೆ (ಉದಾಹರಣೆಗೆ, infrastructure ಮಾಡ್ಯೂಲ್ ನಲ್ಲಿ).

## Infrastructure (ಮೂಲಸೌಕರ್ಯ) ಮಾಡ್ಯೂಲ್

Infrastructure ಮಾಡ್ಯೂಲ್ ಎನ್ನುವುದು ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್‌ಗಳ ಸಂಗ್ರಹವಾಗಿದೆ. ಈ ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್‌ಗಳು ತಾರ್ಕಿಕವಾಗಿ ಪ್ರತ್ಯೇಕವಾದವುಗಳು. ಆದರೆ ಪ್ರಸ್ತುತ ಪರಿಸ್ಥಿತಿ/ಪ್ರಾಜೆಕ್ಟ್/ಸೆಟಪ್ನಲ್ಲಿ ಯಾವುದೊ ಒಂದು ನಿಯೋಜಿತ ಉದ್ದೇಶವನ್ನು ಪೂರೈಸುತ್ತದೆ. ಇದು ಡೌನ್‌ಸ್ಟ್ರೀಮ್ ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್‌ಗಳಿಗೆ ಮತ್ತು ಸಂಪನ್ಮೂಲಗಳಿಗೆ ರವಾನಿಸಲಾಗುವ ಕಾಂಫಿಗುರೇಷನ್ಗಳನ್ನು ಪೂರೈಕೆದಾರರಿಗೆ ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ. ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಪ್ರತಿ ತಾರ್ಕಿಕ ವಿಭಜಕಕ್ಕೆ (ಉದಾ., AWS ಪ್ರದೇಶ, Google ಪ್ರಾಜೆಕ್ಟ್ )ಒಂದು ಯೂನಿಟ್ ನಲ್ಲಿ ಕೆಲಸ ಮಾಡಲು ಸೀಮಿತವಾಗಿರುತ್ತದೆ.

ಉದಾಹರಣೆಗೆ, [terraform-aws-atlantis](https://github.com/terraform-aws-modules/terraform-aws-atlantis/) ಮಾಡ್ಯೂಲ್ AWS ಫಾರ್ಗೇಟ್‌ನಲ್ಲಿ[Atlantis](https://www.runatlantis.io) ಅನ್ನು ಚಲಾಯಿಸಲು ಅಗತ್ಯವಿರುವ infrastructure ಅನ್ನು ನಿರ್ವಹಿಸಲು [terraform-aws-vpc](https://github.com/terraform-aws-modules/terraform-aws-vpc/) ಮತ್ತು [terraform-aws-security-group](https://github.com/terraform-aws-modules/terraform-aws-security-group/)ನಂತಹ ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ಬಳಸುತ್ತದೆ.

ಮತ್ತೊಂದು ಉದಾಹರಣೆಯೆಂದರೆ, [terraform-aws-cloudquery](https://github.com/cloudquery/terraform-aws-cloudquery) ಮಾಡ್ಯೂಲಿನಲ್ಲಿ [terraform-aws-modules](https://github.com/terraform-aws-modules/) ನಂತಹ ಬಹು ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ಒಟ್ಟಿಗೆ infrastructure ನಿರ್ವಹಿಸಲು  ಬಳಸಲಾಗುತ್ತಿದೆ ಮತ್ತುಡಾಕರ್ imagesಅನ್ನು ನಿರ್ಮಿಸಲು, ತಳ್ಳಲು ಮತ್ತು ನಿಯೋಜಿಸಲು ಡಾಕರ್ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಬಳಸಲಾಗುತ್ತಿದೆ. ಎಲ್ಲಾ ಒಂದೇ ಸೆಟ್‌ನಲ್ಲಿ.

## ಕಾಂಪೊಸಿಷನ್

ಕಾಂಪೊಸಿಷನ್ ಎನ್ನುವುದು infrastructure ಮಾಡ್ಯೂಲ್‌ಗಳ ಸಂಗ್ರಹವಾಗಿದೆ, ಇದು ಹಲವಾರು ತಾರ್ಕಿಕವಾಗಿ ಬೇರ್ಪಟ್ಟ ಪ್ರದೇಶಗಳಲ್ಲಿ ವ್ಯಾಪಿಸಬಹುದು (ಉದಾ., AWS ಪ್ರದೇಶಗಳು, ಹಲವಾರು AWS ಖಾತೆಗಳು). ಸಂಪೂರ್ಣ ಸಂಸ್ಥೆ ಅಥವಾ ಪ್ರಾಜೆಕ್ಟ್-ಗೆ ಅಗತ್ಯವಿರುವ ಸಂಪೂರ್ಣ infrastructureಅನ್ನು ವಿವರಿಸಲು ಕಾಂಪೊಸಿಷನ್ ಬಳಸಲಾಗುತ್ತದೆ. ಕಾಂಪೊಸಿಷನ್ infrastructure ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ, ಅವು ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ , ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್‌ಗಳು ವೈಯಕ್ತಿಕ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತವೆ .

![Simple infrastructure composition](/files/gRXjhRxnTLLcdax83v0g)

## ಮಾಹಿತಿ (ಡೇಟಾ) ಮೂಲ

ಮಾಹಿತಿ ಮೂಲವು ಓದಲು-ಮಾತ್ರ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ ಮತ್ತು ಪೂರೈಕೆದಾರರ ಕಾಂಫಿಗುರೇಶನ್ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ಇದನ್ನು ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್ ಮತ್ತು infrastructure ಮಾಡ್ಯೂಲ್‌ನಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ.

ಮಾಹಿತಿ ಮೂಲ `terraform_remote_state` ಎನ್ನುವುದು ಉನ್ನತ ಮಟ್ಟದ ಮಾಡ್ಯೂಲ್‌ಗಳು ಮತ್ತು ಕಾಂಪೊಸಿಷನ್-ಗಳ ನಡುವಿನ ಸೇತುವೆಯಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

[ಬಾಹ್ಯ ಮಾಹಿತಿ](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) ಮೂಲವು ಬಾಹ್ಯ ಪ್ರೋಗ್ರಾಮ್ ಅನ್ನು ಮಾಹಿತಿ ಮೂಲವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ಇದರಿಂದ ಟೆರಾಫಾರ್ಮ್ ಕಾನ್ಫಿಗರೇಶನ್‌ನಲ್ಲಿ ಬೇರೆಡೆ ಬಳಕೆಗಾಗಿ ಅನಿಯಂತ್ರಿತ ಮಾಹಿತಿಯು ಲಭ್ಯವಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗಾಗಿ [terraform-aws-lambda module](https://github.com/terraform-aws-modules/terraform-aws-lambda/blob/258e82b50adc451f51544a2b57fd1f6f8f4a61e4/package.tf#L5-L7) ಮಾಡ್ಯೂಲ್‌ನಲ್ಲಿಫೈಲ್ ಹೆಸರನ್ನು ಬಾಹ್ಯ ಪೈಥಾನ್ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಕರೆಯುವ ಮೂಲಕ ಲೆಕ್ಕಾಚಾರ ಮಾಡಲಾಗುತ್ತದೆ.

[http](https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http) ಮಾಹಿತಿ ಮೂಲವು HTTP GET URL ಗೆ ವಿನಂತಿಯನ್ನು ಮಾಡುತ್ತದೆ ಮತ್ತು ಬಂದ response ಅನ್ನು export ಮಾಡುತ್ತದೆ. ಇದು native ಟೆರಾಫಾರ್ಮ್ ಪೂರೈಕೆದಾರರು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದ ಎಂಡ್ ಪಾಯಿಂಟ್ ಗಳಿಂದ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲು ಉಪಯುಕ್ತವಾದ ಪ್ರತಿಕ್ರಿಯೆಯಾಗಿದೆ.

## Remote (ರಿಮೋಟ್) ಸ್ಥಿತಿ

Infrastructure ಮಾಡ್ಯೂಲ್‌ಗಳು ಮತ್ತು ಕಾಂಪೊಸಿಷನ್ ಗಳು ತಮ್ಮ [ಟೆರಾಫಾರ್ಮ್ ಸ್ಥಿತಿಯನ್ನು](https://www.terraform.io/docs/language/state/index.html) remote ಸ್ಥಳದಲ್ಲಿ ಲಭ್ಯವಾಗಿಸಬೇಕು. ಅದನ್ನು ಇತರರು ನಿಯಂತ್ರಿತ ರೀತಿಯಲ್ಲಿ ಹಿಂಪಡೆಯಬಹುದು (ಉದಾ., ACL, version ,ಲಾಗಿಂಗ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವಂತದ್ದು)

## ಪೂರೈಕೆದಾರರು (Providers), ಒದಗಿಸುವವರು, ಇತ್ಯಾದಿ

ಪೂರೈಕೆದಾರರು, ಒದಗಿಸುವವರು ಮತ್ತು ಕೆಲವು ಇತರ ಪದಗಳನ್ನು ಅಧಿಕೃತ ದಾಖಲಾತಿಯಲ್ಲಿ ಚೆನ್ನಾಗಿ ವಿವರಿಸಲಾಗಿದೆ ಮತ್ತು ಅದನ್ನು ಇಲ್ಲಿ ಪುನರಾವರ್ತಿಸಲು ಯಾವುದೇ ಅರ್ಥವಿಲ್ಲ. ನನ್ನ ಅಭಿಪ್ರಾಯದ ಪ್ರಕಾರ, ಉತ್ತಮ ಟೆರಾಫಾರ್ಮ್ ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ಬರೆಯುವುದಕ್ಕೂ ಇದಕ್ಕೂ ಸಂಬಂಧವಿಲ್ಲ.

## ಏಕೆ ಕಷ್ಟ?

Infrastructure ಅಲ್ಲಿ ವೈಯಕ್ತಿಕ ಸಂಪನ್ಮೂಲಗಳು ಪರಮಾಣುಗಳಂತೆ ಹಾಗು ಸಂಪನ್ಮೂಲ ಮಾಡ್ಯೂಲ್‌ಗಳು ಅಣುಗಳಂತೆ (ಪರಮಾಣುಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ). ಮಾಡ್ಯೂಲ್ ಎನ್ನುವುದು ಚಿಕ್ಕ ಆವೃತ್ತಿಯ ಮತ್ತು ಹಂಚಿಕೊಳ್ಳಬಹುದಾದ ಘಟಕವಾಗಿದೆ. ಇದು argumentಗಳ ನಿಖರವಾದ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿದ್ದು , basic ಕಾರ್ಯವನ್ನು ಮಾಡಲು ಅಂತಹ ಘಟಕಕ್ಕೆ ಮೂಲಭೂತ ತರ್ಕವನ್ನು ಅಳವಡಿಸುತ್ತದೆ. e.g., [terraform-aws-security-group](https://github.com/terraform-aws-modules/terraform-aws-security-group) ಮಾಡ್ಯೂಲ್‌ `aws_security_group` ಹಾಗು `aws_security_group_rule` ಸಂಪನ್ಮೂಲಗಳನ್ನು inputನ ಆಧಾರದ ಮೇಲೆ ಸೃಷ್ಟಿಸುತ್ತದೆ. This ಸಂಪನ್ಮೂಲಗ ಮಾಡ್ಯೂಲ್‌ ಅನ್ನು ಬೇರೆ ಮೊಡ್ಯೂಲ್ ಗಳ ಜೊತೆ infrastructure ಮೊಡ್ಯೂಲ್ ಸೃಷ್ಟಿಸಲು ಉಪಯೋಗಿಸಬಹುದಾಗಿದೆ.

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

ಕಂಪೋಸಿಷನ್ ಗಳ ಪರಮರ್ಷಣೆಯನ್ನು ರಿಮೋಟ್ ಸ್ಟೇಟ್ ಮಾಹಿತಿ ಮೂಲಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಹೆಚ್ಚಾಗಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ. [ಕಾನ್ಫಿಗರೇಶನ್‌ಗಳ ನಡುವೆ ಮಾಹಿತಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಹಲವು ಮಾರ್ಗಗಳಿವೆ](https://www.terraform.io/docs/language/state/remote-state-data.html#alternative-ways-to-share-data-between-configurations).

ಮೇಲೆ ವಿವರಿಸಿದ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ಸೂಡೋ-ರಿಲೇಶನ್ ಗಳಲ್ಲಿ ಇರಿಸಿದಾಗ ಅದು ಈ ರೀತಿ ಕಾಣಿಸಬಹುದು:

```
composition-1 {
  infrastructure-module-1 {
    data-source-1 => d1

    resource-module-1 {
      data-source-2 => d2
      resource-1 (d1, d2)
      resource-2 (d2)
    }

    resource-module-2 {
      data-source-3 => d3
      resource-3 (d1, d3)
      resource-4 (d3)
    }
  }
}
```
