作者:优快云云计算专家
关键词:AWS CLI, 自动化脚本, 云资源管理, DevOps
前言
作为开发者或运维工程师,你是否曾为重复的云资源管理任务而感到烦恼?每天手动创建EC2实例、配置S3存储桶、检查服务状态……这些操作不仅耗时耗力,还容易出错。今天我将带你掌握AWS命令行工具(CLI)的实战技巧,用自动化脚本解放你的双手!
一、为什么选择AWS CLI?
AWS管理控制台虽然直观易用,但在处理批量操作和自动化任务时显得力不从心。AWS CLI提供了以下优势:
-
全功能支持:支持200+AWS服务的API操作
-
跨平台兼容:Windows、Linux、macOS均可使用
-
自动化能力:可与Shell/Python等脚本无缝集成
-
高效执行:减少图形界面操作时间,提升工作效率
二、环境安装与配置
1. 安装AWS CL
# Windows (使用PowerShell)
winget install -e --id Amazon.AWSCLI
# macOS (使用Homebrew)
brew install awscli
# Linux (Ubuntu)
sudo apt update
sudo apt install awscli
2. 配置认证信息
aws configure
# 依次输入Access Key、Secret Key、区域和输出格式
建议使用IAM角色临时凭证,提升安全性:
# 使用命名配置文件
aws configure --profile dev-profile
三、实战脚本示例
示例1:自动化部署EC2实例
#!/bin/bash
# deploy_ec2.sh
INSTANCE_ID=$(aws ec2 run-instances \
--image-id ami-0abcdef1234567890 \
--instance-type t3.micro \
--key-name my-key-pair \
--subnet-id subnet-08fc749671b2d077c \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=web-server}]' \
--query 'Instances[0].InstanceId' \
--output text)
echo "实例创建成功: $INSTANCE_ID"
# 等待实例运行
aws ec2 wait instance-running --instance-ids $INSTANCE_ID
# 获取公网IP
PUBLIC_IP=$(aws ec2 describe-instances \
--instance-ids $INSTANCE_ID \
--query 'Reservations[0].Instances[0].PublicIpAddress' \
--output text)
echo "实例公网IP: $PUBLIC_IP"
示例2:S3存储桶批量操作
#!/bin/bash
# s3_operations.sh
# 创建存储桶
aws s3 mb s3://my-unique-bucket-name-$(date +%s)
# 同步本地目录到S3
aws s3 sync ./dist s3://my-bucket/static-assets/
# 设置生命周期策略
cat > lifecycle.json << EOF
{
"Rules": [
{
"ID": "Move to Glacier",
"Status": "Enabled",
"Prefix": "archive/",
"Transitions": [
{
"Days": 30,
"StorageClass": "GLACIER"
}
]
}
]
}
EOF
aws s3api put-bucket-lifecycle-configuration \
--bucket my-bucket \
--lifecycle-configuration file://lifecycle.json
示例3:自动化监控与告警
#!/bin/bash
# monitor_resources.sh
# 检查EC2实例状态
INSTANCE_STATUS=$(aws ec2 describe-instance-status \
--instance-ids i-1234567890abcdef0 \
--query 'InstanceStatuses[0].InstanceStatus.Status' \
--output text)
if [ "$INSTANCE_STATUS" != "ok" ]; then
# 发送SNS通知
aws sns publish \
--topic-arn arn:aws:sns:us-east-1:123456789012:alerts-topic \
--message "实例运行异常,当前状态: $INSTANCE_STATUS"
fi
# 每日成本报告
START_DATE=$(date -d "-1 day" +%Y-%m-%d)
END_DATE=$(date +%Y-%m-%d)
aws ce get-cost-and-usage \
--time-period Start=$START_DATE,End=$END_DATE \
--granularity DAILY \
--metrics "BlendedCost" \
--query 'ResultsByTime[0].Total.BlendedCost.Amount' \
--output text
四、高级技巧与最佳实践
1. 使用JMESPath进行高级查询
# 提取特定字段
aws ec2 describe-instances \
--query 'Reservations[].Instances[].[InstanceId,State.Name,PublicIpAddress]' \
--output table
# 过滤结果
aws ec2 describe-instances \
--filters "Name=instance-type,Values=t3.micro" \
--query "Reservations[].Instances[].InstanceId"
2. 脚本错误处理
#!/bin/bash
set -e # 遇到错误立即退出
# 使用trap捕获信号
trap 'echo "脚本被中断"; exit 1' INT TERM
if ! aws s3 ls s3://my-bucket/; then
echo "存储桶访问失败"
exit 1
fi
3. 自动化部署脚本模板
#!/bin/bash
# automated_deployment.sh
set -e
LOG_FILE="deployment_$(date +%Y%m%d_%H%M%S).log"
exec > >(tee -a "$LOG_FILE") 2>&1
echo "开始部署: $(date)"
# 你的部署步骤 here
# 1. 上传代码
# 2. 创建资源
# 3. 运行测试
# 4. 切换流量
echo "部署完成: $(date)"
# 发送部署通知
aws sns publish \
--topic-arn arn:aws:sns:us-east-1:123456789012:deployments \
--subject "部署成功完成" \
--message "部署日志: $LOG_FILE"
五、安全建议
-
最小权限原则:为脚本分配仅需的最小IAM权限
-
使用临时凭证:避免在脚本中硬编码长期访问密钥
-
加密敏感数据:使用AWS KMS或Secrets Manager管理机密信息
-
审计日志:启用AWS CloudTrail记录所有API调用
结语
通过本文介绍的AWS CLI脚本技巧,你可以将日常的云资源管理任务自动化,大幅提升工作效率。从简单的资源操作到复杂的部署流程,AWS CLI都能成为你的得力助手。
记住:最好的工具不是最强大的,而是你最熟悉且能灵活运用的。 开始编写你的第一个AWS CLI脚本吧!

795

被折叠的 条评论
为什么被折叠?



