继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

10个最佳Python脚本帮你轻松自动化AWS日常任务

森栏
关注TA
已关注
手记 366
粉丝 101
获赞 475
提高生产力并削减成本:使用下面列出的这些必备的Python脚本来自动化这些常规的AWS任务

随着业务的发展,其基础设施和云管理的需求也随之增长。AWS提供了强大的云服务工具,但手动管理日常任务耗时且容易出错。使用Python自动化可以简化重复的AWS任务,帮助您高效安全地管理资源。

在这里,我们将介绍10个最佳的Python脚本,用于自动化日常的AWS任务的自动化。这使您能够专注于战略性任务,同时降低成本和开销。

基于Python的AWS自动化了解

Python 是最灵活的编程语言之一,非常适合用于云自动化,这要归功于它简单易用以及对 AWS SDK 的强大支持。Boto3,Python 的 AWS SDK,能够流畅地与 AWS 服务交互,并且对于运行这些自动化脚本程序来说是必不可少的。为了跟上教程,请确保:

  • 你掌握了基本的 Python 技能。
  • 你安装了 Boto3 (pip install boto3) 并用必要的凭证配置了 AWS CLI (aws configure)。
  • 你为每个脚本都有适当的 IAM 权限。
要用于 AWS 自动化任务的 10 个最好的 Python 脚本

每个脚本都是为特定的 AWS 任务设计的,包含其目的、代码示例和简单的设置指南。

1. 让 EC2 实例自动启动与停止
  • 目的:自动开关EC2实例,以减少非高峰期的成本。
  • 脚本
    import boto3  
    ec2 = boto3.client('ec2')  

    def manage_ec2(action, instance_ids):  
        ec2.start_instances(InstanceIds=instance_ids) if action == 'start' else ec2.stop_instances(InstanceIds=instance_ids)  
        print(f"已{action}实例: {instance_ids}")  

    manage_ec2('stop', ['i-1234567890abcdef0'])
  • 设置:定义实例ID(Instance ID)和操作(启动(start)停止(stop))。可以手动运行该脚本,或使用AWS Lambda和CloudWatch Events来安排。
2. 自动备份和同步 S3 桶
  • 目的: 在两个S3桶之间同步数据,以实现备份。
  • 脚本:
import boto3  
s3 = boto3.resource('s3')  

def 同步S3桶内容(source_bucket, destination_bucket):  
    copy_source = {'Bucket': source_bucket, 'Key': obj.key}  
    for obj in s3.Bucket(source_bucket).objects.all():  
        s3.Object(destination_bucket, obj.key).copy(copy_source)  
    print(f"已将数据从 {source_bucket} 同步到 {destination_bucket}")  

同步S3桶内容('source-bucket-name', 'destination-bucket-name')
  • 配置:替换桶名后运行。使用Lambda调度,或设置为本地cron作业。
3. 将 DynamoDB 数据导出到 S3
  • 目的:定期地从DynamoDB数据表导出数据到S3,用于分析或备份。
  • 脚本
    import boto3  
    dynamodb = boto3.resource('dynamodb')  
    s3 = boto3.client('s3')  

    def export_dynamodb_to_s3(table_name, bucket_name, file_name):  
        table = dynamodb.Table(table_name)  
        data = table.scan()['Items']  
        s3.put_object(Bucket=bucket_name, Key=file_name, Body=str(data))  
        print(f"数据已成功导出到s3://{bucket_name}/{file_name}")  

    export_dynamodb_to_s3('my-table', 'my-bucket', 'backup.json')
  • 配置:定义表名和桶名,并定期执行脚本。
4. RDS 快照备份
  • 目的:定期為RDS實例創建快照以確保數據安全。
  • 腳本
    import boto3  
    rds = boto3.client('rds')  

    def create_rds_snapshot(db_instance_identifier, snapshot_id):  
        rds.create_db_snapshot(DBSnapshotIdentifier=snapshot_id, DBInstanceIdentifier=db_instance_identifier)  
        print(f"输出:已为 {db_instance_identifier} 创建快照 {snapshot_id}")  

    create_rds_snapshot('my-db-instance', 'my-db-snapshot')
  • 设置:替换 db_instance_identifiersnapshot_id。通过 Lambda 函数安排任务。
5. 自动部署Lambda
  • 目的如下:自动更新并部署Lambda函数。
  • 脚本
    import boto3  
    lambda_client = boto3.client('lambda')  

    def 部署Lambda函数(function_name, zip_file_path):  
        with open(zip_file_path, 'rb') as f:  
            lambda_client.update_function_code(FunctionName=function_name, ZipFile=f.read())  
        print(f"Lambda函数 {function_name} 更新成功")  

    deploy_lambda('my-function', '/path/to/your/lambda.zip')
  • 配置:将 Lambda 代码打包成一个 .zip 文件,并更新 function_name
6. CloudWatch 警报配置
  • 目的:为AWS资源设置CloudWatch提醒。
  • 代码片段如下:
    import boto3  
    cloudwatch = boto3.client('cloudwatch')  

    def create_cloudwatch_alarm(instance_id):  
        cloudwatch.put_metric_alarm(  
            AlarmName=f'CPU_Utilization_{instance_id}',  
            MetricName='CPUUtilization',  
            Namespace='AWS/EC2',  
            Statistic='Average',  
            Period=300,  
            EvaluationPeriods=1,  
            Threshold=70.0,  
            ComparisonOperator='GreaterThanThreshold',  
            AlarmActions=['<SNS_TOPIC_ARN>'],  
            Dimensions=[{'Name': 'InstanceId', 'Value': instance_id}]  
        )  
        print(f"为实例 {instance_id} 创建了 CloudWatch 警报")  

    create_cloudwatch_alarm('i-1234567890abcdef0')
  • 步骤:替换 SNS_TOPIC_ARNinstance_id
7. 自动化管理 IAM 用户和角色
  • 目的:自动管理IAM用户,例如,创建或删除用户。
  • 脚本示例:
import boto3  
iam = boto3.client('iam')  

def create_iam_user(username):  
    iam.create_user(UserName=username)  
    print(f"打印: 'IAM 用户 {username} 已创建'")  

create_iam_user('new-user')
  • 配置:在脚本中定义 IAM 用户的名称。
8 为 EC2 实例安排计划的 AMI 备份
  • 目的:定时为EC2实例创建AMI,以便定期维护。
  • 脚本
    def create_ami(instance_id, ami_name):  
        ec2 = boto3.client('ec2')  
        ec2.create_image(InstanceId=instance_id, Name=ami_name, NoReboot=True)  
        print(f"创建了AMI映像{ami_name}给实例{instance_id}")  

    # 创建一个AMI映像,实例ID为'i-1234567890abcdef0',名称为'my-ami-backup'
    create_ami('i-1234567890abcdef0', 'my-ami-backup')
  • 设置:使用 CloudWatch Events 和 Lambda 进行调度。
9. S3 存储桶策略管理
  • 目的是:管理 S3 存储桶的策略以实现安全的访问。
  • 脚本内容
    def 更新S3桶的权限策略(bucket_name, policy):  
        s3 = boto3.client('s3')  
        s3.put_bucket_policy(Bucket=bucket_name, Policy=policy)  
        print(f"已更新 {bucket_name} 的权限策略")
  • 配置:定义包含权限规则的 policy JSON 文件。
第十 自动清理 EBS 卷快照
  • 目的:删除旧的EBS快照以控制存储费用。
  • 脚本
    import boto3  
    ec2 = boto3.client('ec2')  

    def cleanup_old_snapshots(days=30):  
        snapshots = ec2.describe_snapshots(OwnerIds=['self'])['Snapshots']  
        for snapshot in snapshots:  
            age = (datetime.now(pytz.utc) - snapshot['StartTime']).days  
            if age > days:  
                ec2.delete_snapshot(SnapshotId=snapshot['SnapshotId'])  
                print(f"删除了快照 {snapshot['SnapshotId']}, 时间戳为 {snapshot['StartTime']}")  

    cleanup_old_snapshots()
  • 设置:根据保留策略调整 days 的值。
在 AWS 上部署和运行 Python 脚本

要运行这些脚本,请在本地或AWS Lambda环境中安装Python和Boto3。适当的IAM权限配置和安全地管理和配置AWS CLI凭证对于自动化过程的安全至关重要。

结论部分

使用 Python 脚本进行 AWS 任务自动化可以大幅简化日常任务。通过自动化这些任务,您可以节省时间,降低成本,并专注于云管理中的关键任务。实现这些脚本可以帮助您优化工作流程,提高 AWS 整体效率。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP