TERRAFORM, Day - 6

TERRAFORM, Day - 6

TerraForm Providers

ยท

7 min read

Terraform providers and their significance

  • Terraform Providers: Plugins that manage resources in Terraform.

  • Provider Configuration: Settings for authenticating and connecting to a specific cloud platform or service.

  • Resource Provisioning: Creating and managing infrastructure resources like virtual machines or databases.

  • Dependency Management: Handling the order in which resources are created or destroyed based on dependencies.

  • State Management: Tracking the current state of infrastructure using a state file.

  • Cross-Platform Compatibility: Ability to work with multiple cloud platforms using a single tool.

  • Community and Ecosystem: Contributions from the community, expanding the range of supported platforms and services.

Compare the features and supported resources for each cloud platform's Terraform provider to gain a better understanding of their capabilities.

  1. AWS (Amazon Web Services) Provider: Manages AWS resources such as EC2 instances using Terraform.

     provider "aws" {
       region = "us-west-2"
     }
    
     resource "aws_instance" "example" {
       ami           = "ami-0c94855ba95c71c99"
       instance_type = "t2.micro"
     }
    
  2. Azure Provider: Allows provisioning of Azure virtual machines and related resources through Terraform.

     provider "azurerm" {
       features {}
     }
    
     resource "azurerm_virtual_machine" "example" {
       name                  = "example-vm"
       location              = "West US"
       resource_group_name   = "example-resource-group"
       vm_size               = "Standard_DS1_v2"
     }
    
  3. GCP (Google Cloud Platform) Provider: Simplified explanation: Enables provisioning of Google Compute Engine instances and other GCP resources with Terraform.

     provider "google" {}
    
     resource "google_compute_instance" "example" {
       name         = "example-instance"
       machine_type = "f1-micro"
     }
    
  4. OCI (Oracle Cloud Infrastructure) Provider: Facilitates the provisioning of Oracle Cloud Infrastructure resources, including compute instances, via Terraform.

     provider "oci" {}
    
     resource "oci_core_instance" "example" {
       display_name        = "example-instance"
       shape               = "VM.Standard2.1"
     }
    
  5. IBM Cloud Provider: Supports the provisioning of IBM Cloud virtual machines and related resources using Terraform.

     provider "ibm" {}
    
     resource "ibm_compute_vm_instance" "example" {
       name       = "example-instance"
       image      = "ibm-ubuntu-18-04-1-minimal-amd64-2"
     }
    
  6. Alibaba Cloud Provider: Manages Alibaba Cloud Elastic Compute Service instances and associated resources through Terraform.

     provider "alicloud" {}
    
     resource "alicloud_instance" "example" {
       instance_name        = "example-instance"
       instance_type        = "ecs.t5-lc1m1.small"
     }
    

provider configuration and authentication mechanisms in Terraform.

    • Provider Block:
      The provider block is used to define the configuration for a specific provider in your Terraform code. It specifies the provider name, version, and other provider-specific settings. For example:

         provider "aws" {
           region = "us-west-2"
         }
      
  1. Authentication Mechanisms:
    Terraform supports different authentication mechanisms based on the provider. Here are some common authentication methods:

    • Access Key and Secret Key: For providers like AWS or Alibaba Cloud, you can provide access key and secret key credentials in the provider block or through environment variables.

    • Service Account Key: For providers like GCP or OCI, you can use service account keys or JSON key files to authenticate. These keys can be specified in the provider block or as environment variables.

    • OAuth Tokens: Some providers, such as Azure, support OAuth tokens for authentication. These tokens can be obtained from the provider's authentication system and provided in the provider block or via environment variables.

    • Instance Metadata: Certain cloud providers, like AWS, support instance metadata for authentication. In this case, the provider can automatically use the credentials associated with the running instance.

Configure provider authentication locally for interacting with respective cloud platforms.

  1. AWS (Amazon Web Services) Provider:

  2. Azure Provider:

  3. GCP (Google Cloud Platform) Provider:

  4. OCI (Oracle Cloud Infrastructure) Provider:

    • Documentation: OCI Provider - Authenticatilease refer to the respective documentation for detailed instructions on how to set up authentication with each provider, including any additional steps or specific configurations required.

let's choose AWS (Amazon Web Services) as the target provider to set up authentication on your local machine.

  1. Create a Terraform configuration file named main.tf and configure the chosen provider within it.
    Here's an example of a main.tf file with the AWS provider configuration:

     provider "aws" {
       region = "us-west-2"
     }
    
  2. Authenticate with the chosen cloud platform using the appropriate authentication method (e.g., access keys, service principals, or application default credentials).

    • To authenticate with AWS, use the AWS CLI and run aws configure to set up access keys and configure the default region and output format. Make sure you have the AWS CLI installed.
  3. Deploy a simple resource using the chosen provider. For example, if using AWS, you could provision a Virtual Private Cloud (VPC), Subnet Group, Route Table, Internet Gateway, or a virtual machine.
    Let's deploy a simple resource using AWS as the chosen provider. In this example, we'll provision an EC2 instance.

    • Create a new Terraform configuration file, such as main.tf.

    • Configure the AWS provider in the main.tf file:

        hclCopy codeprovider "aws" {
          region = "us-west-2"
        }
      
    • Ensure that the region specified matches your desired AWS region.

    • Add the resource block to provision an EC2 instance:

        hclCopy coderesource "aws_instance" "example" {
          ami           = "ami-0c94855ba95c71c99"
          instance_type = "t2.micro"
        }
      
    • In this example, we're using the Amazon Machine Image (AMI) ID for Ubuntu 18.04 and the instance type t2.micro. You can adjust the AMI and instance type according to your needs.

    • Save the main.tf file.

    • Initialize the Terraform working directory by running the following command:

        csharpCopy codeterraform init
      
    • Preview the changes that Terraform will apply by running the following command:

        Copy codeterraform plan
      
    • Review the plan to ensure it aligns with your expectations.

    • Apply the changes and provision the EC2 instance by running the following command:

        Copy codeterraform apply
      
    • Confirm the action by entering yes when prompted.

    • Terraform will provision the EC2 instance based on the configuration provided. You can monitor the progress in the console output.

  4. Experiment with updating the resource configuration in your main.tf file and apply the changes using Terraform. Observe how Terraform intelligently manages the resource changes.

    • Assuming you have an existing main.tf file with an AWS EC2 instance resource defined, let's modify the instance type from t2.micro to t2.small:

        hclCopy coderesource "aws_instance" "example" {
          ami           = "ami-0c94855ba95c71c99"
          instance_type = "t2.small" # Updated instance type
        }
      
    • Save the changes in main.tf.

    • Run the following command to preview the changes Terraform will make:

        shellCopy codeterraform plan
      
    • Terraform will display the planned changes, including the modification of the instance type from t2.micro to t2.small.

    • Apply the changes and update the resource using the following command:

        shellCopy codeterraform apply
      
    • Confirm the action by entering yes when prompted.

    • Terraform will automatically update the existing EC2 instance by modifying the instance type to t2.small. It intelligently handles the change by identifying the difference between the desired state (defined in main.tf) and the current state (existing resources).

    • You can observe how Terraform applies the changes, such as updating the instance type without recreating the entire EC2 instance. Terraform's state management allows it to make precise updates while minimizing disruption to existing resources.

    • Remember to review the plan carefully before applying changes to ensure they align with your intentions.

  5. Once you are done experimenting, use the terraform destroy command to clean up and remove the created resources.

    To clean up and remove the resources created with Terraform, you can use the terraform destroy command. Here's how:

    • Make sure you are in the same directory where your Terraform configuration files are located.

    • Run the following command to destroy the resources provisioned by Terraform:

        shellCopy codeterraform destroy
      
    • Terraform will display a plan of the resources that will be destroyed. Review the plan carefully to ensure it aligns with your intentions.

    • When prompted to confirm the destruction, enter yes to proceed.

Terraform will initiate the destruction process and remove the resources created earlier. It will delete the EC2 instance and any other associated resources.

Please note that the terraform destroy command irreversibly deletes the resources, and it's essential to exercise caution when running this command. Make sure you are certain about the resources you want to remove, as it cannot be undone.

Thank you so much for reading.

Follow me on LinkedIn to see interesting posts like this : )

Linkedin

ย