AWS运维自动化实战——从CloudFormation到CodePipeline的完整DevOps流程

引言:基础设施即代码的核心理念

在传统运维模式中,手动配置服务器、部署应用、管理环境不仅效率低下,而且容易出错。基础设施即代码(IaC)将基础设施的配置和管理代码化,实现版本控制、自动化部署和可重复性。本文将介绍AWS完整的DevOps工具链,从基础设施部署到应用交付。

一、基础设施即代码

1.1 AWS CloudFormation

CloudFormation是AWS的原生IaC工具,使用模板定义资源。

模板结构

yaml

复制下载

AWSTemplateFormatVersion: '2010-09-09'Description: 'Web应用堆栈'Parameters:  InstanceType:    Type: String    Default: t3.micro    Description: EC2实例类型Resources:  WebServer:    Type: AWS::EC2::Instance    Properties:      ImageId: ami-0abcdef1234567890      InstanceType: !Ref InstanceType      SecurityGroups:        - !Ref WebServerSG  WebServerSG:    Type: AWS::EC2::SecurityGroup    Properties:      GroupDescription: 允许HTTP和SSH访问      SecurityGroupIngress:        - IpProtocol: tcp          FromPort: 80          ToPort: 80          CidrIp: 0.0.0.0/0        - IpProtocol: tcp          FromPort: 22          ToPort: 22          CidrIp: 10.0.0.0/8Outputs:  WebServerURL:    Description: Web服务器URL    Value: !GetAtt WebServer.PublicDnsName

1.2 堆栈操作

操作

命令示例

说明

创建

aws cloudformation create-stack

创建资源堆栈

更新

aws cloudformation update-stack

更新堆栈资源

删除

aws cloudformation delete-stack

删除堆栈

查看

aws cloudformation describe-stacks

查看状态

1.3 AWS CDK

CDK允许使用编程语言定义基础设施:

typescript

复制下载

import * as cdk from 'aws-cdk-lib';import * as ec2 from 'aws-cdk-lib/aws-ec2';export class WebStack extends cdk.Stack {  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {    super(scope, id, props);    const vpc = new ec2.Vpc(this, 'WebVPC', {      maxAzs: 2,      natGateways: 1    });    const webServer = new ec2.Instance(this, 'WebServer', {      vpc,      instanceType: ec2.InstanceType.of(        ec2.InstanceClass.T3,        ec2.InstanceSize.MICRO      ),      machineImage: ec2.MachineImage.latestAmazonLinux2()    });    webServer.connections.allowFromAnyIpv4(      ec2.Port.tcp(80),      'Allow HTTP access'    );  }}

二、配置管理

2.1 AWS Systems Manager

Systems Manager提供统一的运维控制台,核心功能包括:

功能

用途

Session Manager

SSH密钥的安全Shell访问

Run Command

批量执行命令

Patch Manager

自动打补丁

State Manager

维护配置状态

Parameter Store

集中存储配置参数

2.2 Parameter Store使用示例

存储参数

bash

复制下载

aws ssm put-parameter \  --name "/prod/app/db/url" \  --value "jdbc:mysql://prod-db.cluster-xxx.us-east-1.rds.amazonaws.com:3306/app" \  --type "String" \  --tier "Standard"

在应用中获取

python

复制下载

import boto3ssm = boto3.client('ssm')def get_config():    response = ssm.get_parameters(        Names=[            '/prod/app/db/url',            '/prod/app/db/username'        ],        WithDecryption=True    )    return {p['Name']: p['Value'] for p in response['Parameters']}

三、CI/CD流水线

3.1 AWS CodeCommit

CodeCommit是托管的Git仓库服务,与IAM集成。

最佳实践

使用IAM用户或角色认证

启用分支保护

使用标签管理版本

配置触发器和通知

3.2 AWS CodeBuild

CodeBuild是托管的构建服务。

buildspec.yml示例

yaml

复制下载

version: 0.2phases:  install:    runtime-versions:      nodejs: 18    commands:      - npm install  pre_build:    commands:      - npm run lint      - npm test  build:    commands:      - npm run build  post_build:    commands:      - echo "Build completed on `date`"artifacts:  files:    - '**/*'  discard-paths: no

3.3 AWS CodeDeploy

CodeDeploy自动化应用部署,支持EC2、Lambda和ECS。

部署策略

策略

描述

适用场景

就地部署

更新现有实例

非关键应用

蓝绿部署

创建新环境后切换

关键应用

金丝雀部署

逐步更新

风险控制

线性部署

百分比增量更新

平滑过渡

3.4 AWS CodePipeline

CodePipeline编排整个CI/CD流程。

管道结构示例

yaml

复制下载

Pipeline:  Name: WebAppPipeline  Stages:    - Name: Source      Actions:        - Name: SourceAction          ActionTypeId:            Category: Source            Owner: AWS            Provider: CodeCommit          Configuration:            RepositoryName: web-app            BranchName: main    - Name: Build      Actions:        - Name: BuildAction          ActionTypeId:            Category: Build            Owner: AWS            Provider: CodeBuild          Configuration:            ProjectName: web-app-build    - Name: Deploy      Actions:        - Name: DeployAction          ActionTypeId:            Category: Deploy            Owner: AWS            Provider: CodeDeploy          Configuration:            ApplicationName: web-app            DeploymentGroupName: prod

四、镜像管理

4.1 Amazon ECR

ECR是托管的Docker镜像仓库。

常用操作

bash

复制下载

# 登录ECRaws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com# 构建镜像docker build -t web-app:latest .# 标记镜像docker tag web-app:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/web-app:latest# 推送镜像docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/web-app:latest

4.2 镜像扫描

ECR支持漏洞扫描,可与CI/CD集成:

bash

复制下载

# 手动触发扫描aws ecr start-image-scan \  --repository-name web-app \  --image-id imageTag=latest# 检查扫描结果aws ecr describe-image-scan-findings \  --repository-name web-app \  --image-id imageTag=latest

五、监控与告警

5.1 Amazon CloudWatch

CloudWatch是AWS的监控服务。

关键指标

服务

关键指标

EC2

CPUUtilization, NetworkIn/Out, DiskRead/Write

Lambda

Invocations, Errors, Duration, Throttles

RDS

CPUUtilization, DatabaseConnections, FreeStorageSpace

API Gateway

Count, Latency, 4XXError, 5XXError

5.2 CloudWatch告警

创建告警

bash

复制下载

aws cloudwatch put-metric-alarm \  --alarm-name "HighCPU" \  --alarm-description "告警当CPU > 80%" \  --metric-name CPUUtilization \  --namespace AWS/EC2 \  --statistic Average \  --period 300 \  --evaluation-periods 2 \  --threshold 80 \  --comparison-operator GreaterThanThreshold \  --dimensions Name=InstanceId,Value=i-12345678 \  --alarm-actions arn:aws:sns:us-east-1:123456789012:alert

5.3 仪表板

使用CloudWatch Dashboards创建自定义监控视图:

bash

复制下载

aws cloudwatch put-dashboard \  --dashboard-name "WebApp" \  --dashboard-body file://dashboard.json

六、日志管理

6.1 CloudWatch Logs

集中收集和管理日志。

配置日志代理

json

复制下载

{  "logs": {    "logs_collected": {      "files": {        "collect_list": [          {            "file_path": "/var/log/application.log",            "log_group_name": "/app/web/production",            "log_stream_name": "{instance_id}"          }        ]      }    }  }}

6.2 日志查询

使用CloudWatch Logs Insights查询日志:

text

复制下载

fields @timestamp, @message| filter @message like /ERROR/| sort @timestamp desc| limit 20

七、结语

AWS DevOps工具链提供了从基础设施部署到应用交付的完整解决方案。CloudFormation/CDK实现基础设施即代码,Code系列服务构建CI/CD流水线,Systems Manager简化运维管理,CloudWatch提供监控能力。将这些工具集成起来,可以构建一个自动化、可重复、可审计的运维体系,大幅提升效率和可靠性。

如果需要更深入咨询了解可以联系全球代理上TG:jinniuge  他们在云平台领域有更专业的知识和建议,他们有国际阿里云,国际腾讯云,国际华为云,aws亚马逊,谷歌云一级代理的渠道,客服1V1服务,支持免实名、免备案、免绑卡。开通即享专属VIP优惠、充值秒到账、官网下单享双重售后支持。不懂找他们就对了。