这个问题,花了1个多月时间测试,经过不断尝试终于解决了,记录如下。

难点主要是树莓派是ARM架构,首先要创建基于此ARM64架构的虚拟机,然后修改系统配置使其适用于EC2;第二个难点是EC2目前不支持导入ARM架构的AMI,咨询AWS Support后说可以通过import-snapshot的方式先导入然后再创建AMI。

1.- 创建ARM64 虚拟机,安装Ubuntu Jammy Fish ARM64,参考:https://blog.51cto.com/helpdesk/7272122

2.- 修改系统配置文件,具体如下:

a1. 修改 /etc/default/grub 文件,添加:

"console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto" to GRUB_CMDLINE_LINUX

在AWS EC2上跑 树莓派Ubuntu_树莓派

a2. 执行命令 "sudo grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg" 应用上面的修改

注:grub2-mkconfig提示没有,使用grub-mkconfig

a3. The network interface will now be named "eth0" at next boot, so need to create a config file for it. i.e:      

sudo cp /etc/sysconfig/network-scripts/ifcfg-ens160 /etc/sysconfig/network-scripts/ifcfg-eth0  

注:这一步实际上不需要,保持原来的即可:01-network-manager-all.yamlcd,让系统自己管理网络

在AWS EC2上跑 树莓派Ubuntu_Ubuntu_02

a4. Add nvme and ena to initrd, neither seemed to be there for default kernel, 路径:/etc/dracut.conf.d/01-aws.conf

sudo vim 01-aws.conf,添加如下内容:

add_drivers+=" nvme ena "

然后执行命令:sudo dracut -f -v

在AWS EC2上跑 树莓派Ubuntu_Ubuntu_03

注:这一步非常重要,少了这些信息EC2无法boot起来

3.- 导出UTM虚拟机,这里需要将其从qcow2转换成vhdx格式,参考:https://blog.51cto.com/helpdesk/7384628

4.- 将vhdx文件上传到 S3

5.- 进入AWS CloudShell 通过import-snapshot导入 vhdx文件,参考:https://blog.51cto.com/helpdesk/6226474

6.- 进入AWS Console EC2界面,选定上传到snapshot,然后创建image

在AWS EC2上跑 树莓派Ubuntu_Ubuntu_04

在AWS EC2上跑 树莓派Ubuntu_EC2_05

然后进入AMI,选择导入对image,然后Launch instance from AMI

在AWS EC2上跑 树莓派Ubuntu_Ubuntu_06

Instance type选择 t4g系列,即ARM64架构

在AWS EC2上跑 树莓派Ubuntu_AWS_07

7.- boot起来后,需要通过EC2 serial console访问

在AWS EC2上跑 树莓派Ubuntu_AWS_08

在AWS EC2上跑 树莓派Ubuntu_EC2_09

连接后 使用命令 ifconfig 和 ip a 发现 eth0网络端口没有起来,ip a后看到网口处于DOWN的状态,然后使用命令启动网口:

sudo ifconfig eth0 up

然后 sudo reboot

重启完进入检查网络终于通了。


2024-2-21 后补

关于这个网络不通的问题,有一部同样是自制AMI的Ubuntu X86架构的,我将Instance type更改,主要是从Intel CPU换成AMD的,事后无法连接,后通过session manager连进去一看,发现没有ip,再查同样发现这个网络端口没有起来,后来才发现EC2将默认的网络端口名字也给修改了,具体可以通过下面命令检查。

对比netplan里网络配置文件和实际机器的网络端口:nmcli device status

在AWS EC2上跑 树莓派Ubuntu_AWS_10


此时无法ssh,通过命令安装:sudo apt install openssh-server

也无法RDP桌面,通过命令安装

sudo apt install xrdp  

sudo systemctl enable --now xrdp 

然后 sudo reboot 后就可以通过RDP访问桌面啦,大功告成。

在AWS EC2上跑 树莓派Ubuntu_树莓派_11