Skip to content

DNET_AWSQuickSetup

nishi_74322014 edited this page Sep 11, 2026 · 1 revision

AWS上に素早く環境を構築する

概要

Azure上に素早く環境を構築する」のAWS版

詳細

取り敢えず、AWSの新しいVM Import、
ImportImageを使用してみようかと。

VHDのImportImage

  • 取り敢えず、Azure VMのVHDを使ってAWS VMを起動してみようかと。

  • VM起動後の開発環境のセットアップ」の手順で作成したものを利用したかったが、

    • Windows10は、BYOL が必要。
    • また、第 2 世代 VMの設定なども、現時点では、良く解らない。

    との事で、Windows Server + Docker Desktop 程度をテストしてみる。

AWS CLIの設定

AWS CLIも参照。

  • AWS CLIをインストールする。

  • 専用のIAMユーザ(vmimportuser)を作成する。

    • IAMユーザを新規作成し、下記のグループ&ポリシを適用。
    • IAMユーザのkeyとsecretを取得する。
  • keyとsecret, etc. を AWS CLI に設定

  • グループ&ポリシの作成ポイント

    • 管理ポリシでも良いのかも知れないが、権限をミニマムに出来ない。

    • 手順の例に以下の様なミニマムなポリシ設定例が載っているが、

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:ListAllMyBuckets"
            ],
            "Resource": "*"
          },
          {
            "Effect": "Allow",
            "Action": [
              "s3:CreateBucket",
              "s3:DeleteBucket",
              "s3:DeleteObject",
              "s3:GetBucketLocation",
              "s3:GetObject",
              "s3:ListBucket",
              "s3:PutObject"
            ],
            "Resource": ["arn:aws:s3:::import-to-ec2-vhdbucket","arn:aws:s3:::import-to-ec2-vhdbucket/*"]
          },
          {
            "Effect": "Allow",
            "Action": [
              "ec2:CancelConversionTask",
              "ec2:CancelExportTask",
              "ec2:CreateImage",
              "ec2:CreateInstanceExportTask",
              "ec2:CreateTags",
              "ec2:DeleteTags",
              "ec2:DescribeConversionTasks",
              "ec2:DescribeExportTasks",
              "ec2:DescribeInstanceAttribute",
              "ec2:DescribeInstanceStatus",
              "ec2:DescribeInstances",
              "ec2:DescribeTags",
              "ec2:ImportInstance",
              "ec2:ImportVolume",
              "ec2:StartInstances",
              "ec2:StopInstances",
              "ec2:TerminateInstances",
              "ec2:ImportImage",
              "ec2:ImportSnapshot",
              "ec2:DescribeImportImageTasks",
              "ec2:DescribeImportSnapshotTasks",
              "ec2:CancelImportTask"
            ],
            "Resource": "*"
          }
        ]
      }
    • ただ、上記では、CLIで、以下の操作ができない。

      • ロールの作成 → AdministratorAccess管理ポリシを追加

VHDの準備と利用

  • EC2にインポートしたいVMイメージ(ココではVHD)を用意

    • AzureでWindows ServerのVMを作成
    • RDP接続を既定のポートで有効にしておく。
    • アカウント情報はメモしておく。
    • 起動して接続を確認した後、停止する。
    • VHDをダウンロードする。
      ...と思ったが、AzureのOS Discは127GiBから縮小できないようなので、
      別途、評価版のVHDを入手し、Hyper-V上で初期化し、アップロード用VHDを取得した。
      (127GiBをダウンロードしてアップロードするには、数日間掛かってしまう)
  • VMイメージ(ココではVHD)をアップロードするための
    s3のbucket(import-to-ec2-*)を作成

    • import-to-ec2-vhdbucketというs3bucketを作成

      • CLI

        >aws s3api create-bucket --bucket import-to-ec2-vhdbucket --region us-east-2 --create-bucket-configuration LocationConstraint=us-east-2
        -------------------------------------------------------------------
        |                          CreateBucket                           |
        +----------+------------------------------------------------------+
        |  Location|  http://import-to-ec2-vhdbucket.s3.amazonaws.com/   |
        +----------+------------------------------------------------------+
        
      • ポータルからも作成可能。

  • VHDのアップロードとAMI(Amazon Machine Image)化

    • VHDをimport-to-ec2-vhdbucketにアップロード

      • CLI

        >aws s3 cp C:\...\xxxx.vhd s3://import-to-ec2-vhdbucket
        upload: ..\..\xxxx.vhd to s3://import-to-ec2-vhdbucket/xxxx.vhd
        >aws s3 ls s3://import-to-ec2-vhdbucket
        2020-xx-xx xx:xx:xx 9692336128 xxxx.vhd
        
      • ポータルからもアップロード可能。

    • VM Import ロール(AWS IAMの該当節を参照)を設定

      • ロール作成リクエスト用のjson(trust-policy.json)を作成する。

        {
           "Version": "2012-10-17",
           "Statement": [
              {
                 "Effect": "Allow",
                 "Principal": { "Service": "vmie.amazonaws.com" },
                 "Action": "sts:AssumeRole",
                 "Condition": {
                    "StringEquals":{
                       "sts:Externalid": "vmimport"
                    }
                 }
              }
           ]
        }

        ※ 「"sts:Externalid": "vmimport"」を指定しているが、
         自分で直接「sts assume-role」をしてないので、
         --external-idパラメタのベースが何なのか不明と言う。

      • ロール作成リクエストを投げる。

        aws iam create-role --role-name vmimport --assume-role-policy-document file://"C:\...\trust-policy.json"
      • (ロールへの)ポリシ設定リクエスト用のjson(role-policy.json)を作成する。

        {
           "Version": "2012-10-17",
           "Statement": [
              {
                 "Effect": "Allow",
                 "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                 ],
                 "Resource": [
                    "arn:aws:s3:::import-to-ec2-vhdbucket"
                 ]
              },
              {
                 "Effect": "Allow",
                 "Action": [
                    "s3:GetObject"
                 ],
                 "Resource": [
                    "arn:aws:s3:::import-to-ec2-vhdbucket/*"
                 ]
              },
              {
                 "Effect": "Allow",
                 "Action":[
                    "ec2:ModifySnapshotAttribute",
                    "ec2:CopySnapshot",
                    "ec2:RegisterImage",
                    "ec2:Describe*"
                 ],
                 "Resource": "*"
              }
           ]
        }
      • (サービスが使用する)(ロールへの)ポリシ設定リクエストを投げる。

        aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://"C:\...\role-policy.json"
    • VHDをAMIに変換する。

      • AMI変換リクエスト用のjson(containers.json)を作成する。

        [
          {
            "Description": "Windows 20XX VHD",
            "Format": "vhd",
            "UserBucket": {
              "S3Bucket": "import-to-ec2-vhdbucket",
              "S3Key": "xxxx.vhd"
            }
          }
        ]
      • AMI変換リクエストを投げる。

        aws ec2 import-image --cli-input-json file://"C:\...\containers.json"
      • 進捗を確認しつつ待つ

        初回(ImportTaskIdを確認)

        >aws ec2 describe-import-image-tasks
        -----------------------------------------------------
        |             DescribeImportImageTasks              |
        +---------------------------------------------------+
        ||                ImportImageTasks                 ||
        |+----------------+--------------------------------+|
        ||  Description   |  Windows 20xx VHD              ||
        ||  ImportTaskId  |  import-ami-xxxxxxxxxxxxxxxxx  ||
        ||  Progress      |  19                            ||
        ||  Status        |  active                        ||
        ||  StatusMessage |  converting                    ||
        |+----------------+--------------------------------+|
        |||                SnapshotDetails                |||
        ||+----------------------+------------------------+||
        |||  Description         |  First CLI task        |||
        |||  DiskImageSize       |  9692336128.0          |||
        |||  Format              |  VHD                   |||
        |||  Status              |  active                |||
        ||+----------------------+------------------------+||
        ||||                 UserBucket                  ||||
        |||+------------+--------------------------------+|||
        ||||  S3Bucket  |  import-to-ec2-vhdbucket       ||||
        ||||  S3Key     |  xxxx.vhd                      ||||
        |||+------------+--------------------------------+|||
        

        初回以降(ImportTaskIdを指定)

        >aws ec2 describe-import-image-tasks --import-task-ids import-ami-xxxxxxxxxxxxxxxxxx
        -----------------------------------------------------
        |             DescribeImportImageTasks              |
        +---------------------------------------------------+
        ||                ImportImageTasks                 ||
        |+----------------+--------------------------------+|
        ||  Architecture  |  x86_64                        ||
        ||  Description   |  Windows 20xx VHD              ||
        ||  ImageId       |  ami-xxxxxxxxxxxxxxxxx         ||
        ||  ImportTaskId  |  import-ami-xxxxxxxxxxxxxxxxxx ||
        ||  LicenseType   |  AWS                           ||
        ||  Platform      |  Windows                       ||
        ||  Progress      |  58                            ||
        ||  Status        |  active                        ||
        ||  StatusMessage |  preparing ami                 ||
        |+----------------+--------------------------------+|
        |||                SnapshotDetails                |||
        ||+-----------------+-----------------------------+||
        |||  Description    |  First CLI task             |||
        |||  DeviceName     |  /dev/sda1                  |||
        |||  DiskImageSize  |  9692336128.0               |||
        |||  Format         |  VHD                        |||
        |||  SnapshotId     |  snap-xxxxxxxxxxxxxxxxx     |||
        |||  Status         |  completed                  |||
        ||+-----------------+-----------------------------+||
        ||||                 UserBucket                  ||||
        |||+------------+--------------------------------+|||
        ||||  S3Bucket  |  import-to-ec2-vhdbucket       ||||
        ||||  S3Key     |  xxxx.vhd                      ||||
        |||+------------+--------------------------------+|||
        

        なんだか、VHDの中身を勝手にWindows or Linuxって検知してくれるっぽい。

  • VHD → AMI変換完了後、AMIを使用してインスタンスを作成。

    • EC2のポータルから、マイAMIを使用して、インスタンスを作成できる。
    • なお、ログインの際のユーザ・アカウントは、元のVHDのアカウントを使用可能。

CloudEndure Migration

AWSの、高度に自動化されたクラウド移行ソリューションらしい。

, etc.

移行メモ: 元ページでは見出しのみで本文が無い(書きかけ)。

参考

その他

手順の例

Qiita

AWS


Tags: 移行, 開発環境, クラウド, AWS, 開発基盤

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally