10个最佳 Python 脚本,助您在 AWS 中自动化日常任务系列

提升生产力并降低成本:使用这些必备的 Python 脚本自动执行日常 AWS 任务


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

本文将介绍 10 个用于自动执行日常 AWS 任务的最佳 Python 脚本。这使您能够专注于战略计划,同时保持较低的成本和开销。

了解用于 AWS 自动化的 Python


Python 凭借其简单易用性和对 AWS SDK 的强大支持,成为云自动化领域用途最广泛的编程语言之一。Boto3 是适用于 Python 的 AWS SDK,它能够与 AWS 服务顺畅交互,对于运行这些自动化脚本至关重要。为了继续学习,请确保:

  • 您具备 Python 的基础知识。
  • 您已安装 Boto3(pip install boto3)并使用必要的凭证配置了 AWS CLI(aws configure)。
  • 您拥有每个脚本的适当 IAM 权限。

10个最佳 AWS 任务自动化 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"Instances {action}ped: {instance_ids}")
manage_ec2('stop', ['i-1234567890abcdef0'])

 设置:定义实例 ID 和操作(启动或停止)。手动运行此脚本或使用 AWS Lambda 和 CloudWatch Events 进行调度。

2. 自动 S3 存储桶备份和同步


目的:在两个 S3 存储桶之间同步数据以进行备份。
脚本

import boto3
s3 = boto3.resource('s3')
def sync_s3_buckets(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"Data synced from {source_bucket} to {destination_bucket}")
sync_s3_buckets('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"Data exported to 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"Snapshot {snapshot_id} created for {db_instance_identifier}")
create_rds_snapshot('my-db-instance', 'my-db-snapshot')

设置:替换 db_instance_identifier 和 snapper_id。通过 Lambda 进行调度。

5. 自动 Lambda 部署


目的:自动部署更新的 Lambda 函数。
脚本:

import boto3
lambda_client = boto3.client('lambda')
def deploy_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} updated successfully")
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=[''],
        Dimensions=[{'Name': 'InstanceId', 'Value': instance_id}]
    )
    print(f"CloudWatch alarm created for {instance_id}")
create_cloudwatch_alarm('i-1234567890abcdef0')


设置:替换 和 instance_id。

7. 自动化 IAM 用户和角色管理


目的:自动化 IAM 用户管理,例如创建或删除用户。
脚本:

import boto3
iam = boto3.client('iam')
def create_iam_user(username):
    iam.create_user(UserName=username)
    print(f"IAM user {username} created")
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} created for {instance_id}")
create_ami('i-1234567890abcdef0', 'my-ami-backup')


设置:使用 CloudWatch Events 和 Lambda 进行计划。

9. S3 存储桶策略管理


目的:管理 S3 存储桶策略,实现安全访问控制。
脚本:

def update_s3_bucket_policy(bucket_name, policy):
    s3 = boto3.client('s3')
    s3.put_bucket_policy(Bucket=bucket_name, Policy=policy)
    print(f"Policy updated for {bucket_name}")

设置:使用访问规则定义策略 JSON。


10. 自动清理 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(timezone.utc) - snapshot['StartTime']).days
        if age > days:
            ec2.delete_snapshot(SnapshotId=snapshot['SnapshotId'])
            print(f"Deleted snapshot {snapshot['SnapshotId']}")
cleanup_old_snapshots()

设置:根据保留策略调整天数。


在 AWS 中设置和运行 Python 脚本


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

结论


使用 Python 脚本进行 AWS 任务自动化可以显著简化日常操作。通过自动化这些任务,您可以节省时间、降低成本,并专注于云管理中更关键的方面。实施这些脚本可以简化您的工作流程并提高整体 AWS 效率。

 

你可能感兴趣的:(云原生devops,aws,自动化,python)