所有文章 > API开发 > 使用 AWS EC2 API 创建和启动虚拟服务器
使用 AWS EC2 API 创建和启动虚拟服务器

使用 AWS EC2 API 创建和启动虚拟服务器

一、为何使用 EC2 API 自动化创建与启动实例?

  • 代码即基础设施:通过脚本一键创建 EC2 实例,消除手工操作错误
  • 可重复部署:确保一致的实例配置,适用于测试、CI/CD 与灾备场景
  • 弹性扩缩容:动态响应流量,结合 CloudWatch 自动增减实例
  • 高效运维:将实例管理纳入版本控制和审计日志,提升合规性

> 核心关键词:AWS EC2 API、创建 EC2 实例、自动化启动实例、Boto3 run_instances


二、访问方式与准备工作

AWS 提供多种调用 EC2 API 的方式:

  1. AWS SDK(Boto3/PHP/Java 等) – 推荐用于快速开发
  2. AWS CLI – 脚本化命令行调用
  3. 原生 Query API(HTTP+AWS Signature V4 签名) – 深入理解底层机制
  4. Infrastructure as Code(Terraform/CDK/CloudFormation) – 声明式管理

2.1 环境配置

pip install boto3

~/.aws/credentials 中配置 IAM 凭证:

[default]
aws_access_key_id = YOUR_KEY_ID
aws_secret_access_key = YOUR_SECRET
region = us-west-2

> 长尾关键词:AWS CLI 创建 EC2 实例、Terraform EC2 自动化


三、使用 Boto3 SDK 创建与启动实例

3.1 初始化 EC2 客户端

import boto3
ec2 = boto3.client('ec2')

3.2 创建 EC2 实例

response = ec2.run_instances(
    ImageId='ami-0abcdef1234567890',          # Linux/UNIX AMI
    InstanceType='t3.micro',                 # 实例规格
    MinCount=1, MaxCount=1,                   # 创建 1 台
    KeyName='my-keypair',                     # SSH 密钥对
    TagSpecifications=[{
        'ResourceType':'instance',
        'Tags':[{'Key':'Name','Value':'API-Created-Instance'}]
    }]
)
instance_id = response['Instances'][0]['InstanceId']
print("已创建实例:", instance_id)

> 相关关键词:Boto3 run_instances 示例、实例标签 TagSpecifications

3.3 等待实例启动并获取 IP

import time

while True:
    inst = ec2.describe_instances(InstanceIds=[instance_id])['Reservations'][0]['Instances'][0]
    state = inst['State']['Name']
    if state == 'running':
        ip = inst.get('PublicIpAddress')
        print("实例启动完成,公共IP:", ip)
        break
    print("当前状态:", state, ",等待中...")
    time.sleep(5)

四、使用原生 Query API 调用示例

了解底层请求签名有助于排查问题:

curl "https://ec2.amazonaws.com/?Action=RunInstances&ImageId=ami-0abcdef1234567890&InstanceType=t3.micro&MinCount=1&MaxCount=1&Version=2016-11-15&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=YOUR_KEY%2F20250715%2Fus-west-2%2Fec2%2Faws4_request&X-Amz-Date=20250715T080000Z&X-Amz-SignedHeaders=host&X-Amz-Signature=SIGNATURE"

> 相关关键词:EC2 Query API 签名、AWS Signature V4 调用


五、网络与存储配置

5.1 指定子网与安全组

ec2.run_instances(
    ...,
    SubnetId='subnet-0123456789abcdef0',
    SecurityGroupIds=['sg-0123456789abcdef0']
)

5.2 挂载 EBS 卷

ec2.run_instances(
    ...,
    BlockDeviceMappings=[{
        'DeviceName': '/dev/sdh',
        'Ebs': {'VolumeSize': 20, 'VolumeType': 'gp3'}
    }]
)

六、自动化脚本与最佳实践

  1. 模块化脚本:封装“创建”“启动”“查询”功能
  2. 异常重试:捕获 botocore.exceptions.ClientError 并重试
  3. 日志记录:使用 logging 模块跟踪操作结果
  4. 参数化运行:使用环境变量或配置文件管理参数
  5. 安全存储凭证:采用 AWS Secrets Manager 或环境变量

七、与 CI/CD 及 IaC 集成

7.1 Terraform 示例

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "web" {
  ami           = "ami-0abcdef1234567890"
  instance_type = "t3.micro"
  key_name      = "my-keypair"
  tags = { Name = "TerraformInstance" }
  count         = 1
}

7.2 GitHub Actions 自动化

name: Deploy EC2
on: push
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Terraform Apply
        uses: hashicorp/terraform-github-actions@v1
        with:
          tf_actions_working_dir: ./infra
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET }}

八、常见问题与排错指南

问题 建议
AuthFailure 身份验证失败 检查 AWS 凭证、系统时间与区域设置
InvalidAMIID.NotFound AMI 无效 确认 AMI ID 是否在当前区域可用
InsufficientInstanceCapacity 切换实例规格或区域,或稍后重试
公网 IP 未分配 确保子网启用 Public IP 分配

九、视频教程资源

原文引自YouTube视频:https://www.youtube.com/watch?v=YH_DVenJHII

#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费