برنامه نویسی

Ansible به عنوان ابزار تامین: ایجاد VPC

معرفی

Ansible یک نرم افزار نرم افزار اتوماسیون فناوری اطلاعات خط فرمان منبع باز است که توسط RedHat حمایت می شود.

این بیشتر به عنوان یک ابزار مدیریت پیکربندی سرور، ابزار اتوماسیون شبکه استفاده می شود و همچنین می تواند برای ارائه استفاده شود.
چندین سرویس مانند kubernetes، nginx و خدمات در چندین پلت فرم ابری. برای مشاهده لیست خدمات پشتیبانی شده، اسناد رسمی را بررسی کنید.

در این مقاله نحوه ساخت یک AWS VPC بدون نیاز به استفاده از کنسول AWS با استفاده از Ansible توضیح داده شده است. VPC شامل یک زیرشبکه خصوصی و عمومی، دروازه اینترنت برای زیرشبکه عمومی، یک دروازه Nat برای زیرشبکه خصوصی و جداول مسیر است.

پیش نیازها

  • یک حساب AWS
  • یک کاربر AWS با نقش IAM که دارای مجوزهای لازم برای ایجاد منابع، عمدتاً یک نقش مدیر است.
  • باید ansible نصب شده باشد. برای راهنمای نصب اینجا را کلیک کنید

راه اندازی دایرکتوری پروژه

یک دایرکتوری ایجاد کنید که در آن می خواهید پروژه خود را راه اندازی کنید. در پوشه کاری، یک فایل network.yml و یک پوشه vars با یک فایل main.yml در آن ایجاد کنید. پوشه vars حاوی متغیرهای محیطی خواهد بود. ساختار دایرکتوری شما باید به شکل زیر باشد:

├── network.yml
└── vars
    └── main.yml
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرها

استفاده از متغیرها برای اطمینان از انعطاف پذیری در کتاب اصلی در صورت تکرار مقادیر است و می توانید به راحتی مقادیر را بدون تغییر فایل اصلی تغییر دهید.
این را کپی کرده و در فایل main.yml در پوشه vars قرار دهید. مطمئن شوید که “aws_secret_key” و “aws_access_key” را با شما جایگزین کنید. اگرچه توصیه نمی‌شود کلیدهای مخفی کد سخت را در فایل‌های متغیر قرار دهید، اسناد مربوط به نحوه استفاده از بهترین روش‌ها برای ذخیره اعتبارنامه‌ها را بررسی کنید.

aws_secret_key: ""
aws_access_key: ""
region: us-east-1 
vpc_cidr: 10.1.0.0/16
public_subnet_cidr: 10.1.1.0/24
private_subnet_cidr: 10.1.2.0/24
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد VPC

این کد را کپی کرده و در فایل network.yml قرار دهید

- name: Create VPC and Subnets
  hosts: localhost
  # This is to make sure the playbook references the variables in the vars folder
  vars_files:
    - vars/main.yml
  module_defaults:
    group/aws:
      aws_secret_key: "{{ aws_secret_key }}"
      aws_access_key: "{{ aws_access_key }}"

  tasks:
    - name: Create a VPC
      amazon.aws.ec2_vpc_net:
        name: test
        state: present
        cidr_block: "{{ vpc_cidr }}"
        region: "{{ region }}"
        dns_hostnames: true
        dns_support: true
        tags:
          key: name
          value: dev
      # the 'register' keyword here is to register the module returned data in the 'vpc_name' variable
      register: vpc_name

    - name: Create Public Subnet
      amazon.aws.ec2_vpc_subnet:
        state: present
        vpc_id: "{{ vpc_name.vpc.id }}"
        region: "{{ region }}"
        cidr: "{{ public_subnet_cidr }}"
        map_public: true
      register: public_sub

    - name: Create Private Subnet
      amazon.aws.ec2_vpc_subnet:
        state: present
        vpc_id: "{{ vpc_name.vpc.id }}"
        region: "{{ region }}"
        cidr: "{{ private_subnet_cidr }}"
        map_public: true
      register: private_subnet

    - name: Create Internet Gateway
      amazon.aws.ec2_vpc_igw:
        vpc_id: "{{ vpc_name.vpc.id }}"
        region: "{{ region }}"
        state: present
      register: igw

    - name: Public Subnet Route Table
      amazon.aws.ec2_vpc_route_table:
        vpc_id: "{{ vpc_name.vpc.id }}"
        region: "{{ region }}"
        subnets:
          - "{{ public_sub.subnet.id }}"
        routes:
          - dest: 0.0.0.0/0
            gateway_id: "{{ igw.gateway_id }}"
      register: public_route_table

    - name: Elastic IP for Nat gateway
      amazon.aws.ec2_eip:
        region: "{{ region }}"
        state: present
      register: eip

    - name: Network gateway
      amazon.aws.ec2_vpc_nat_gateway:
        state: present
        subnet_id: "{{ private_subnet.subnet.id }}"
        eip_address: "{{ eip.public_ip }}"
        region: "{{ region }}"
        wait: true
      register: nat

    - name: Private subnet route table
      amazon.aws.ec2_vpc_route_table:
        vpc_id: "{{ vpc_name.vpc.id }}"
        region: "{{ region }}"
        subnets:
          - "{{ private_subnet.subnet.id }}"
        routes:
          - dest: 0.0.0.0/0
            gateway_id: "{{ nat.nat_gateway_id }}"

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

playbook را اجرا کنید

ترمینال را در پوشه کاری باز کنید و دستور را اجرا کنید

ansible-playbook network.yml
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی باید به این شکل باشد

PLAY [Create VPC and Subnets] **************************************

TASK [Gathering Facts] *********************************************
ok: [localhost]

TASK [Create a VPC] ************************************************
changed: [localhost]

TASK [Create Public Subnet] ****************************************
changed: [localhost]

TASK [Create Private Subnet] ***************************************
changed: [localhost]

TASK [Create Internet Gateway] *************************************
changed: [localhost]

TASK [Public Route Table] ******************************************
changed: [localhost]

TASK [Elastic IP for Nat gateway] **********************************
changed: [localhost]

TASK [Network gateway] *********************************************
changed: [localhost]

TASK [Private subnet route table] **********************************
changed: [localhost]

PLAY RECAP *********************************************************
localhost                  : ok=9    changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

می توانید وارد کنسول AWS شوید و مطمئن شوید که با موفقیت ایجاد شده است
کنسول AWS VPC ایجاد شده با Ansible را نشان می دهد

نتیجه

این در مورد نحوه استفاده از Ansible برای ایجاد VPC است. در مقاله بعدی، نحوه حذف منابع ایجاد شده با استفاده از Ansible را نشان خواهم داد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا