uuid: - value: d06d1e0c-2e71-4928-922f-c587f712a8e9 langcode: - value: en type: - target_id: daily_email target_type: node_type target_uuid: 8bde1f2f-eef9-4f2d-ae9c-96921f8193d7 revision_timestamp: - value: '2025-05-11T09:00:55+00:00' revision_uid: - target_type: user target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849 revision_log: { } status: - value: true uid: - target_type: user target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849 title: - value: 'Creating infrastructure with Ansible' created: - value: '2022-09-03T00:00:00+00:00' changed: - value: '2025-05-11T09:00:55+00:00' promote: - value: false sticky: - value: false default_langcode: - value: true revision_translation_affected: - value: true path: - alias: /dailys/2022/09/03/creating-infrastructure-with-ansible langcode: en body: - value: |

Let's start at the beginning.

If we want to automate our infrastructure then we first need to create it. This could be done manually or we can automate it.

Popular tools for this include Terraform and Pulumi, but Ansible also includes modules to interface with hosting providers such as Amazon Web Services, Microsoft Azure, DigitalOcean, and Linode.

By using one of these tools, you can programatically provision a new, blank server that is ready for you to be configered.

For example, to create a DigitalOcean droplet:

--- - community.digitalocean.digital_ocean_droplet:
          image: ubuntu-20-04-x64
          name: mydroplet
          oauth_token: "..."
          region: sfo3
          size: s-1vcpu-1gb
          ssh_keys: [ .... ]
          state: present
          wait_timeout: 500
        register: my_droplet
      

Running this playbook will create a new Droplet with the specified name, size, and operating system, and within the specified region.

If you needed to create a separate database server or another server for a new environment, then the file can be updated and re-run.

Creating an Amazon EC2 instance looks very similar:

--- - amazon.aws.ec2_instance:
          image_id: ami-123456
          instance_type: c5.large
          key_name: "prod-ssh-key"
          name: "public-compute-instance"
          network:
            assign_public_ip: true
          security_group: default
          vpc_subnet_id: subnet-5ca1ab1e
      

This doesn't apply just to servers - you can also use Ansible to create security groups and S3 buckets, manage SSH keys, firewalls, and load balancers.

Once we have our infrastructure in place, we can start using Ansible to set and manage its configuration, which we'll do in tomorrow's email.


Want to learn more about how I use Ansible? Register for my upcoming free email course.

format: full_html processed: |

Let's start at the beginning.

If we want to automate our infrastructure then we first need to create it. This could be done manually or we can automate it.

Popular tools for this include Terraform and Pulumi, but Ansible also includes modules to interface with hosting providers such as Amazon Web Services, Microsoft Azure, DigitalOcean, and Linode.

By using one of these tools, you can programatically provision a new, blank server that is ready for you to be configered.

For example, to create a DigitalOcean droplet:

--- - community.digitalocean.digital_ocean_droplet:
          image: ubuntu-20-04-x64
          name: mydroplet
          oauth_token: "..."
          region: sfo3
          size: s-1vcpu-1gb
          ssh_keys: [ .... ]
          state: present
          wait_timeout: 500
        register: my_droplet
      

Running this playbook will create a new Droplet with the specified name, size, and operating system, and within the specified region.

If you needed to create a separate database server or another server for a new environment, then the file can be updated and re-run.

Creating an Amazon EC2 instance looks very similar:

--- - amazon.aws.ec2_instance:
          image_id: ami-123456
          instance_type: c5.large
          key_name: "prod-ssh-key"
          name: "public-compute-instance"
          network:
            assign_public_ip: true
          security_group: default
          vpc_subnet_id: subnet-5ca1ab1e
      

This doesn't apply just to servers - you can also use Ansible to create security groups and S3 buckets, manage SSH keys, firewalls, and load balancers.

Once we have our infrastructure in place, we can start using Ansible to set and manage its configuration, which we'll do in tomorrow's email.


Want to learn more about how I use Ansible? Register for my upcoming free email course.

summary: null field_daily_email_cta: { }