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. Zynq-7045升级,ARM+FPGA性能怪兽,Xilinx UltraScale+ MPSoC XCZU7EV核心板正式发布

  2. 用hive或mr清洗app数据

    1.项目背景 从大量源数据中清洗出有效数据供后续程序使用. 源数据参照log.txt文件 2.项目源数据说明 9841EF7BDBDF0AC9AF42AEBB4E4F8D4F Id 12 状态1 22 ...

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

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

  4. WorPress基础之谷歌GSC与GA统计代码安装

    本篇文章讲介绍什么是GSC和GA以及如何安装. 什么是GSC GSC,全称为Google Search Console,由谷歌官方提供的网站管理工具,可帮助监控和维护网站在Google 搜索结果中的展 ...

  5. 【DataBase】MySQL 02 MySQL的配置详细

    参考至视频:P8 - P11部分 https://www.bilibili.com/video/BV1xW411u7ax 配置文件的介绍 最基本的只需要这三项就行了,演示的其他配置在新版都不支持了貌似 ...

  6. 【DataBase】MySQL 31 游标

    游标 Cursor 游标是用来存储查询的结果集的数据类型,也称为是光标 在存储过程和函数中可以使用光标对结果集进行循环的处理 光标的使用包括1.声明,2.开启,3.关闭,4.Fetch 游标仅用于存储 ...

  7. 【Vue】06 Webpack Part2 打包命令配置

    Webpack 配置: 入口 & 出口: 就是我们使用的打包命令: 一个是对什么文件执行,这就是入口 一个是输出到什么文件,这就是出口 每一次打包使用这个命令都必须指定这两个必要的参数 所以将 ...

  8. 3天搞定Linux,1天搞定Shell笔记

    Linux概述 Linux是一个操作系统OS 开源 MacOS基于Darwin,Darwin基于FreeBSD开发. Linux基于Minix(开发重写),Minix基于Unix开发. Linux一切 ...

  9. 【JavaScript】前端算法题 40道题+解析

    前言 最近练习了一些前端算法题,现在做个总结,以下题目都是个人写法,并不是标准答案,如有错误欢迎指出,有对某道题有新的想法的友友也可以在评论区发表想法,互相学习 题目 题目一: 二维数组中的查找: 在 ...

  10. Java 文件 I/O流详解

    文件 文件操作是Java开发中一个重要的组成部分,它允许开发者对文件进行读取,写入,创建,删除和修改等操作,文件操作的主要通过java.io包中的类来实现的,其中的File类更是文件操作的核心类 Fi ...