作者:ezmsp易云服科技公有云架构师杨美志
前言
AWS海外区域和国内区域是互相隔离的两套系统,海外账号与国内账号之间的信息数据无法共享。所以AMI镜像无法直接在账户层面在海外账号和国内账号设置权限共享数据,但在实际工作中为保证海外国内业务系统的一致性,海外系统与国内系统需保持一致,因此需要将海外AMI迁移至大陆region。
解决方案
- 将EC2实例转换为AMI镜像(海外账号)
- 将镜像打包压缩转移转存到S3存储桶(海外账号)
- 将打包压缩的AMI镜像下载到本地
- 将本地AMI镜像上传到国内账号的S3存储桶当中
- 从S3存储桶中还原AMI镜像
- 使用还原的AMI镜像创建EC2实例
操作步骤
将需制作成AMI镜像的EC2实例关机,选中实例双击鼠标,选择“映像和模板”“创建映像”。
填写镜像名称与描述,选择磁盘大小。
点击“创建映像”完成镜像的创建
待镜像变成可用后可往后继续操作
为用户创建访问密钥(海外账户),用于登录CLI
选择“命令行界面(CLI)”
默认即可,直接创建访问密钥
使用AWS-CLI登录账户(国外账户),AWS CLI安装参考
https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/getting-started-install.html
aws configure
AWS Access Key ID [****************725J]: AKIAR6XXRZOOUGL7BJLI
AWS Secret Access Key [****************HyYS]: uZQ5IcbygSjwDCZKdVYO3/mrOxQS5il7lE3gv8Q
Default region name [us-east-1]: us-west-2
Default output format [json]: json
创建海外存储桶
aws s3api create-bucket --bucket ymz-ami-us --region us-west-2
{
"Location": "/ymz-ami-us"
}
将AMI镜像存储到S3存储桶当中
aws ec2 create-store-image-task --image-id ami-0d2fee5ff1a2da2e1 --bucket ymz-ami-us
{
"ObjectKey": "ami-0d2fee5ff1a2da2e1.bin"
}
–image-id 后接镜像ID
–bucket 后接存储桶名称
将S3存储桶的镜像文件下载到本地
命令行下载
aws s3 cp s3://idys-bucket/ami-0d2fee5ff1a2da2e1.bin D:下载
控制台下载
提前创建好访问密钥,使用AWS-CLI登录账户(国内账户),
aws configure
AWS Access Key ID [****************BJLI]: AKIAZ5VPSJK46BUL4XV2D
AWS Secret Access Key [****************gv8Q]: CYZmApDSKNJKDhhepDSvgTdw8bZOTb+O9fh9Cx1Rwqj+mS
Default region name [us-west-2]: cn-northwest-1
Default output format [json]: json
创建存储桶
aws s3api create-bucket --bucket ymz-ami-ch --region cn-northwest-1
{
"Location": "/ymz-ami-ch"
}
将镜像文件上传到国内S3存储桶
aws s3 cp D:下载ami-0d2fee5ff1a2da2e1.bin s3://ymz-ami-ch
使用CLI命令create-restore-image-task指令将S3存储桶文件还原为镜像
aws ec2 create-restore-image-task --object-key ami-0d2fee5ff1a2da2e1.bin --bucket ymz-ami-ch --name "yangmeizhi-rocky-linux-8.7-ami"
{
"ImageId": "ami-0b843c4088409409d"
}
–object-key参数指定对象名称
–bucket指定存储桶名称
–name指定还原后的镜像名称
“ImageId”: “ami-0b843c4088409409d”指明了还原后的镜像ID
登录AWS 控制台,在EC2左侧菜单栏找到AMI,根据AMI ID找到还原的AMI镜像,点击进去之后选择右上角“从AMI启动实例”创建一台新实例
创建完成之后通过通过EC2公网IP远程连接至AMI创建的实例,连接成功