[Ansible] 我写了一本构建 AWS 网络的剧本
你好。已经很久了。
这是 SS 队的 Shimeji。
今天我们将讨论使用 Ansible 构建 AWS 网络的手册。
*我的高级同事撰写了有关使用 Terraform 和 CloudFormation 构建 AWS 网络的文章,因此我也想看一下它们。
这次我们要构建的网络将具有以下形式。
目录结构
playbook的目录结构如下。
├── README.md ├── ansible.cfg ├── 主机 ├── 角色 │ └── aws_vpc │ ├── 任务 │ │ └── main.yml │ └── vars │ └── main.yml └── vpc_create.yml
剧本
库存文件
root@DESKTOP-MOGIJIA:/opt/playbook/aws-vpc-2layer# cat 主机 [localhost] 127.0.0.1
请在清单文件中指定本地主机。
角色
Ansible 允许将 playbook 模块化为称为“角色”的单元。
这次,我们将创建一个名为“aws_vpc”的单独角色,并将其包含在主剧本中。
root@DESKTOP-MOGIJIA:/opt/playbook/aws-vpc-2layer# cat Roles/aws_vpc/tasks/main.yml --- # aws_vpc 的任务文件 - name: create_vpc ec2_vpc_net: name: "{{ vpc_name }}" cidr_block: "{{ vpc_cidr }}" 区域: "{{ Region }}" dns_hostnames: yes dns_support: yes 注册: vpc_info # PUBLIC_SUBNET 创建 - 名称: create_public_subnet ec2_vpc_subnet: vpc_id: "{{ vpc_info.vpc.id }}" cidr : "{{ item.pub_subnet_cidr }}" az: "{{ item.subnet_az }}" 区域: "{{ Region }}" Resource_tags: { "Name":"{{ item.pub_subnet_name }}" } 注册: pubsub_info with_items: - "{{ pub_subnet }}" # PRIVATE_SUBNET 创建 - 名称: create_private_subnet ec2_vpc_subnet: vpc_id: "{{ vpc_info.vpc.id }}" cidr: "{{ item.pri_subnet_cidr }}" az: "{{ item. subnet_az }}"region:"{{region }}"resource_tags:{"Name":"{{item.pri_subnet_name}}"}register:prisub_info with_items:-"{{pri_subnet}}"#创建IGW-name:create_igw ec2_vpc_igw: vpc_id: "{{ vpc_info.vpc.id }}" 区域: "{{ Region }}" 标签: { "Name":"{{ igw_name }}" } register: igw_info # ROUTETABLE 创建 (IGW) - 名称: create_route_table ec2_vpc_route_table: vpc_id: "{{ vpc_info.vpc.id }}" 子网: "{{ atache_igw_subnet }}" 路由: - 目标: 0.0.0.0/0 gateway_id: "{{ igw_info.gateway_id }}" 区域: " {{ 区域 }}" resources_tags: { "名称":"{{ rttable_pub_name }}" }
Ansible 允许您使用“ec2_vpc_xxx”模块构建 AWS VPC、子网、互联网网关等。
另外,我们会将各种值转换为变量,以便以后可以更改它们。
定义变量
root@DESKTOP-MOGIJIA:/opt/playbook/aws-vpc-2layer# cat Roles/aws_vpc/vars/main.yml --- # aws_vpc 的 vars 文件 # REGION 区域: "ap-northeast-1" # VPC vpc_name: "shimeji-wd-vpc" vpc_cidr: "10.0.0.0/16" # IGW igw_name: "shimeji-igw" # ROUTETABLE(PUBLIC) rttable_pub_name: "shimeji-pub-rt" # PUBLIC_SUBNET pub_subnet: - { pub_subnet_cidr: "10.0. 10.0/24" ,subnet_az: "ap-northeast-1a" ,pub_subnet_name: "shimeji-wd-public-subnet-a" } - { pub_subnet_cidr: "10.0.20.0/24" ,subnet_az: "ap-northeast-1c" ,pub_subnet_name: "shimeji-wd-public-subnet-c" } # PRIVATE_SUBNET pri_subnet: - { pri_subnet_cidr: "10.0.30.0/24" ,subnet_az: "ap-northeast-1a" ,pri_subnet_name: "shimeji-wd-private- subnet-a" } - { pri_subnet_cidr: "10.0.40.0/24" ,subnet_az: "ap-northeast-1c" ,pri_subnet_name: "shimeji-wd-private-subnet-c" } # 链接到 IGW 的子网 atache_igw_subnet: - " 10.0.10.0/24” - “10.0.20.0/24”
这次,我们将在每个资源的名称中添加前缀“shimeji”。
剧本
是的,主要剧本。
包括上面创建的角色。
root@DESKTOP-MOGIJIA:/opt/playbook/aws-vpc-2layer# cat vpc_create.yml --- # VPC CREATE Playbook - 名称:创建 vpc 子网 igw 可路由主机:本地主机 连接:本地 Gather_facts:False 变为:False 角色: -aws_vpc
由于这次我们不配置服务器,因此不需要“gather_facts”和“become”。
现在你已经准备好了。
执行
root@DESKTOP-MOGIJIA:/opt/playbook/aws-vpc-2layer# ansible-playbook -i 主机 vpc_create.yml PLAY [创建 vpc 子网 igw 路由表] **************** ********************************************************** ************** 任务 [aws_vpc:create_vpc] ****************************** ********************************************************** ************ 更改:[127.0.0.1] 任务 [aws_vpc:create_public_subnet] ************************* ********************************************************** ****** 更改: [127.0.0.1] => (item={u'pub_subnet_name': u'shimeji-wd-public-subnet-a', u'subnet_az': u'ap-northeast-1a ', u'pub_subnet_cidr': u'10.0.10.0/24'}) 更改: [127.0.0.1] => (item={u'pub_subnet_name': u'shimeji-wd-public-subnet-c', u' subnet_az': u'ap-northeast-1c', u'pub_subnet_cidr': u'10.0.20.0/24'}) 任务 [aws_vpc : create_private_subnet] ***************** ********************************************************** ************** 更改: [127.0.0.1] => (item={u'pri_subnet_cidr': u'10.0.30.0/24', u'pri_subnet_name': u'shimeji- wd-private-subnet-a', u'subnet_az': u'ap-northeast-1a'}) 已更改:[127.0.0.1] => (item={u'pri_subnet_cidr': u'10.0.40.0/24' , u'pri_subnet_name': u'shimeji-wd-private-subnet-c', u'subnet_az': u'ap-northeast-1c'}) 任务 [aws_vpc : create_igw] ********** ********************************************************** ****************************** 更改:[127.0.0.1] 任务 [aws_vpc:create_route_table] ***** ********************************************************** ***************************** 更改:[127.0.0.1] 播放回顾 ************ *** ************************************************** *** ************************************************** ********** 127.0.0.1 : 确定=5 已更改=5 无法访问=0 失败=0 已跳过=0 已获救=0 已忽略=0
是的,它工作正常。
在最后
单击此处查看我尊敬的前辈的文章
■ CloudFormation
https://beyondjapan.com/blog/2019/03/cloudformation1/
■ Terraform
https://beyondjapan.com/blog/2018/07/terraform-aws-network- module/
如果您觉得这篇文章有帮助,请点赞!