[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

我创建了 Ansible 剧本来在 AWS 上构建 3 层网络配置

你好。
这是 SS 队的 Shimeji。
之前写过一篇关于用Ansible搭建两层网络的文章,但在实际项目中,环境往往是用三层网络搭建的。
因此,我创建了一个剧本来使用 Ansible 构建 3 层 AWS 网络。
*实际要搭建的环境在这里↓

目录结构

playbook的目录结构如下。

. ├── README.md ├── ansible.cfg ├── 主机 ├── 角色 │ └── aws_vpc │ ├── 任务 │ │ └── main.yml │ └── vars │ └── main. yml └── vpc_create.yml

剧本

是的,这是一本剧本。
它与两层 playbook 基本相同,但我们添加了创建新 NATGATEWAY 并为 DMZ 子网创建路由表的功能。

--- aws_vpc 的 # 任务文件 - name: create_vpc ec2_vpc_net: name: "{{ vpc_name }}" cidr_block: "{{ vpc_cidr }}"region: "{{region }}" profile:"{{ profile }}" dns_hostnames: 是 dns_support: 是 注册: 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 }}" 区域: "{{ 区域 }}" 资源标签: { "名称":"{{ item.pub_subnet_name }}" } 配置文件: "{{ 配置文件 }}" 注册: pubsub_info with_items: - "{{ pub_subnet }} " # 创建 DMZ_SUBNET - 名称:create_dmz_subnet ec2_vpc_subnet: vpc_id: "{{ vpc_info.vpc.id }}" cidr: "{{ item.dmz_subnet_cidr }}" az: "{{ item.subnet_az }}" 区域: "{{区域 }}" resource_tags: { "Name":"{{ item.dmz_subnet_name }}" } profile: "{{ profile }}" register: pubsub_info with_items: - "{{ dmz_subnet }}" # PRIVATE_SUBNET 创建 - name: create_private_subnet ec2_vpc_subnet:vpc_id:“{{ vpc_info.vpc.id }}”cidr:“{{ item.pri_subnet_cidr }}”az:“{{ item.subnet_az }}”区域:“{{区域}}”resource_tags:{“ Name":"{{ item.pri_subnet_name }}" } profile: "{{ profile }}" register: prisub_info with_items: - "{{ pri_subnet }}" # 创建 IGW - name: create_igw ec2_vpc_igw: vpc_id: "{{ vpc_info .vpc.id }}" 区域:"{{ 区域 }}" 标签:{ "名称":"{{ igw_name }}" } 配置文件:"{{ 配置文件 }}" 注册: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 }}”区域: "{{region }}" profile: "{{ profile }}" resources_tags: { "Name":"{{ rttable_pub_name }}" } # 获取用于放置 NGW 的 SUBNETID - name: get_subnet_id shell: aws ec2 describe-subnets --region {{ 区域 }} --profile {{ 配置文件 }} --output text | grep -B 1 {{ ngw_subnet_name }} | awk 'NR==1 {print $12}' register: ngw_subnet_id #- name: show # debug: # msg: "{{ ngw_subnet_id.stdout }}" # NGW 创建 - 名称: create_ngw ec2_vpc_nat_gateway:subnet_id: "{{ ngw_subnet_id.stdout }}" 区域: "{{ Region }}" profile: "{{ profile }}" wait: yes register: ngw_info #- name: show # debug: # msg: "{{ ngw_info.nat_gateway_id }}" # 等待 NGW 创建 #- name: wait_for_ngw #pause: # 分钟: 5 # ROUTETABLE 创建 ( NGW) - 名称:create_route_table2 ec2_vpc_route_table:vpc_id:“{{ vpc_info.vpc.id }}”子网:“{{ atache_ngw_subnet }}”路由:- 目标:0.0.0.0/0 gateway_id:“{{ ngw_info.nat_gateway_id }} “ 区域:“{{ 区域 }}” 配置文件:“{{ 配置文件 }}” 资源标签:{“名称”:“{{ rttable_dmz_name }}” }

我格式化 awscli 命令的结果以获取 DMZ 子网的 ID。
就像用它来创建 NATGATEWAY 一样。
另外,创建 NATGATEWAY 需要一段时间,因此我使用“暂停”模块暂时停止该过程。
*补充说明:
有人在 Twitter 上指出“ec2_vpc_nat_gateway”有一个名为“等待”的选项!
谢谢你!

定义变量

--- # aws_vpc 的 vars 文件 # REGION 区域: "ap-northeast-1" # PROFILE 配置文件: "default" # VPC vpc_name: "shimeji-3layer-vpc" vpc_cidr: "10.10.0.0/16" # IGW igw_name: "shimeji-3layer-igw" # NGW ngw_name: "shimeji-3layer-ngw" # 创建 NGW 的子网名称 ngw_subnet_name: "shimeji-3layer-public-subnet-a" # ROUTETABLE(PUBLIC) rttable_pub_name: "shimeji-3layer- pub -rt" # ROUTETABLE(DMZ) rttable_dmz_name: "shimeji-3layer-dmz-rt" # PUBLIC_SUBNET pub_subnet: - { pub_subnet_cidr: "10.10.10.0/24" ,subnet_az: "ap-northeast-1a" ,pub_subnet_name: "shimeji - 3layer-public-subnet-a" } - { pub_subnet_cidr: "10.10.20.0/24" ,subnet_az: "ap-northeast-1c" ,pub_subnet_name: "shimeji-3layer-public-subnet-c" } # DMZ_SUBNET dmz_subnet: - { dmz_subnet_cidr: "10.10.30.0/24" ,subnet_az: "ap-northeast-1a" ,dmz_subnet_name: "shimeji-3layer-dmz-subnet-a" } - { dmz_subnet_cidr: "10.10.40.0/24" ,subnet_az: " ap-northeast-1c" ,dmz_subnet_name: "shimeji-3layer-dmz-subnet-c" } # PRIVATE_SUBNET pri_subnet: - { pri_subnet_cidr: "10.10.50.0/24" ,subnet_az: "ap-northeast-1a" ,pri_subnet_name: " shimeji-3layer-private-subnet-a" } - { pri_subnet_cidr: "10.10.60.0/24" ,subnet_az: "ap-northeast-1c" ,pri_subnet_name: "shimeji-3layer-private-subnet-c" } # IGW 子网链接到 atache_igw_subnet: - "10.10.10.0/24" - "10.10.20.0/24" # 链接到 NGW atache_ngw_subnet: - "10.10.30.0/24" - "10.10.40.0/24" 的子网

这次,为每个资源添加前缀“shimeji-3layer”。

执行

让我们尝试一下。

root@BYD-NPC-023:/opt/playbook/aws-vpc-3layer# 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-3layer- public-subnet-a', u'subnet_az': u'ap-northeast-1a', u'pub_subnet_cidr': u'10.10.10.0/24'}) 更改: [127.0.0.1] => (item={u 'pub_subnet_name': u'shimeji-3layer-public- subnet-c', u'subnet_az': u'ap-northeast-1c', u'pub_subnet_cidr': u'10.10.20.0/24'}) 任务 [aws_vpc: create_dmz_subnet] ********** ****************************************************** ****************************************************** ****************************************************** ************** 更改: [127.0.0.1] => (item={u'dmz_subnet_cidr': u'10.10.30.0/ 24', u'dmz_subnet_name': u'shimeji- 3layer-dmz-subnet-a', u'subnet_az': u'ap-northeast-1a'}) 更改: [127.0.0.1] => (item={u 'dmz_subnet_cidr': u'10.10.40.0/24' , u'dmz_subnet_name': u'shimeji-3layer-dmz-subnet-c', u'subnet_az': u'ap-northeast-1c'}) 任务 [aws_vpc: create_private_subnet] ********** ****************************************************** ****************************************************** ****************************************************** ********** 更改: [127.0.0.1] => (item={u'pri_subnet_cidr': u'10.10.50.0/24', u 'pri_subnet_name': u'shimeji-3layer-private- subnet-a', u'subnet_az': u'ap-northeast-1a'}) 更改: [127.0.0.1] => (item={u'pri_subnet_cidr': u'10.10.60.0/24', u'pri_subnet_name ': u'shimeji-3layer-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] 任务 [aws_vpc : get_subnet_id] ********************** ************ ****************************************************** ****************************************************** ************************************** ****** 更改:[127.0.0.1 ] 任务 [aws_vpc:create_ngw] ************************************* ****** ****************************************************** ****************************************************** ********************************************** 更改:[127.0.0.1 ] 任务 [aws_vpc:wait_for_ngw] ********************************************** ***** ************************************************* ***** ************************************************* ***** ************************************************* *** 暂停 300 秒(ctrl+C 然后“C”= 提前继续,ctrl+C 然后“A”= 中止)确定:[127.0.0.1] TASK [aws_vpc : create_route_table2] ******** ****** ********************************************** ****** ********************************************** ****** ********************************************** ******** *** 更改:[127.0.0.1] 播放回顾 ****************************** ****** ********************************************** ****** ********************************************** ****** ********************************************** ******** ********** 127.0.0.1 :确定=10 已更改=9 无法访问=0 失败=0 已跳过=0 已获救=0 已忽略=0

是的,成功了!

在最后

通过从管理屏幕中单击即可构建AWS网络,但这非常耗时,并且可能会导致人为错误。
在这方面,使用 Ansible 将节省您的时间并减少错误!

↓对了,第二层来了。

[Ansible] 我写了一本构建 AWS 网络的剧本

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
1,069
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

[大阪/横滨] 积极招募基础设施工程师和服务器端工程师!

写这篇文章的人

关于作者

姬菇

证书:
- TOEIC 835
- LPIC304
- AWS 解决方案架构师助理
- AWS 解决方案架构师专业
- GCP 专业云架构师
- IPA SC(未注册)

戈薇,戈薇,
我身后的老头,就这样了。

这是我叔叔。 (2018)