从 AWS 导入映像


如果您将 Amazon 机器映像 (AMI) 或虚拟磁盘映像(VMDK 或 VHD)存储在 Amazon Web Services (AWS) 的 S3 存储桶中,则可以使用 Google Cloud CLI 将这些映像导入 Google Cloud 中。

或者,您可以按照手动导入启动磁盘的说明导入映像。

如需导入选项的完整列表,请参阅选择迁移路径

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

概览:从 AWS 导入映像

将映像从 AWS 导入 Compute Engine 的过程如下所示:

  1. 在您的 AWS 账号中,创建一个具有执行导出所需的权限的 IAM 用户。

  2. 在您的 AWS 账号中,设置和查看配置设置

  3. 在您的 AWS 账号中,使用上一步中创建的 IAM 用户生成临时凭据,以供 Google Cloud CLI 使用。

  4. 在 Google Cloud 中,使用 Google Cloud CLI 导入映像。Google Cloud CLI 会完成以下步骤:

    • 将映像从 AWS 导入到 Compute Engine。
    • 将映像添加到 Compute Engine 上指定项目中的可用映像列表。

局限和限制

创建 AWS IAM 用户

使用 AWS 根用户账号生成凭据可能不是最佳做法。出于安全原因,Google 建议您创建一个或多个 IAM 用户,并为其提供从 AWS 导出 AMI 或虚拟磁盘所需的最低权限。

IAM 用户所需的最低权限取决于您要从 AWS 导出的映像类型(AMI 或虚拟磁盘映像)。

创建一个 AWS IAM 用户来执行 AMI 导出

如需创建此用户,请参阅在 AWS 账号中创建 IAM 用户

此用户必须具有以下必要权限和服务角色:

创建一个 AWS IAM 用户来执行虚拟磁盘映像导出

如需创建此用户,请参阅在 AWS 账号中创建 IAM 用户

以下 JSON IAM 政策中列出了该用户所需的最低权限。将 IMAGE_FILE_PATH 替换为要导入的映像文件的路径。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": ["arn:aws:s3:::IMAGE_FILE_PATH"]
    },
  ]
}

设置和查看配置设置

创建 IAM 用户后,您需要设置和配置您的环境。

如需设置和查看配置设置,请运行以下命令:

aws configure

如需详细了解此命令,请参阅设置和查看配置设置

生成临时凭据

创建并配置 IAM 用户后,您需要创建临时凭据,以供 gcloud compute images import 命令使用。

此用户凭据包括以下内容:

  • 访问密钥 ID:aws-access-key-id
  • 私有访问密钥:aws-secret-access-key
  • 会话令牌:aws-session-token

此临时 AWS IAM 用户凭据必须由 IAM 用户生成。所选 IAM 用户必须具有所有必需的权限。

要生成临时凭据,您必须使用 AWS 命令行工具或以编程方式生成凭据。如需安装 AWS 命令行,请参阅安装 AWS CLI 版本 2

例如,以下命令会生成有效期为 3600 秒的凭据。请确保指定足够的时间,以将映像导入 Google Cloud。

aws sts get-session-token --duration-seconds 3600

如需详细了解如何生成临时凭据,请参阅将临时凭证用于 AWS 资源

将映像导入 Compute Engine

创建 AWS IAM 用户生成临时用户凭据后,您现在可以将映像导入 Compute Engine。

从 AWS 导入 AMI

  1. 设置 AWS S3 存储桶。该存储桶用作临时存储位置,供 Google Cloud CLI 从中导出 AMI。向 Compute Engine 的导入成功完成后,Google Cloud CLI 会立即从该存储桶中删除 AMI。

    该存储桶必须与 AMI 位于同一区域中。

  2. 导入 AMI。要从 AWS 导入 AMI,请使用 gcloud compute images import 命令

    gcloud compute images import IMAGE_NAME \
        --aws-region=AWS_REGION \
        --aws-access-key-id=AWS_ACCESS_KEY_ID \
        --aws-secret-access-key=AWS_SECRET_ACCESS_KEY \
        --aws-session-token=AWS_SESSION_TOKEN \
        --aws-ami-id=AWS_AMI_ID \
        --aws-ami-export-location=AWS_AMI_EXPORT_LOCATION \
        --os=OS
    

    请替换以下内容:

    • IMAGE_NAME:要创建的 AMI 映像的名称。
    • AWS_REGION:要导入的映像所在的 AWS 区域。
    • AWS_ACCESS_KEY_ID:临时 AWS 凭据的访问密钥 ID。此 ID 必须使用 AWS Security Token Service 生成。
    • AWS_SECRET_ACCESS_KEY:临时 AWS 凭据的私有访问密钥。此密钥必须使用 AWS Security Token Service 生成。
    • AWS_SESSION_TOKEN:临时 AWS 凭据的会话令牌。此会话令牌必须使用 AWS Security Token Service 生成。
    • AWS_AMI_ID:要导入的映像的 AWS AMI ID。
    • AWS_AMI_EXPORT_LOCATION:要从中导出映像的 AWS S3 存储桶位置。该存储桶必须与 AMI 位于同一区域中。
    • OS:要导入的磁盘映像的操作系统

    示例

    例如,如需从 S3 存储桶 ami-test-bucket 导入 ID 为 ami-04d75016789164863 的 AMI 映像,并将其命名为 my-ami-test-image,命令可能会类似于以下内容:

    gcloud compute images import my-ami-test-image \
        --aws-region=us-east-2 \
        --aws-access-key-id=ASIAXS3ZFH4O3WWGMMH5 \
        --aws-secret-access-key=aW/uxvQD68A+hv3m5oQ4zFfaKiS+za+X/kRlBvx0 - \
        --aws-session-token=IQoJb3JpZ2luX2VjEEQaCWPIEwL7Qi76PyEIfFyj88...== \
        --aws-ami-id=ami-04d75016789164863 \
        --aws-ami-export-location=s3://ami-test-bucket \
        --os=ubuntu-1804
    

从 AWS 导入虚拟磁盘映像

要从 AWS 导入虚拟磁盘映像,请使用 gcloud compute images import 命令

gcloud compute images import IMAGE_NAME \
    --aws-region=AWS_REGION \
    --aws-access-key-id=AWS_ACCESS_KEY_ID \
    --aws-secret-access-key=AWS_SECRET_ACCESS_KEY \
    --aws-session-token=AWS_SESSION_TOKEN \
    --aws-source-ami-file-path=DISK_IMAGE_FILE_PATH \
    --os=OS

请替换以下内容:

  • IMAGE_NAME:要创建的磁盘映像的名称。
  • AWS_REGION:要导入的映像所在的 AWS 区域。
  • AWS_ACCESS_KEY_ID:临时 AWS 凭据的访问密钥 ID。此 ID 必须使用 AWS Security Token Service 生成。
  • AWS_SECRET_ACCESS_KEY:临时 AWS 凭据的私有访问密钥。此密钥必须使用 AWS Security Token Service 生成。
  • AWS_SESSION_TOKEN:临时 AWS 凭据的会话令牌。此会话令牌必须使用 AWS Security Token Service 生成。
  • DISK_IMAGE_FILE_PATH:要导入的虚拟磁盘映像文件的 S3 资源路径。
  • OS:要导入的磁盘映像的操作系统

示例

例如,如需从 S3 存储桶 image-test-bucket 导入 ubuntu1804.vmdk 虚拟磁盘,并将其命名为 my-test-image,您的命令可能会类似于以下内容:

gcloud compute images import my-test-image \
    --aws-region=us-east-2 \
    --aws-access-key-id=ASIAXS3ZFH4O3WWGMMH5 \
    --aws-secret-access-key=aW/uxvQD68A+hv3m5oQ4zFfaKiS+za+X/kRlBvx0 - \
    --aws-session-token=IQoJb3JpZ2luX2VjEEQaCWPIEwL7Qi76PyEIfFyj88...== \
    --aws-source-ami-file-path=s3://image-test-bucket/ubuntu1804.vmdk \
    --os=ubuntu-1804

后续步骤