基于 Amazon CloudFormation 打造三层 Web 应用架构实战

一、引言

在云计算领域,Amazon CloudFormation 作为基础设施即代码(IaC)的有力工具,可实现亚马逊云科技资源的自动化部署与管理。最近,我们团队接到一个新项目,需要搭建一套完整的测试环境。当时采用传统的手工操作方式:

  • 老王负责创建 Amazon EC2实例,用了和开发环境不同的AMI镜像
  • 小李配置安全组时漏开了两个关键端口
  • 我部署RDS时选错了参数组

结果环境部署花了整整两天,最后跑应用时各种报错,又花了一天排查问题。最让人崩溃的是,一个月后需要再搭建一套环境时,谁也记不清上次是怎么配置的了。

今天想和大家分享一下,为什么 Amazon CloudFormation 会成为我们团队基础设施管理的核心工具。本文将通过一个实战案例,详细讲解如何利用 Amazon CloudFormation 搭建高可用的三层 Web 应用架构,助力读者掌握这一关键技术。

二、为什么选择CloudFormation?

在传统的基础设施部署模式中,运维团队往往需要手动执行一系列繁琐的操作:登录服务器控制台、逐个配置网络参数、调试安全组规则、部署数据库实例,这种模式存在两个根本性缺陷:

  1. 效率瓶颈:每个环境的部署都是全新的手工劳动,即使配置相似的资源也需要重复操作。
  2. 一致性风险:人工操作难以避免细微差异,这些差异积累起来就会导致"在我本地环境是好的"这类典型问题。

而CloudFormation通过基础设施即代码(IaC)的革命性方式解决了这些痛点,它将亚马逊云科技资源(EC2、S3、RDS等)的定义封装在声明式的YAML/JSON模板中,实现了三个维度的进化:

  1. 部署自动化: 单个模板文件可以描述完整的云架构,通过API调用实现一键式部署。原本需要数天的手工操作,现在只需几分钟就能可靠完成。
  2. 环境同位性:模板就像蓝图,确保开发、测试、生产环境如同克隆般一致。我们团队曾用同一模板在三个区域部署完全一致的环境,彻底消除了环境差异导致的问题。
  3. 知识资产化:模板成为团队共享的知识库,新成员通过阅读模板就能理解架构全貌,降低重复劳动。

三、项目准备

在开始部署之前,需要准备一个亚马逊云科技账号,首先进入[亚马逊云科技]官网,点击注册账号,输入邮箱并验证。

点击下一步,输入用户名和密码:

填写手机号,信用卡或者借记卡号进行绑定并选择手机验证方式,亚马逊云科技提供了多种付款方式,包括信用卡和预付费等选项,以满足不同用户的需求。

注册好账号后,还需要开发工具,这里推荐使用 Amazon CloudFormation 设计器或Visual Studio Code来编写模板。

四、实验步骤

4.1、创建 CloudFormation 模板

  1. 模板结构概述

    1. AmazonTemplateFormatVersion :声明模板的版本,以确保模板的正确解析和渲染。例如。
    2. Description :对模板进行简要描述,便于理解和识别。例如:Description: 高可用三层 Web 应用架构模板
    3. Resources :定义所需创建的亚马逊云科技资源及其属性,这是模板的核心部分。
  2. Web 层资源配置

    1. 使用 Amazon::EC2::Instance 资源类型创建 Web 服务器实例。指定实例的 AMI(Amazon Machine Image),选择适合的实例类型(如 t3.micro),并配置安全组,允许外部通过 HTTP(端口 80)和 HTTPS(端口 443)访问 Web 服务器。
    2. 编写用户数据脚本,在实例启动时安装 Web 服务器软件(如 Apache)并配置基础的 Web 页面。例如:
php 复制代码
WebServer:Type: Amazon::EC2::Instance
  Properties:ImageId: ami-0c55b159cbfafe1f0   # 选择合适的 AMIInstanceType: t3.micro
    SecurityGroupIds:- !Ref WebServerSecurityGroup
    UserData:Fn::Base64: !Sub |
        #!/bin/bash
        sudo apt-get update -y
        sudo apt-get install apache2 -y
        sudo systemctl start apache2
        sudo systemctl enable apache2
        echo "<h1>Welcome to the Web Layer</h1>" | sudo tee /var/www/html/index.html
  1. 应用层资源配置
markdown 复制代码
1.  创建应用服务器实例,类似 Web 层的配置方法,但根据应用的需求选择不同的 AMI 和实例类型。设置应用服务器与 Web 服务器之间的通信,通过安全组规则允许特定端口(如 8080)的访问。
2.  配置应用服务器的用户数据脚本,安装和启动应用服务,确保应用能够正常运行并与后端数据层进行交互。例如:
ruby 复制代码
ApplicationServer:Type: Amazon::EC2::Instance
  Properties:ImageId: ami-0c55b159cbfafe1f0   # 选择合适的 AMIInstanceType: t3.micro
    SecurityGroupIds:- !Ref ApplicationServerSecurityGroup
    UserData:Fn::Base64: !Sub |
        #!/bin/bash
        sudo apt-get update -y
        # 安装应用服务相关软件并进行配置
  1. 数据层资源配置
markdown 复制代码
1.  使用 `Amazon::RDS::DBInstance` 资源类型创建关系型数据库实例。配置数据库的引擎(如 MySQL)、实例类、存储容量、用户名和密码等参数。
2.  设置数据库的安全组,允许应用服务器访问数据库,并限制外部不必要的访问。例如:
yaml 复制代码
Database:Type: Amazon::RDS::DBInstance
  Properties:DBInstanceClass: db.t3.micro
    Engine: MySQL
    MasterUsername: admin
    MasterUserPassword: Password123
    DBName: mydatabase
    AllocatedStorage: 20BackupRetentionPeriod: 7MultiAZ: falsePubliclyAccessible: falseVPCSecurityGroups:- !Ref DatabaseSecurityGroup

4.2、使用 CloudFormation 模板创建堆栈

  1. 登录亚马逊云科技管理控制台,进入 CloudFormation 服务页面。
  2. 点击 "创建堆栈" 按钮,选择 "模板是已上传到 Amazon S3 的模板" 选项(若未上传模板文件,可先选择 "模板位于 Amazon S3 中" 选项,然后上传模板文件)。
  1. 在堆栈详情页面,设置堆栈名称(如 HighAvailableWebAppStack),并根据需要填写相关参数(如实例类型、数据库密码等)。
  2. 点击 "下一步",在配置堆栈页面,可根据实际情况进行高级配置(如设置堆栈标签、指定通知ARN等),然后点击 "下一步"。
  3. 在堆栈选项页面,可设置回滚配置、权限等选项,其中回滚所有堆栈资源能够将堆栈回滚到上一个稳定状态,保留那些已成功配置的资源,而失败的资源会回滚到一个稳定的状态。如果没有成功过,失败的资源会在下一次堆栈更新时被清理。使用删除策略可以根据每个资源的删除策略来决定是保留还是删除已创建的资源。
  1. 最后,仔细检查堆栈配置信息,确认无误后点击 "创建堆栈" 按钮,开始创建堆栈。等待堆栈创建完成,在此过程中,可在堆栈事件页面查看资源创建的进度和状态。

CREATE_COMPLETE 状态代码表示堆栈创建过程已完成:

堆栈创建完毕后,会在你注册邮箱中发送一个订阅邮件,需要点击确认。

4.3、验证 Web 应用的运行

  1. 在堆栈创建成功后,获取 Web 服务器实例的公共 IP 地址或 DNS 名称。
  2. 在浏览器中输入该地址,访问 Web 应用的首页,检查是否能够正常显示由 Web 服务器提供的页面,如显示 "Welcome to the Web Layer" 等内容,说明 Web 层已成功运行。
  3. 进一步通过测试应用的功能(如提交表单、查询数据等操作),验证应用层和数据层是否能够正常协同工作。

4.4、清除资源

友情提示:如果决定不再使用服务的话,记得要在控制台关闭服务,以防超过免费额度产生扣费

  1. 当实验完成或不再需要该三层 Web 应用架构时,为避免产生不必要的费用,需要及时清理创建的资源。
  2. 在 CloudFormation 控制台中,选择对应的堆栈,点击 "删除堆栈" 按钮,确认删除操作。CloudFormation 会按照相反的创建顺序依次删除堆栈中的所有资源,完成资源的清理。

五、实验总结

Amazon CloudFormation不仅能够实现基础设施的代码化和版本控制,确保环境的一致性和可复用性,还能通过声明式模板轻松实现资源的全生命周期管理,包括创建、更新和删除操作。然而,在实际应用中,我们也需要注意模板的编写规范和复杂性管理,以确保 CloudFormation 堆栈的稳定运行和高效维护。此外,合理利用CloudFormation 的各种功能(如嵌套堆栈、参数化配置等)可以进一步提升架构的灵活性和可扩展性,更好地满足企业不同业务场景的需求。总之,掌握 Amazon CloudFormation 这一基础设施即代码工具,对于在亚马逊云科技云平台上构建高效、可靠的应用系统具有重要意义。

相关推荐
ai小鬼头2 小时前
AIStarter 3.2.0更新!一键离线导入+高速下载,熊哥教你轻松玩转AI工具
人工智能·程序员·github
Engandend3 小时前
Flutter与iOS混合开发交互
flutter·ios·程序员
码路工人3 小时前
【Markdown-00】前言:为什么是 Markdown?
程序员·markdown·电子书
浅墨momo4 小时前
将你的Shopify App部署到fly.io上
前端·程序员
浅墨momo6 小时前
搭建第一个Shopify App
前端·程序员
陈随易7 小时前
程序员的新玩具,MoonBit(月兔)编程语言科普
前端·后端·程序员
b1gbrother9 小时前
让你的Claude Code变得更聪明
前端·程序员
袁煦丞9 小时前
安卓开发者的救星Docker-Android:cpolar内网穿透实验室第651个成功挑战!
前端·程序员·远程工作
redreamSo10 小时前
AI Daily | AI日报:Imagination:被中芯国际收购GPU部门消息不实; 智元21亿收购,欲成“人形机器人第一股”; 英伟达市值首破4万亿美元,黄仁勋封神!
程序员·aigc·资讯