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. 【路径规划】 The Dynamic Window Approach to Collision Avoidance (附python代码实例)

    引用与前言 参考链接 引用参考如下: 博客园解释:https://www.cnblogs.com/dlutjwh/p/11158233.html 这篇博客园写的贼棒!我当时就是一边对着论文一边对着他这 ...

  2. 怎样理解 Vue 的单向数据流?

    数据从父级组件传递给子组件,只能单向绑定. 子组件内部不能直接修改从父级传递过来的数据. 所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件 ...

  3. 1. 介绍一下 CSS 的盒子模型?

    1. 盒模型: 内容(content).填充(padding).边界(margin). 边框(border) 2. 类型: IE 盒子模型.标准 W3C 盒子模型: 3. 两种盒模型的主要区别是:标准 ...

  4. (五)Redis 缓存异常、应对策略

    1.缓存和数据库不一致 只要我们使用 Redis 缓存,就必然会面对缓存和数据库间的一致性保证问题,这里的"一致性"包含了两种情况:缓存中有数据且与数据库中的值相同.缓存中没有数据 ...

  5. windows下使用dockerdesktop进行部署

    Docker部署springboot项目 环境准备 要在windows上使用docker需要确认系统的需求 需要启用虚拟化支持的CPU 启用适用于windows的Linux子系统功能 保证足够的内存 ...

  6. 0. 什么是C++

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

  7. 解读MySQL 8.0数据字典缓存管理机制

    背景介绍 MySQL的数据字典(Data Dictionary,简称DD),用于存储数据库的元数据信息,它在8.0版本中被重新设计和实现,通过将所有DD数据唯一地持久化到InnoDB存储引擎的DD t ...

  8. Swift开发基础07-内存布局

    了解Swift的内存布局和底层原理对于编写高性能和内存高效的应用非常重要.接下来,我将更详细地介绍Swift的内存管理机制和一些底层实现细节,包括内存布局.ARC(自动引用计数).引用类型和值类型的区 ...

  9. git 怎么将某个开发分支最近几次的提交合并成一次提交

    1. 切换到开发分支: git checkout dev 2. 运行交互式 rebase 命令,并指定要合并的提交数量(在这个例子中是最近的3次提交): git rebase -i HEAD~3 3. ...

  10. [oeasy]python0104_指示灯_显示_LED_辉光管_霓虹灯

    编码进化 回忆上次内容 x86.arm.riscv等基础架构 都是二进制的 包括各种数据.指令   但是我们接触到的东西 都是屏幕显示出来的字符   计算机 显示出来的 一个个具体的字型   ​   ...