第二章:云服务提供商与Python SDK

各位同学,今天我们来聊聊云服务商和Python SDK。说实话,我刚入行那会儿,面对AWS、Azure、GCP这三家,也是一脸懵。每家都说自己好,到底选哪个?

我个人习惯是:先看项目需求,再看团队熟悉度。别盲目追新,稳定才是王道。

2.1 三大云服务商简介

先简单过一遍这三家的特点。你想想看,它们就像三个性格迥异的工程师。

云服务商 核心优势 适用场景 Python SDK
AWS 生态最完善,文档最全 大型企业、全球化部署 boto3
Azure 与微软生态深度集成 企业级应用、.NET项目 azure-sdk-for-python
GCP 大数据和AI能力突出 数据分析、机器学习 google-cloud-python

嗯,这里要注意:AWS的市场份额最大,所以很多公司默认选它。但如果你公司用的是微软全家桶,Azure会更香。

2.2 为什么选boto3作为示例?

说白了,boto3是Python操作AWS的事实标准。我在项目中遇到过不少坑,比如版本不兼容、凭证配置错误等。但boto3的社区活跃度最高,遇到问题基本都能搜到答案。

核心要点:boto3是AWS官方维护的Python SDK,支持所有AWS服务。你学会它,就等于掌握了操作AWS的钥匙。

2.3 boto3安装与配置

安装其实很简单,一行命令搞定。但配置环节,我建议你认真看,这里最容易出问题。

2.3.1 安装boto3

# 使用pip安装
pip install boto3

# 建议指定版本,避免兼容性问题
pip install boto3==1.26.0

我曾经遇到过一个问题:项目部署到生产环境后,boto3突然报错。查了半天,原来是新版本改了API。所以,我建议你锁定版本号。

2.3.2 配置凭证

配置凭证有几种方式,我按推荐顺序列出来:

  1. 环境变量法(最推荐)
  2. 凭证文件法(适合本地开发)
  3. IAM角色法(生产环境首选)

小技巧:我个人习惯用环境变量。这样代码里不用写死凭证,也方便切换不同环境。

环境变量配置示例:

# Linux/Mac
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
export AWS_DEFAULT_REGION=us-east-1

# Windows PowerShell
$env:AWS_ACCESS_KEY_ID="your_access_key"
$env:AWS_SECRET_ACCESS_KEY="your_secret_key"
$env:AWS_DEFAULT_REGION="us-east-1"

2.3.3 验证配置

配置好了,怎么知道对不对?写个简单脚本验证一下:

import boto3

# 创建S3客户端
s3 = boto3.client('s3')

# 列出所有存储桶
try:
    response = s3.list_buckets()
    print("配置成功!找到以下存储桶:")
    for bucket in response['Buckets']:
        print(f"  - {bucket['Name']}")
except Exception as e:
    print(f"配置失败:{e}")

警告:千万不要把凭证硬编码在代码里!我曾经见过有人把密钥提交到GitHub,结果被爬虫抓取,一夜之间被刷了上万美元。血的教训啊。

2.4 常用操作示例

学会了配置,我们来点实战。以下是我项目中常用的几个操作:

2.4.1 操作S3存储桶

import boto3

s3 = boto3.resource('s3')

# 创建存储桶
bucket = s3.create_bucket(
    Bucket='my-python-bucket-2024',
    CreateBucketConfiguration={
        'LocationConstraint': 'us-west-2'
    }
)

# 上传文件
s3.Bucket('my-python-bucket-2024').upload_file(
    'local_file.txt', 
    'remote_file.txt'
)

# 下载文件
s3.Bucket('my-python-bucket-2024').download_file(
    'remote_file.txt', 
    'downloaded_file.txt'
)

2.4.2 操作EC2实例

ec2 = boto3.client('ec2')

# 启动实例
response = ec2.run_instances(
    ImageId='ami-0c55b159cbfafe1f0',
    InstanceType='t2.micro',
    MinCount=1,
    MaxCount=1
)

instance_id = response['Instances'][0]['InstanceId']
print(f"启动实例:{instance_id}")

# 停止实例
ec2.stop_instances(InstanceIds=[instance_id])

经验之谈:操作EC2时,记得先检查实例状态。我遇到过直接停止已终止的实例,结果报错。加个状态判断能省很多麻烦。

2.5 避坑指南

最后,分享几个我踩过的坑:

  • 凭证过期:临时凭证有有效期,记得定期刷新。我曾经在凌晨三点被报警吵醒,就是因为凭证过期了。
  • 区域不一致:创建资源时指定区域,否则默认用us-east-1。不同区域的资源不能互相访问。
  • 重试机制:网络请求可能失败,boto3默认会重试3次。但你可以自定义重试策略。

好了,这一章就到这里。下一章我们会深入boto3的高级用法,包括分页、批量操作和错误处理。到时候见。