« 9月はビッグデータ・データ分析月間!!〜2015年9月のAWS Black Belt Tech Webinarのご案内 | メイン | SAML2.0を用いたAPI/CLIへのフェデレーテッドアクセスに関する汎用的なソリューションの実装 »

あたらしいAmazon EC2のImport Cmdletsをつかってみる

Amazon EC2では最近、仮想マシンイメージとディスクをインポートするAPIのアップデートを提供しました。これらのあたらしいAPI、ImportImageとImportSnapshotはオリジナルのインポートAPIよりも高速かつ柔軟で、AWS Tools for Windows PowerShell(2.3.43.0以降)のImport-EC2ImageとImport-EC2Snapshotのふたつのコマンドレットから利用可能です。あたらしいコマンドレットをつかってインポートを実行する手順についてみていきましょう。

 

VMイメージをインポートする

イメージのEC2へのインポートは単にいくつかのステップで完了します。はじめに、ディスクイメージをAmazon S3にアップロードする必要があり、そして起動できるAmazon Machine Image(AMI)を生成するためのインポートのコマンドレットを実行します。Identity and Access Managementロールにくわえて、S3へのEC2アクセスを付与するために関連するロールポリシーを作成する必要があります。これは一回だけの操作になります。

 

インポートの前提条件

詳細はEC2 user guide topicにありますが、あたらしいインポートサービスAPIはIdentity and Access Managementロールとそれに関連付られたロールポリシーを、インポート中にAmazon S3にアップロードするイメージファイルにアクセスするために使用します。これらの設定は1回きりのオペレーション(同じバケットにそれぞれのインポート用のイメージファイルを保存すると仮定して)でPowerShellから以下のようにとても簡単におこなえます。

はじめに、ロールを作成します。EC2 import APIはインポートコマンドを実行するときにカスタムのロール名を指定しなければデフォルトで"vmimport"というロール名となります。シンプルさのため、このブログでは例としてその名前を使用します:

PS C:\> $importPolicyDocument = @"
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"",
         "Effect":"Allow",
         "Principal":{
            "Service":"vmie.amazonaws.com"
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "StringEquals":{
               "sts:ExternalId":"vmimport"
            }
         }
      }
   ]
}
"@

PS C:\> New-IAMRole -RoleName vmimport -AssumeRolePolicyDocument $importPolicyDocument

これでロールが作成されたので、EC2がイメージをふくむバケットにアクセスできるようなポリシーを追加します:

PS C:\> $bucketName = "myvmimportimages"
PS C:\> $rolePolicyDocument = @"
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket",
            "s3:GetBucketLocation"
         ],
         "Resource":[
            "arn:aws:s3:::$bucketName"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:GetObject"
         ],
         "Resource":[
            "arn:aws:s3:::$bucketName/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "ec2:ModifySnapshotAttribute",
            "ec2:CopySnapshot",
            "ec2:RegisterImage",
            "ec2:Describe*"
         ],
         "Resource":"*"
      }
   ]
}
"@

PS C:\> Write-IAMRolePolicy -RoleName vmimport -PolicyName vmimport -PolicyDocument $rolePolicyDocument

これで前提条件は完了です。将来的に異なるバケット(または追加のバケット)をつかいたい場合は、上記の名前を新規または追加のバケットの名前としてポリシーのヒア文字列を再構築してWrite-IAMRolePolicy コマンドレットを再実行します。

 

イメージをアップロードする

VMまたはディスクイメージはS3にアップロードされる必要があります。そのためには、Write-S3Objectコマンドレットを使用します。インポートしたいWindows Server 2012 R2イメージが単一のディスクで構成されているとします。このイメージはディスク上のC:\CustomWindows2012R2.vhdファイルに配置されています。変数からキャプチャして前提条件で利用したのとおなじバケット、"myvmimportimages"を使用しています:

PS C:\> Write-S3Object -BucketName $bucketName -File .\CustomWindows2012R2.vhd

コマンドレットにバケット内のオブジェクトを特定するための-Keyパラメータを指定していないため、デフォルトのファイル名が使用されます。インポートするVMイメージが複数のディスクイメージから構成されている場合は、すべてのイメージをアップロードするためにWrite-S3Objectを繰り返します。

これでイメージをインポートする準備ができました。

 

イメージをインポートする

VMイメージをインポートするコマンドレット、Import-EC2Imageはさまざまなパラメータでインポートの参考になる情報やS3のどのオブジェクトにEC2が操作するイメージをふくむかの詳細を表示することができます。カスタムのロール名(-RoleNameパラメータによって)を指定してEC2にS3オブジェクトへのアクセスを許可することもできます。この記事の前のほうではカスタムロールが指定されていない場合にEC2がデフォルト名を使用するロールとポリシーのセットアップのやりかたについて解説しましたので、このパラメータはここでは使用しません。

はじめに、ひとつ以上のImageDiskContainerインスタンスを作成する必要があります。複数のディスクイメージ(そして複数のS3オブジェクト)から構成されるVMをインポートする場合、複数のコンテナインスタンスを作成してそれらをコマンドレットに配列として渡します。この記事のサンプルイメージはひとつのイメージファイルだけをふくんでいます:

PS C:\> $windowsContainer = New-Object Amazon.EC2.Model.ImageDiskContainer
PS C:\> $windowsContainer.Format="VHD"

イメージファイルのS3ロケーションの詳細をネストされたオブジェクトで指定します:

PS C:\> $userBucket = New-Object Amazon.EC2.Model.UserBucket
PS C:\> $userBucket.S3Bucket = $bucketName
PS C:\> $userBucket.S3Key = "CustomWindows2012R2.vhd"
PS C:\> $windowsContainer.UserBucket = $userBucket

ディスクコンテナオブジェクトを構成して、インポートコマンドレットへのパラメータをセットアップすることができます。パラメータのひとつとして、ClientTokenは冪等性をもつトークンを渡すことができます - これは障害が発生してコマンドを再実行が必要な場合、EC2が新規インポートをスタートしないことを保証します:

PS C:\> $params = @{
    "ClientToken"="CustomWindows2012R2_" + (Get-Date)
    "Description"="My custom Windows 2012R2 image import"
    "Platform"="Windows"
    "LicenseType"="AWS"
}

これでインポートコマンドレットを実行できる準備ができました:

PS C:\> Import-EC2Image -DiskContainer $windowsContainer @params 

Architecture    : 
Description     : My custom Windows 2012R2 image import
Hypervisor      : 
ImageId         : 
ImportTaskId    : import-ami-abcdefgh
LicenseType     : AWS
Platform        : Windows
Progress        : 2
SnapshotDetails : {}
Status          : active
StatusMessage   : pending

それぞれのインポートタスクに上のように同じ情報をアウトプットするGet-EC2ImportImageTaskコマンドレットをつかって、インポート(またはインポート群)の進行状況を確認することができます。オプションで、ImportTaskIdパラメータの値を指定して特定のインポートをクエリすることができます。PowerShellパイプラインからのアウトプットを切り刻みたくない場合はフィルターのセットを指定することもできます。

インポートをやめるためには、Stop-EC2ImportTaskコマンドレットを使用します。このコマンドレットはVMイメージとディスクスナップショットのインポートの両方に使用できます。ストップするインポートのインポートタスクIDを受け付けます。

 

ディスクスナップショットをインポートする

追加のEBSボリュームをEC2インスタンスにアタッチするディスクスナップショットのインポートは常に単一のイメージをインポートするという以外はVMイメージのインポートにとてもよく似ています:

PS C:\> Write-S3Object -BucketName $bucketName -File .\DataDisk.vhd
PS C:\> $params = @{
    "ClientToken"="MySnapshotImport_" + (Get-Date)
    "Description"="My Data Disk Image"
    "DiskContainer_Description" = "Data disk import"
    "DiskContainer_Format" = "VHD"
    "DiskContainer_S3Bucket" = $bucketName
    "DiskContainer_S3Key" = "DataDisk.vhd"
}

PS C:\> Import-EC2Snapshot @params | fl

Description         : My Data Disk Image
ImportTaskId        : import-snap-abcdefg
SnapshotTaskDetail  : Amazon.EC2.Model.SnapshotTaskDetail

スナップショットのインポートの進行状況をチェックするためには、 Get-EC2ImportSnapshotTaskコマンドレットを使用しますが、これはGet-EC2ImportImageTaskにとてもよく似ています。前に述べたとおりスナップショットのインポートはStop-EC2ImportTaskを使用してストップできます。

 

廃止予定:オリジナルのImport Cmdlets

オリジナルのImport Cmdlets(Import-EC2Instance, Import-EC2Volume, Get-EC2ConversionTask および Stop-EC2ConversionTask)は廃止予定としてマークされています。これは将来のリリースで削除される予定です。

 

追加情報

あたらしいコマンドレットがつかいやすいと思っていただくことを期待しています!VMイメージとディスクスナップショットのAmazon EC2へのインポートについての追加情報は、オフィシャルAWSブログのこの記事を見てください。機能についてはEC2 documentationにアクセスしていただくこともできます。

(翻訳はSA渡邉が担当しました。原文はUsing the New Import Cmdlets for Amazon EC2

コメント

Twitter, Facebook

このブログの最新情報はTwitterFacebookでもお知らせしています。お気軽にフォローください。

2018年4 月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30