在EC2 Debian操作系统上安装Agent并使用EC2 Connect功能

注:截止2023年7月,EC2 Instance Connect功能只在海外区域可用,Session Manager在海外区和中国区都可用。

一、背景

Debian是常用主流Linux系统之一,Ubuntu就是源自Debian体系发展出来的。Debian在云端使用频度不如CentOS/Ubuntu广泛。在AWS云上提供的EC2 AMI中,可在创建EC2向导界面直接选择Debian 11。

不过,这个Debian 11的AMI镜像虽然是AWS官方维护的,但是其自身没有集成System Manager Agent,也没有集成EC2 Instance Connect插件。因此,在EC2控制台上,点击Connect按钮,无论选择EC2 Instance Connect还是选择Session Manager,都会提示无法连接,如下截图。

Continue reading “在EC2 Debian操作系统上安装Agent并使用EC2 Connect功能”

在使用Graviton处理器的ARM架构的EC2构建JAVA应用

一、背景

AWS Graviton是AWS推出的ARM架构处理器,目前已经在AWS中国区域、全球区域大规模可用。使用Graviton处理器的EC2机型,以及基于Graviton处理器的托管服务包括RDS、Redis、OpenSearch,可获得比同配置的Intel处理器机型更高的性能,且同配置对比成本更低。

更多信息可参考:

https://aws.amazon.com/cn/ec2/graviton/
https://aws.amazon.com/cn/campaigns/graviton/

本文将展示Java的跨平台特性,即可以在ARM架构的EC2上构建Java应用,也可以在Intel处理器上构建好JAR包后,直接复制到ARM架构上运行。

Continue reading “在使用Graviton处理器的ARM架构的EC2构建JAVA应用”

采用Spot优化EC2价格的测算

Spot竞价实例是一种非常更有效的成本节约手段。

引用AWS官网:

竞价型实例是一种使用备用 EC2 容量的实例,以低于按需价格提供。由于竞价型实例允许您以极低的折扣请求未使用的 EC2 实例,这可能会显著降低您的 Amazon EC2 成本。竞价型实例的每小时价格称为 Spot 价格。每个可用区中的每种实例类型的 Spot 价格是由 Amazon EC2 设置的,并根据竞价型实例的长期供求趋势逐步调整。您的竞价型实例在容量可用时运行。

如果能灵活控制应用程序的运行时间并且应用程序可以中断,竞价型实例就是经济实惠之选。例如,竞价型实例非常适合数据分析、批处理作业、后台处理和可选的任务。

https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/using-spot-instances.html

下面简单进行测算。

Continue reading “采用Spot优化EC2价格的测算”

使用Sysbench测试EC2云主机CPU的性能

一、Sysbench工具简介

测试云主机的CPU性能可使用常见的sysbench工具进行压力测试。Sysbench的CPU测试主要考察CPU的整数运算能力,通过计算一定范围内的素数,来评估CPU的计算能力。整数计算的场景适合对应到企业应用环境,不含视频转码、图像渲染等领域需要的浮点预算能力。此外,本测试也不使用复杂的benchmark套件测试内存、网络、磁盘等,只是测试CPU。Sysbench测试工具为软件包源直接安装,预先build好,不做build过程的调参数。

Continue reading “使用Sysbench测试EC2云主机CPU的性能”

使用EC2 Userdata为丢失密钥的EC2更换密钥

一、背景

AWS云上EC2默认使用比密码认证更安全的密钥登录方式,并且默认不允许SSH密码验证。于此同时,为了提升安全性,密钥一旦创建好只允许下载一次。一旦密钥被下载过,AWS控制台上不再提下载按钮。因此保存密钥就成了一项非常重要的工作。

在一台已经登录上的EC2上,可以访问EC2的元数据来获取当前EC2使用的是哪一个密钥。

curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key

如果丢失了密钥,现有EC2将无法登录。

如果希望抢救这台EC2并更换为新的密钥,则可以采取如下的方法:

Continue reading “使用EC2 Userdata为丢失密钥的EC2更换密钥”

Yum 升级时候提示 “xxx packages excluded due to repository priority protections” 的解决办法

当在Amazon Linux 2上执行 yum update 时候,提示如下信息:

[root@ip-172-31-6-95 ~]# yum update
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
234 packages excluded due to repository priority protections
No packages marked for update
[root@ip-172-31-6-95 ~]#

这是由于yum组件的priority插件已经不在被使用。

Continue reading “Yum 升级时候提示 “xxx packages excluded due to repository priority protections” 的解决办法”

构建Graviton2处理器的Amazon Linux 2平台的openswan 3.0软件包

一、背景

Openswan是用于构建site-to-site VPN服务的开源软件。Openswan历史较长,在主流Linux发行版上一般没有软件安装源,无法通过yum install一步执行安装。由此需要手工编译源代码,比较麻烦。

作为替代方案,可使用libreswan,这是一个从openswan 2.6版本fork出来的分支,在Amazon Linux 2(等同CentOS7)系统上有软件源,可以使用yum install libreswan安装。

However,libreswan的配置和参数与openswan有细微差别,例如不支持auth=esp等参数。由此,在与AWS托管的VPN网关对接时候,生成的配置文件还需要再做人工调整,以消除openswan和libreswan的配置差异。

由此本文将构建一个基于Graviton2处理器的Amazon Linux 2平台的openswan 3.0软件包,可用于在新的EC2上快速安装部署而无需从源代码编译。

Continue reading “构建Graviton2处理器的Amazon Linux 2平台的openswan 3.0软件包”

在使用Windows Server 2019 (1809)的EC2上安装WSL运行Ubuntu Linux

一、背景

在Windows 10上可以使用WSL和新的Terminal直接运行Linux,同时,还可以通过Windows Store在线商店安装需要的Linux发行版。但在Windows Server上,没有在线商店可用。因此,安装方法可以参考如下。

首先检查确认版本高于 Windows Server 2019 (version 1709) 版本。例如EC2上选择Windows Server 2019的话版本是1809版本,可运行WSL 1。如果系统版本是1903或者更高可运行WSL2。

Continue reading “在使用Windows Server 2019 (1809)的EC2上安装WSL运行Ubuntu Linux”

使用Session Manager登录EC2

本文更新于2023年8月,更新了EC2创建向导中选择IAM Role选项位置的截图为2023年新UI截图。目前AWS海外区和中国区的EC2创建向导界面均为本版本界面。

本文针对Amazon Linux、Redhat Enterprise Linux、Ubuntu等已经内置了SSM Agent的AMI镜像,对于Debian等没有预装SSM Agent的AMI,可参考本文对Debian进行配置。

一、Session Manager简介

Session Manager是System Manager(以下简称SSM)里边的管理套件其中的一个组件。它是一项Region级别的区域性服务。使用Session Manager在特定系统上可以快速免密钥登录EC2。

Continue reading “使用Session Manager登录EC2”

Python批量开关EC2脚本

前提条件:

  • 需要本机配置AWS CLI的AK/SK;
  • 本机安装Python3;
  • 本机安装boto3库(执行pip3 install boto3)。

Python脚本如下:

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

response = client.describe_instance_status(
    IncludeAllInstances=True
)

for i in response['InstanceStatuses']:
    instance = ec2action.Instance(i['InstanceId'])
    response1 = instance.stop(
            #DryRun=True,
            Force=True
    )
    print("instance: ", i['InstanceId'], "is being stopped." )
    print(response1)

以上为关机脚本。如果需要批量开机,替换stop为start即可。

AWSCLI V1升级到V2方法

AWS CLI V2版本已经正式成为了稳定版本,有些特别的调用需要V2版本才可以支持,V1版本无法运行。当在一个Amazon Linux 2操作系统上,输入 aws 命令并回车之后,系统提示如下信息,则表示这是1.x版本,可以升级到2.x版本。

Note: AWS CLI version 2, the latest major version of the AWS CLI, is now stable and recommended for general use. For more information, see the AWS CLI version 2 installation instructions at: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html

执行 aws –version 命令可以查看当前版本。这表示当前的版本是1.18版本,需要升级到V2。

[ec2-user@ip-172-31-200-161 ~]$ aws --version
aws-cli/1.18.147 Python/2.7.18 Linux/4.14.214-160.339.amzn2.x86_64 botocore/1.18.6
[ec2-user@ip-172-31-200-161 ~]$

升级过程如下。

Continue reading “AWSCLI V1升级到V2方法”