2024-02-05 17:25:18 +01:00
2024-01-02 13:15:29 +01:00
2024-01-20 23:19:19 +01:00
2024-01-20 23:12:09 +01:00
2024-01-02 13:15:29 +01:00
2024-01-02 19:32:23 +01:00

AWS ContainerLab Deployment

This project automates the deployment of ContainerLab on an AWS EC2 instance using Terraform for infrastructure provisioning and Ansible for software setup and configuration. It also configures a Route53 DNS record for easy access to the ContainerLab instance.

To Do

  • Improving documentation
  • Complete DNS configuration conditioning

Prerequisites

Before you begin, ensure you have the following prerequisites installed and configured:

  • AWS CLI
  • Terraform
  • Ansible
  • Git (if cloning the repository)
  • An AWS account with the necessary permissions
  • A configured AWS Key Pair

Installation

  1. Configure AWS Credentials and Variables

    Set your AWS credentials and other sensitive data in terraform/terraform.tfvars.
    Example:

    AWS_ACCESS_KEY = "your_access_key"
    AWS_SECRET_KEY = "your_secret_key"
    AWS_REGION     = "desired_aws_region"
    AWS_KEY_NAME   = "your_key_pair_name"
    

    Important: Never commit terraform.tfvars to version control as it contains sensitive information.

  2. Clone the Repository

    If you haven't already, clone this repository to your local machine:

    git clone <repository_url>
    cd AWS-ContainerLab-Deployment
    
  3. Initialize Terraform

    Navigate to the Terraform directory and initialize the Terraform environment:

    cd terraform
    terraform init
    
  4. Apply Terraform Configuration

    Apply the Terraform configuration to start the deployment:

    terraform apply
    

    If you want to clone a specific GitHub repository during installation, pass the repository URL as a variable:

    terraform apply -var="GITHUB_REPO_URL=https://github.com/MasqAs/projet-vxlan-automation"
    

    Or, if you want to push a local directory:

    terraform apply -var="LOCAL_DIR_PATH=/path/to/your/local/directory"
    

    🖊️ if you use the local folder
    Note that there is no synchronization between your remote folder and your local folder once the instance has been created.

    Enter yes when prompted to proceed.

  5. Ansible Automation

    The Terraform configuration will automatically trigger the Ansible playbook install_containerlab.yml after the EC2 instance is up. This playbook configures the instance with the necessary packages and settings, installs ContainerLab, and optionally clones the specified GitHub repository.

Network Images Folder

The network_images folder is intended for Docker images that will be used by ContainerLab. These images should be pre-downloaded and placed in this folder before running the Ansible playbook. During the setup process, the images will be copied to the remote /tmp directory of the ContainerLab host and then imported into Docker.

Accessing ContainerLab

  • You can access the ContainerLab instance via SSH using the public IP or the DNS name provided by Route53.
  • The public IP of the instance can be found in the Terraform output.
  • The DNS name will be in the format containerlab <your_route53_zone_name>.

⚠️ ROUTE 53
By default, Route 53 is disabled to avoid errors in case of incomplete configuration.
To enable it, modify the variables: AWS_R53_ENABLED and AWS_R53_ZONE_ID.
In any case, AWS_R53_ZONE_ID need to be configured.

Customization

  • You can customize the deployment by modifying the Terraform variables in terraform/variables.tf.
  • The Ansible playbook can be customized by editing ansible/install_containerlab.yml.

Clean Up

To destroy the AWS resources created by Terraform, run:

terraform destroy

Enter `yes` when prompted.

Contributing

Contributions to this project are welcome. Please ensure you follow the established coding standards and update the documentation as necessary.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Description
This project automates the deployment of ContainerLab tools on an AWS EC2 instance using Terraform for infrastructure provisioning and Ansible for software configuration and management.
Readme MIT 67 KiB
Languages
HCL 100%