top of page

Core Concepts of Infrastructure as Code - Day 25

Writer's picture: vPvP

Hello and welcome back to our #90DaysOfDevOps Series! Today, we're diving deeper into Infrastructure as Code (IaC) as we explore the fundamental concepts of your chosen IaC tool. Whether you've selected Terraform, AWS CloudFormation, or Ansible, this is the day to grasp the core concepts, including resources, providers, and modules. We'll experiment with defining and deploying simple resources to solidify our understanding.


Understanding Core IaC Concepts

1. Resources: The Building Blocks

Resources are the fundamental building blocks in IaC. They represent the infrastructure components you want to create or manage. In Terraform, these are defined using resource blocks. In AWS CloudFormation, resources are defined in the template, and in Ansible, they're managed using modules.


For example, to create an AWS S3 bucket, you define a resource with the necessary attributes and configurations.


2. Providers: Bridging the Gap

Providers serve as the bridge between your IaC tool and the infrastructure you want to manage. Each cloud or infrastructure platform typically has a corresponding provider that you must configure in your IaC code.


In Terraform, providers are declared in a configuration block. In AWS CloudFormation, the provider is AWS itself. In Ansible, modules are available for different platforms.


Providers define where the resources will be created. For instance, if you're working with AWS resources, you'd use the AWS provider.


3. Modules: Reusability and Organization

Modules enable code reusability and organization. They allow you to group resources together into reusable components. Modules can be used to create instances of resources with consistent configurations.


In Terraform, modules are separate directories containing Terraform configuration files. In AWS CloudFormation, modules are reusable CloudFormation stacks. In Ansible, roles act as modules.


For instance, you could create a module for a web server configuration, making it easy to create multiple instances of web servers with the same settings.


Experimenting with Simple Resources

Now, let's put these concepts into action. We'll create a simple resource using your chosen IaC tool.


1. Terraform Example

Let's create a virtual machine using Terraform. This code will create an AWS EC2 instance.

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

After defining the resource and provider, run:

terraform init
terraform apply


2. AWS CloudFormation Example

In AWS CloudFormation, create a stack with an S3 bucket.

Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-unique-bucket-name

Use the AWS CloudFormation console or the AWS CLI to create the stack.


3. Ansible Example

For Ansible, let's create a simple resource, like an Nginx web server installation.

---
- name: Install Nginx
  hosts: web_servers
  become: true
  tasks:
    - name: Update package list
      apt:
        update_cache: yes
      when: ansible_os_family == "Debian"

    - name: Install Nginx
      apt:
        name: nginx
      when: ansible_os_family == "Debian"

Run the playbook using:

ansible-playbook my-playbook.yml


Today, we have discussed the core concepts of Infrastructure as Code: resources, providers, and modules. We've also experimented with defining and deploying simple resources using your chosen IaC tool.


As you progress in your #90DaysOfDevOps journey, remember that IaC offers immense power in automating and managing infrastructure. Keep exploring and expanding your skills by creating more complex infrastructures and diving deeper into the capabilities of your chosen tool.


Thank you for reading!


*** Explore | Share | Grow ***

3 views0 comments

Comentários

Avaliado com 0 de 5 estrelas.
Ainda sem avaliações

Adicione uma avaliação
vp1.2_23.png

vPundit

Explore | Share | Grow

Thanks for submitting!

vPundit

bottom of page