EC2

EC2 是 AWS 的云服务器服务

EC2: Elastic Compute Cloud

创建实例

  1. 选择一个系统镜像(AMI)

    • AMI(Amazon Machine Image)定义了启动实例所需的信息。您可以使用 AWS CLI 查询:

      # 查询 Ubuntu 24.04 x86_64
      aws ec2 describe-images \
      --owners 'amazon' \
      --query 'Images[*].[ImageId,Name]' \
      --filters "Name=name,Values=*ubuntu/*22.04*" "Name=architecture,Values=x86_64" # 查询 Windows Server 2022 Chinese Simplified
      aws ec2 describe-images \
      --owners 'amazon' \
      --query 'Images[*].[ImageId,Name]' \
      --filters 'Name=name,Values=*Windows_Server-2022-Chinese_Simplified*' # 查询 macOS 14
      aws ec2 describe-images \
      --owners 'amazon' \
      --query 'Images[*].[ImageId,Name]' \
      --filters 'Name=name,Values=*macos-14*'

      替换查询参数以匹配您想要的操作系统。

    • 查看 AMI 详细信息:

      aws ec2 describe-images \
      --image-id 'ami-01bef798938b7644d'

    不同地区的可用镜像不同

    aws ec2 describe-images help

  2. 选择一个实例类型

    实例类型就是云服务器的硬件配置。例如 t2.microc7i.xlargemac2.metal 等。

    Amazon EC2 实例类型

    查询实例类型列表:

    # 查找 C7 系列的所有 arm64 配置
    aws ec2 describe-instance-types \
    --query 'InstanceTypes[*].[InstanceType]'
    --filters 'Name=instance-type,Values=c7*' 'Name=processor-info.supported-architecture,Values=arm64' # 查找适用于 macOS 的所有配置
    aws ec2 describe-instance-types \
    --query 'InstanceTypes[*].[InstanceType]'
    --filters 'Name=instance-type,Values=mac*'

    查看实例类型详细信息:

    aws ec2 describe-instance-types \
    --instance-type 't2.micro' \
    --query 'InstanceTypes[*].{FreeTierEligible:FreeTierEligible,MemorySizeInMiB:MemoryInfo.SizeInMiB, NetworkPerformance:NetworkInfo.NetworkPerformance, ProcessorInfo:ProcessorInfo, vCPUs:VCpuInfo.DefaultVCpus}'
  3. 创建一个密钥对(如果还没有的话)

    • 生成新的密钥对:

      aws ec2 create-key-pair \
      --key-name 'MyKeyPair' \
      --query 'KeyMaterial' \
      --output 'text' > MyKeyPair.pem

      切记保存生成的 .pem 文件,并设置正确的文件权限:

      chmod 400 MyKeyPair.pem
    • 或者上传已有的公钥:

      aws ec2 import-key-pair \
      --key-name 'MyKeyPair' \
      --public-key-material 'fileb://~/.ssh/id_rsa.pub'
    • 如果你在 Docker 容器中运行 AWS CLI,则应该运行如下命令:

      PUB_KEY=$(cat ~/.ssh/id_rsa.pub | base64 | tr -d '\n')
      # 上传公钥
      aws ec2 import-key-pair \
      --key-name "MyKeyPair" \
      --public-key-material "$PUB_KEY"
    • 删除密钥的方法:

      aws ec2 delete-key-pair --key-name 'MyKeyPair'
  4. 启动实例

    aws ec2 run-instances \
    --image-id 'ami-04b70fa74e45c3917' \
    --count 1 \
    --instance-type 'c7i.xlarge' \
    --key-name 'MyKeyPair' \
    --security-groups 'my-security-group' \
    --block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":30}}]' \
    --query 'Instances[*].[InstanceType,KeyName,Architecture]'

    这将会创建一个操作系统为 Ubuntu 24.04 并带有 30 GB 存储空间的实例。

    替换 ami-04b70fa74e45c3917 为您选择的 AMI ID,MyKeyPair 为您的密钥对名字,my-security-group 为您的安全组。

  5. 查看实例

    aws ec2 describe-instances \
    --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,Architecture,State.Name,PublicIpAddress]'

    这会显示您所有实例的基本信息,如实例 ID、实例类型、架构、状态和公共 IP。

终止实例

  1. 查找实例 ID

    如果您不知道要终止的实例的ID,可以首先列出您的所有实例以及它们的状态,以便找到正确的实例ID:

    aws ec2 describe-instances \
    --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,Architecture,State.Name,PublicIpAddress]'

    上述命令显示了所有实例的 ID、类型、架构、状态和公共 IP。查找您需要终止的实例的 ID。

  2. 终止实例

    一旦您有了实例 ID,可以使用以下命令终止实例:

    aws ec2 terminate-instances \
    --query 'TerminatingInstances[*].[InstanceId,CurrentState.Name]' \
    --instance-ids 'i-1234567890abcdef0'

    在上述命令中,i-1234567890abcdef0 是您要终止的实例的 ID。如果您有多个实例需要终止,可以一次列出所有实例 ID:

    aws ec2 terminate-instances \
    --query 'TerminatingInstances[*].[InstanceId,CurrentState.Name]' \
    --instance-ids 'i-1234567890abcdef0' 'i-abcdef1234567890'
  3. 确认实例已终止

    终止命令后,您可以检查实例的状态来确认它已被终止:

    aws ec2 describe-instances \
    --query 'Reservations[*].Instances[*].State.Name' \
    --instance-ids 'i-1234567890abcdef0'

    这将返回实例的当前状态,如果实例已成功终止,则应返回 "terminated"

更改实例类型

  1. 停止 EC2 实例

    在更改实例类型之前,您需要先停止实例。

    aws ec2 stop-instances \
    --instance-ids 'i-1234567890abcdef0'

    确认实例完全停止。您可以使用以下命令检查实例状态:

    aws ec2 describe-instances \
    --instance-ids 'i-1234567890abcdef0' \
    --query 'Reservations[*].Instances[*].[State.Name]'
  2. 更改实例类型

    停止实例后,使用以下命令更改实例类型:

    aws ec2 modify-instance-attribute \
    --instance-id 'i-1234567890abcdef0' \
    --instance-type '{"Value": "m5.large"}'
  3. 启动实例

    完成实例类型更改后,启动实例:

    aws ec2 start-instances --instance-ids 'i-1234567890abcdef0'

重启实例

aws ec2 reboot-instances --instance-ids 'i-1234567890abcdef0'

EBS

EBS(Elastic Block Store)

创建 EBS 卷

  1. 创建一个新的 EBS 卷:

    aws ec2 create-volume \
    --availability-zone us-east-1a \
    --size 30 \
    --volume-type "gp3"
    • --availability-zone: 卷被创建的可用区。这通常是 EC2 实例所在的同一可用区。
    • --size: 卷的大小,以 GB 为单位。
    • --volume-type: 卷的类型,比如 gp2 (通用 SSD), io1 (高性能 SSD), 等等。

    此命令将返回卷的详细信息,包括卷的 ID(例如vol-123abc456def7890)。此 ID 稍后用于将卷附加到实例。

  2. 将 EBS 卷附加到 EC2 实例

    一旦你拥有了 EBS 卷的 ID 和目标 EC2 实例的 ID,你可以使用以下命令将这个卷附加到实例:

    aws ec2 attach-volume \
    --volume-id 'vol-123abc456def7890' \
    --instance-id 'i-01234abcd5678efgh' \
    --device '/dev/sdf'
    • --volume-id: 你在上一步中创建的卷 ID。
    • --instance-id: 你希望附加新卷的 EC2 实例的 ID。
    • --device: 该设备在实例中的名称。确保这个设备名没有被实例中已有的设备使用。
  3. 格式化和挂载卷(在 EC2 实例上)

    附加卷后,你需要登录到你的 EC2 实例并进行格式化及挂载:

    sudo mkfs -t ext4 /dev/xvdf  # 格式化卷
    sudo mkdir /mnt/myvolume # 创建挂载点
    sudo mount /dev/xvdf /mnt/myvolume # 挂载卷

    替换 /dev/xvdf 和挂载点目录 /mnt/myvolume 为你实际需要的配置。

删除 EBS 卷

  1. 分离 EBS 卷

    如果卷仍附着在某个 EC2 实例上,你需要首先将其分离。使用此命令分离卷:

    aws ec2 detach-volume --volume-id 'vol-xxxxxxx'
    • --volume-id: 要分离的卷的 ID。

    分离命令可能需要几秒钟到几分钟的时间来处理,具体取决于卷的当前状态和它是否在活跃使用中。

  2. 检查卷的状态

    在尝试删除之前,确认卷的状态是 available。这意味着卷已经成功分离并准备好被删除。使用以下命令来检查卷的状态:

    aws ec2 describe-volumes --volume-ids 'vol-xxxxxxx'

    查看输出结果中的 State 字段,确认其值为 available。如果状态显示为 in-use,则说明卷仍然在被实例使用,应重新检查是否已正确分离。

  3. 删除 EBS 卷

一旦卷的状态为 available,你就可以安全地删除它。使用以下命令删除卷:

aws ec2 delete-volume --volume-id 'vol-xxxxxxx'
  • --volume-id: 此前分离的卷的 ID。

执行此命令后,卷将被删除,并且与之相关联的存储资源将被释放。

安全组

添加入站规则

  1. 查询安全组 ID

    aws ec2 describe-security-groups --query 'SecurityGroups[*].[GroupId,GroupName]'
  2. 添加入站规则

    aws ec2 authorize-security-group-ingress \
    --group-id 'GROUP_ID' \
    --protocol tcp \
    --port '3389' \
    --cidr '0.0.0.0/0'
  3. 检查安全组规则

    aws ec2 describe-security-groups --group-ids 'GROUP_ID'

删除入站规则

aws ec2 revoke-security-group-ingress \
--group-id 'GROUP_ID' \
--protocol tcp \
--port '3389' \
--cidr '0.0.0.0/0'

See also:

使用 AWS CLI 管理 EC2的更多相关文章

  1. [Notes] AWS Automation using script and AWS CLI

    (c) 2014 Amazon Web Services, Inc. and its afflialtes, All rights reserved. The content in this file ...

  2. AWS CLI 中使用S3存储

    登录 通过控制面板, 在S3管理器中创建一个新的bucket 所有AWS服务 -> 安全&身份 -> IAM -> 组, 创建一个新的组, 例如 "s3-user& ...

  3. AWS Switching to an IAM role (AWS CLI)

    一,引言 今天额外分享一篇 AWS 的技术内容,需要在 EC2 切换到跨账号 IAM 角色(AWS CLI).假设我们使用两个 AWS 账户,A账号,B账号.我们希望允许 A 账号用于 "i ...

  4. AWS CLI使用s3

    aws CLI是什么东西,暂且先不去了解,目前的需求是s3. 我在Jenkins上创建一个bucket,然后申请access_key,然后就可以使用s3来存储数据了.也就是说,s3就是一个网盘. 1. ...

  5. [AWS] Install the AWS cli

    On Windows, just download the installer and install it. Configure: aws configure In your aws console ...

  6. RabbitMQ CLI 管理工具 rabbitmqadmin(管理和监控)

    插个广告,公司最近在招".NET"开发(杭州),如果你现在还从事 .NET 开发(想用 .NET Core,但被公司不认可),想转 JAVA 开发(但又没有工作经验,惧怕面试),想 ...

  7. 用aws cli 下载s3中数据到本地

    参考https://blog.csdn.net/DynastyRumble/article/details/76649120 1 首先注册AWS账户,绑定信用卡.一定要填写正确的手机,因为验证方式是它 ...

  8. AWS CLI以及AWS S3 SYNC命令行使用

    1.到AWS的IAM创建用户,并且获取到访问密钥 ID 和私有访问密钥.下载密钥并保存. 2.到http://docs.amazonaws.cn/cli/latest/userguide/instal ...

  9. aws cli command line interface的安装与使用

    安装 在centos中安装aws cli,安装依赖python,先装好python,然后按下述命令执行 yum install wget wget https://bootstrap.pypa.io/ ...

  10. varnish CLI管理

    命令:varnishadm [-t timeout] [-S secret_file] [-T address:port] [-n name] [command [...]] ./varnishadm ...

随机推荐

  1. 【点云检测】OpenPCDet 教程系列 [1] 安装 与 ROS运行

    前言与参考 主要是介绍库的使用,做笔记区 首先搜索的时候有个问题 一直在我脑子里 hhh 就是MMlab其实还有一个叫mmdetection3d 的库,然后搜的时候发现 hhh 有网友和我一样的疑惑: ...

  2. OpenStack 下 CentOS6.X 镜像网络初始化失败问题排查

    问题表现 在我的 OpenStack 集群上迁移了一批老旧的镜像(从其他三方云平台过来的)发现这批镜像在使用 ConfigDrive 的方式注入配置初始化时无法对非首张网卡镜像初始化(后经过测试非 C ...

  3. mysql 二进制的读取与写入

    插入语句 用binary转换函数可将字符串转为二进制 insert into mytable (id, bin) values(1, binary('abcdef')) 查询语句 用cast进行类型转 ...

  4. 0. 什么是C++

    什么是C++ 是C语言的扩展,有如下的两个特性: 关注性能 与底层硬件紧密结合 对象生命周期精确控制 零成本抽象(Zero-overhead Abstraction) 引入大量利于工程实践的特性 三种 ...

  5. 【原创软件】第6期:极简SciHub论文下载器

    一.背景 因为科研需求下载英文论文,省得自己去找有效的scihub网址,特此写了一个基于c#和wpf的小软件. 二.使用方法 只需要输入doi即可,点击[打开浏览器下载论文]即可跳转浏览器进行下载.下 ...

  6. 诺基亚8110 4G手机强制格式化方法

    关机状态下,先按住上键,再按住开机键,出现开机动画时松开开机键,出现硬割界面下键选择第一个wipe用开机键确认yes,再次出现硬格界面,下键选择第二个wipe用开机键确认yes,再次出现硬格界面开机键 ...

  7. 基于微信小程序的校园维修管理系统-开题报告参考

    \n文末获取源码联系 感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询 一.课题研究的目的和意义** 本研究开发基于微信小程序的物品维修系统,它不仅能实现专业的维 ...

  8. [oeasy]python0011_ 字符序号_ordinal_ord

    ​ 序号(ordinal) 回忆上次内容 ​hello world​​ 不是从来就有的 来自于​​unix​​和​​c​​ 虽然我们今天有各种先进的学习手段 最早的高级语言学习是从最早的那张打字机用纸 ...

  9. SQL:聚集索引和非聚集索引

    聚集(clustered)索引,也叫聚簇索引 定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引. 注:第一列的地址表示该行数据在磁盘中的物理地址,后面三列 ...

  10. PHP 高性能框架 Workerman 凭什么能硬刚 Swoole ?

    大家好,我是码农先森. 一次偶然看到了国外某机构针对 PHP 周边生态框架及扩展的性能测试排行榜,看到 Workerman 竟遥遥领先 Swoole.在我们 PHP 程序员现有的认知里,Swoole ...