一、简介
AWS(Amazon Web Services)提供了一系列原生运维工具,这些工具与 AWS 服务深度集成,能够实现对云资源的全生命周期管理,包括资源部署、监控告警、权限控制、自动化运维等。无论是小型应用还是大型企业级架构,AWS 原生工具都能提供高效、可靠的运维支持。
AWS 原生工具生态主要包含以下核心组件:
- AWS CLI:命令行界面工具,用于通过命令行操作 AWS 资源
- AWS CloudFormation:基础设施即代码服务,通过模板自动化部署资源
- AWS CloudWatch:监控与观测服务,收集指标、日志和事件数据
- AWS Systems Manager:统一的资源管理服务,支持实例配置、补丁管理等
- AWS IAM:身份与访问管理服务,控制对 AWS 资源的访问权限
图解 1:AWS 原生工具生态架构

二、AWS CLI 安装与配置
2.1 安装 AWS CLI
AWS CLI 支持 Windows、macOS 和 Linux 等主流操作系统,以下是各系统的安装方法:
2.1.1 Linux 系统安装
# 下载安装包
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# 解压安装包
unzip awscliv2.zip
# 执行安装脚本
sudo ./aws/install
# 验证安装(显示版本信息即安装成功)
aws --version
2.1.2 Windows 系统安装
- 访问AWS CLI 官方下载页下载 Windows 安装程序(.msi 文件)
- 双击安装程序,按照向导提示完成安装
- 打开命令提示符或 PowerShell,执行aws --version验证安装
2.1.3 macOS 系统安装
# 使用Homebrew安装
brew install awscli
# 验证安装
aws --version
2.2 配置 AWS CLI
安装完成后,需要配置 AWS 凭证(Access Key 和 Secret Key)才能访问 AWS 资源:
# 启动交互式配置
aws configure
# 按照提示输入以下信息
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE # 你的Access Key
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY # 你的Secret Key
Default region name [None]: us-east-1 # 默认区域
Default output format [None]: json # 默认输出格式(可选json、text、table)
配置完成后,凭证会存储在~/.aws/credentials文件中,配置信息存储在~/.aws/config文件中。
图解 2:AWS CLI 配置流程

三、核心工具使用详解
3.1 AWS CloudFormation
AWS CloudFormation 通过 JSON 或 YAML 格式的模板定义基础设施,实现资源的自动化部署和版本控制。
3.1.1 基本概念
- 模板(Template):JSON/YAML 格式的文件,定义资源的配置
- 堆栈(Stack):根据模板创建的资源集合,可作为一个整体进行管理
- 变更集(Change Set):展示模板变更对现有资源的影响,便于确认后再执行
3.1.2 模板结构
一个完整的 CloudFormation 模板包含以下主要部分:
AWSTemplateFormatVersion: '2010-09-09' # 模板版本
Description: 'A sample CloudFormation template' # 模板描述
Parameters: # 输入参数
InstanceType:
Type: String
Default: t2.micro
Description: EC2 instance type
Resources: # 资源定义(核心部分)
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0c55b159cbfafe1f0
InstanceType: !Ref InstanceType # 引用参数
Tags:
- Key: Name
Value: MyInstance
Outputs: # 输出信息
InstancePublicIp:
Description: Public IP of the EC2 instance
Value: !GetAtt MyEC2Instance.PublicIp # 获取资源属性
3.1.3 常用命令
# 创建堆栈
aws cloudformation create-stack \
--stack-name my-stack \
--template-body file://template.yaml \
--parameters ParameterKey=InstanceType,ParameterValue=t2.small
# 查看堆栈状态
aws cloudformation describe-stacks --stack-name my-stack
# 更新堆栈(模板或参数变更时)
aws cloudformation update-stack \
--stack-name my-stack \
--template-body file://updated-template.yaml
# 删除堆栈
aws cloudformation delete-stack --stack-name my-stack
图解 3:CloudFormation 工作流程

3.2 AWS CloudWatch
AWS CloudWatch 用于监控 AWS 资源和应用程序,提供指标收集、日志管理、告警设置等功能。
3.2.1 核心功能
- 指标(Metrics):量化资源性能的数据,如 CPU 使用率、磁盘 I/O 等
- 日志(Logs):收集和存储应用程序与资源的日志数据
- 告警(Alarms):基于指标或日志设置阈值,触发通知或自动操作
3.2.2 常用命令
# 查看EC2实例的CPU使用率指标
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--start-time 2023-10-01T00:00:00Z \
--end-time 2023-10-01T01:00:00Z \
--period 300 \
--statistics Average
# 创建CPU使用率告警
aws cloudwatch put-metric-alarm \
--alarm-name HighCPUAlarm \
--metric-name CPUUtilization \
--namespace AWS/EC2 \
--statistic Average \
--period 300 \
--evaluation-periods 2 \
--threshold 80 \
--comparison-operator GreaterThanThreshold \
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--alarm-actions arn:aws:sns:us-east-1:123456789012:MyTopic # 告警触发后通知SNS主题
# 查看告警状态
aws cloudwatch describe-alarms --alarm-names HighCPUAlarm
3.2.3 日志管理
# 创建日志组
aws logs create-log-group --log-group-name /myapp/logs
# 向日志流写入日志事件
aws logs put-log-events \
--log-group-name /myapp/logs \
--log-stream-name 2023-10-01 \
--log-events \
timestamp=1696108800000,message="Application started" \
timestamp=1696108860000,message="User login: admin"
图解 4:CloudWatch 监控流程

3.3 AWS Systems Manager
AWS Systems Manager 提供统一的界面用于管理 AWS 资源,支持实例配置、补丁管理、命令执行等功能,无需登录实例即可进行操作。
3.3.1 常用功能
- Run Command:远程执行命令,管理实例配置
- Parameter Store:存储配置数据和敏感信息
- Automation:创建自动化工作流,实现运维任务自动化
- Patch Manager:管理操作系统补丁
3.3.2 常用命令
# 通过Run Command在EC2实例上执行命令
aws ssm send-command \
--document-name "AWS-RunShellScript" \
--targets "Key=instanceids,Values=i-1234567890abcdef0" \
--parameters "commands=['yum update -y', 'systemctl restart httpd']" \
--comment "Update packages and restart Apache"
# 查看命令执行结果
aws ssm list-command-invocations \
--command-id "12345678-1234-1234-1234-123456789012" \
--details
# 在Parameter Store中存储配置参数
aws ssm put-parameter \
--name "/myapp/database-url" \
--type "String" \
--value "jdbc:mysql://mydb.example.com:3306/mydb"
# 获取存储的参数值
aws ssm get-parameter --name "/myapp/database-url"
3.4 AWS IAM
AWS IAM 用于管理 AWS 账户的访问权限,通过创建用户、角色和策略,确保只有授权的实体才能访问特定资源。
3.4.1 核心概念
- 用户(User):代表人员或应用程序,可分配访问密钥
- 组(Group):用户的集合,便于批量管理权限
- 角色(Role):可被用户、服务或应用程序临时 assume 的权限集合
- 策略(Policy):定义权限的 JSON 文档,可附加到用户、组或角色
3.4.2 常用命令
# 创建IAM用户
aws iam create-user --user-name myuser
# 创建权限策略
aws iam create-policy \
--policy-name EC2FullAccess \
--policy-document file://ec2-policy.json
# 附加策略到用户
aws iam attach-user-policy \
--user-name myuser \
--policy-arn arn:aws:iam::123456789012:policy/EC2FullAccess
# 创建IAM角色(供EC2实例使用)
aws iam create-role \
--role-name EC2SSMRole \
--assume-role-policy-document file://trust-policy.json
图解 5:IAM 权限模型

四、实际应用案例
4.1 自动化部署 Web 应用架构
使用 AWS 原生工具部署包含 EC2、RDS 和 S3 的 Web 应用架构:
1. 创建 CloudFormation 模板(webapp-template.yaml ):定义 VPC、EC2、RDS、S3 等资源
2. 部署堆栈:
aws cloudformation create-stack \
--stack-name webapp-stack \
--template-body file://webapp-template.yaml \
--capabilities CAPABILITY_NAMED_IAM # 允许创建IAM资源
3. 配置 CloudWatch 监控:
# 为EC2实例创建CPU和内存监控告警
aws cloudwatch put-metric-alarm \
--alarm-name WebServerHighCPU \
--metric-name CPUUtilization \
--namespace AWS/EC2 \
--dimensions Name=InstanceId,Value=$(aws cloudformation describe-stacks --stack-name webapp-stack --query "Stacks[0].Outputs[?OutputKey=='WebServerInstanceId'].OutputValue" --output text) \
--statistic Average \
--period 300 \
--evaluation-periods 2 \
--threshold 80 \
--comparison-operator GreaterThanThreshold \
--alarm-actions $(aws cloudformation describe-stacks --stack-name webapp-stack --query "Stacks[0].Outputs[?OutputKey=='AlarmTopicARN'].OutputValue" --output text)
4. 使用 Systems Manager 管理实例:
# 远程部署应用代码到EC2实例
aws ssm send-command \
--document-name "AWS-RunShellScript" \
--targets "Key=tag:Name,Values=WebServer" \
--parameters "commands=['cd /var/www/html', 'git clone https://github.com/myapp.git', 'chmod -R 755 myapp']"
图解 6:Web 应用部署架构

4.2 自动化备份 RDS 数据库
使用 CloudWatch Events 和 Systems Manager Automation 创建 RDS 自动备份计划:
1. 创建自动化文档(rds-backup-doc.yaml ):
description: Automatically back up RDS instances
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
RDSInstanceId:
type: String
description: RDS instance ID
BackupRetentionPeriod:
type: Integer
default: 7
description: Backup retention period in days
mainSteps:
- name: CreateDBBackup
action: 'aws:executeAwsApi'
inputs:
Service: rds
Api: CreateDBSnapshot
DBSnapshotIdentifier: '{{ RDSInstanceId }}-backup-{{ formatDate(now(), ''yyyyMMdd-HHmmss'') }}'
DBInstanceIdentifier: '{{ RDSInstanceId }}'
- name: SetRetentionPeriod
action: 'aws:executeAwsApi'
inputs:
Service: rds
Api: ModifyDBSnapshotAttribute
DBSnapshotIdentifier: '{{ CreateDBBackup.DBSnapshot.DBSnapshotIdentifier }}'
AttributesToModify:
- AttributeName: retentionPeriod
AttributeValue: '{{ BackupRetentionPeriod }}'
2. 注册自动化文档:
aws ssm create-document \
--name RDSBackupAutomation \
--content file://rds-backup-doc.yaml \
--document-type Automation
3. 创建 CloudWatch Events 规则:
# 创建每日凌晨2点执行的规则
aws events put-rule \
--name DailyRDSBackup \
--schedule-expression "cron(0 2 * * ? *)" \
--state ENABLED
# 将自动化文档作为目标关联到规则
aws events put-targets \
--rule DailyRDSBackup \
--targets \
"Id"="1", \
"Arn"="arn:aws:ssm:us-east-1:123456789012:automation-definition/RDSBackupAutomation", \
"RoleArn"="arn:aws:iam::123456789012:role/AutomationRole", \
"Input"="{\"RDSInstanceId\": \"my-rds-instance\", \"BackupRetentionPeriod\": 7}"
4. 验证规则与执行:
# 查看事件规则
aws events describe-rule --name DailyRDSBackup
# 手动触发一次备份测试
aws ssm start-automation-execution \
--document-name RDSBackupAutomation \
--parameters "RDSInstanceId=my-rds-instance,BackupRetentionPeriod=7"
图解 7:RDS 自动备份流程

五、常见问题与解决方法
5.1 CloudFormation 堆栈创建失败
- 问题现象:执行create-stack后,堆栈状态变为ROLLBACK_COMPLETE,资源创建失败。
-
排查方法:
查看堆栈事件,定位失败原因
aws cloudformation describe-stack-events --stack-name my-stack | grep -B 10 -A 10 "STATUS=FAILED"
-
常见原因及解决:
-
- 权限不足:确保执行用户有足够权限,添加--capabilities CAPABILITY_NAMED_IAM(如需创建 IAM 资源)。
-
- 资源依赖错误:检查资源间依赖关系,使用DependsOn显式定义依赖。
-
- 资源配置冲突:如实例类型与 AMI 不匹配,选择兼容的配置组合。
5.2 CloudWatch 告警不触发
- 问题现象:指标已超过阈值,但告警未触发。
-
排查方法:
检查告警配置
aws cloudwatch describe-alarms --alarm-names HighCPUAlarm
验证指标数据
aws cloudwatch get-metric-statistics
--namespace AWS/EC2
--metric-name CPUUtilization
--dimensions Name=InstanceId,Value=i-1234567890abcdef0
--start-time (date -u +"%Y-%m-%dT%H:%M:%SZ" -d "1 hour ago") \ --end-time (date -u +"%Y-%m-%dT%H:%M:%SZ")
--period 300
--statistics Average -
常见原因及解决:
-
- 评估周期不足:evaluation-periods设置过大,需连续多次超过阈值才触发。
-
- 指标维度错误:告警的dimensions与资源不匹配,检查实例 ID 或资源标签。
-
- 权限问题:告警目标(如 SNS)无权限接收通知,检查 IAM 策略。
5.3 Systems Manager 命令执行失败
- 问题现象:send-command返回成功,但实例未执行命令或执行失败。
-
排查方法:
查看命令执行详情
aws ssm get-command-invocation
--command-id "12345678-1234-1234-1234-123456789012"
--instance-id i-1234567890abcdef0 -
常见原因及解决:
-
- SSM 代理未安装:EC2 实例需安装 SSM 代理,Amazon Linux 2 通常默认安装,其他系统需手动安装。
-
- 实例无网络连接:确保实例能访问 SSM 终端节点(可通过 VPC 终端节点或公网访问)。
-
- 权限不足:实例关联的 IAM 角色缺少AmazonSSMManagedInstanceCore权限,附加该策略。
六、最佳实践
6.1 资源管理与命名规范
-
为所有资源添加标签(如Environment=Production、Project=MyApp),便于成本核算和资源筛选:
创建标签策略
aws organizations create-policy
--name RequiredTags
--type TAG_POLICY
--content '{"tags": {"Environment": {"tag_key": {"@@assign": "Environment"},"tag_value": {"@@assign": ["Dev", "Test", "Prod"]}}}}' -
使用一致的命名格式:[资源类型]-[环境]-[功能]-[编号],如ec2-prod-web-01。
6.2 安全与权限控制
- 遵循最小权限原则:为 IAM 用户和角色仅分配必要的权限,避免使用AdministratorAccess。
-
启用多因素认证(MFA):
为用户启用MFA
aws iam enable-mfa-device
--user-name myuser
--serial-number arn:aws:iam::123456789012:mfa/myuser-mfa
--authentication-code1 123456
--authentication-code2 654321 -
定期轮换访问密钥:
创建新访问密钥
aws iam create-access-key --user-name myuser
删除旧访问密钥
aws iam delete-access-key
--user-name myuser
--access-key-id AKIAIOSFODNN7EXAMPLE
6.3 自动化与监控
- 尽可能使用 CloudFormation 或 AWS CDK 实现基础设施即代码,避免手动操作。
- 为关键资源配置全面监控:
-
- 基础指标:CPU、内存、磁盘使用率。
-
- 业务指标:请求延迟、错误率、并发用户数。
-
- 成本指标:每日 / 每月支出、资源利用率。
- 实现自动化运维流程:
-
- 自动备份:如 RDS 快照、EBS 卷备份。
-
- 自动扩缩容:根据负载调整资源数量。
-
- 自动修复:如替换不健康的 EC2 实例。
6.4 成本优化
-
使用 AWS Cost Explorer 分析成本趋势,识别闲置资源:
查看成本与使用情况报告
aws ce get-cost-and-usage
--time-period Start=2023-09-01,End=2023-09-30
--granularity MONTHLY
--metrics UnblendedCost -
对长期运行的资源使用预留实例(Reserved Instances)或 Savings Plans。
-
启用资源生命周期管理:
为S3桶配置生命周期规则(30天后转IA,90天后过期)
aws s3api put-bucket-lifecycle-configuration
--bucket my-bucket
--lifecycle-configuration '{"Rules":[{"ID":"TransitionAndExpire","Status":"Enabled","Prefix":"logs/","Transitions":[{"Days":30,"StorageClass":"STANDARD_IA"}],"Expiration":{"Days":90}}]}'
七、总结
AWS 原生工具为云资源管理提供了完整的解决方案,从命令行操作(AWS CLI)、基础设施即代码(CloudFormation)、监控告警(CloudWatch)、资源管理(Systems Manager)到权限控制(IAM),形成了闭环的运维生态。
通过本文的介绍,我们可以看到 AWS 原生工具的核心优势在于:
- 深度集成:与 AWS 服务无缝对接,支持所有资源类型的管理。
- 自动化能力:通过 CloudFormation 和 Systems Manager 实现全流程自动化。
- 可观测性:CloudWatch 提供全方位的监控数据,便于问题排查和性能优化。
- 安全性:IAM 的细粒度权限控制确保资源访问的安全性。
在实际应用中,建议结合具体业务场景,选择合适的工具组合,构建标准化、自动化的运维流程。同时,遵循最佳实践,注重成本优化、安全合规和可扩展性,充分发挥 AWS 云平台的优势。
随着 AWS 服务的不断演进,其原生工具也在持续更新,建议定期关注官方文档和更新日志,及时掌握新功能和最佳实践,不断提升云运维效率。