Amazon Web Services(AWS)は依然として最もよく使われているクラウドプラットフォームです。Packer は、ビルドを AWS にインポートしてAmazon Machine Images(AMI)に変換する優れた統合機能を提供します。
Hashicorp の Packer は、複数のオペレーティングシステムプラットフォーム用のマシンイメージを作成し、複数の仮想化およびクラウドプラットフォームでそれらを使えるようにするユニークな機能を備えています。Packer は、どのプロバイダのサーバーが稼動している環境でもOSを一貫性を保って管理できる有用なツールです。
Packer の使い方
実際に Packer と AWS を使って AMI を最初からビルドすることもできますが、他のツールを使って、例えば Vagrant/Virtualbox のマシンイメージをビルドし、その後、OVFイメージを、Packer ポストプロセッサを使ってエクスポートして、最終的に AMI に変換することもできます。業務で AWS 以外のプラットフォームを使用している場合には、後者が適切でしょう。
Packer では、OVF を AWS で使うのに、まず OVF を S3バケットにアップロードし、AWS API を呼び出して AMI に変換します。
AWSの前提条件
AWS には、Packer が OVA をアップロードして変換するのに必要な前提条件があります。詳細はこのブログの範囲外ですが、S3バケットの設定、サービスロールの作成、ポリシーの設定などで、AWS の経験があればそれほど難しくありません。
Packer のAWS設定
Packer でビルドし、AWS にエクスポートするためのいくつかの設定オプションがあります。設定オプションは、Packer のリファレンスページにあります。必要なオプションは、AWS アクセスキー、秘密キー、リージョン、S3バケット名です。API を呼び出したら、その残りの作業は Packer がバックグラウンドで行います。
さらに、AMI ディスクリプション、ライセンスタイプ、AMI 名などを設定したり、AMI にタグを追加したりすることができます。
Packer テンプレートの例
下に Packer テンプレートの例を示します。ソースの OVF ファイルは、"box.ovf" です。ビルダーのタイプは "virtualbox-ovf" で、既存の ovf ファイルを使用する必要があります。このテンプレートには Packer プロビジョナーは設定されていませんが、構成の設定やソフトウェアのインストールなど、OVF に何らかのプロビジョニングを行うことも可能です。ビルダーは実際は別の ovf ファイルにエクスポートされます。その後、”amazon-import” ポストプロセッサが実行され、エクスポートされた ovf が S3バケットに追加されてから、AMI に変換されます。
{
"builders": [
{
"type": "virtualbox-ovf",
"source_path": "box.ovf",
"ssh_username": "username",
"ssh_password": "password",
"format": "ova",
"shutdown_command": "echo 'packer' | sudo -S shutdown -P now"
}
],
"post-processors": [
{
"type": "amazon-import",
"access_key": "MyAccessKey",
"secret_key": "THISISSECRET",
"region": "us-east-1",
"s3_bucket_name": "test.domain.com"
}
]
}
これを見てわかるように、AWS アクセスキー、秘密キー、リージョン、S3バケット名が設定されています。アップロードして AWS AMI を作成するには、このシンプルな Packer テンプレートで十分です。
次が、packer build で実行した結果です。
PS C:\temp\aws-test> packer build .\centos.json
virtualbox-ovf output will be in this color.
==> virtualbox-ovf: Downloading or copying Guest additions
virtualbox-ovf: Downloading or copying: file:///C:/Program%20Files/Oracle/VirtualBox/VBoxGuestAdditions.iso
==> virtualbox-ovf: Downloading or copying OVF/OVA
virtualbox-ovf: Downloading or copying: file:///C:/temp/aws-test/box.ovf
==> virtualbox-ovf: Importing VM: C:/temp/aws-test/box.ovf
==> virtualbox-ovf: Creating forwarded port mapping for communicator (SSH, WinRM, etc) (host port 4085)
==> virtualbox-ovf: Starting the virtual machine...
==> virtualbox-ovf: Waiting 10s for boot...
==> virtualbox-ovf: Typing the boot command...
==> virtualbox-ovf: Waiting for SSH to become available...
==> virtualbox-ovf: Connected to SSH!
==> virtualbox-ovf: Uploading VirtualBox version info (5.2.8)
==> virtualbox-ovf: Uploading VirtualBox guest additions ISO...
==> virtualbox-ovf: Gracefully halting virtual machine...
==> virtualbox-ovf: Preparing to export machine...
virtualbox-ovf: Deleting forwarded port mapping for the communicator (SSH, WinRM, etc) (host port 4085)
==> virtualbox-ovf: Exporting virtual machine...
virtualbox-ovf: Executing: export packer-virtualbox-ovf-1535560689 --output output-virtualbox-ovf\packer-virtualbox-ovf-1535560689.ova
==> virtualbox-ovf: Deregistering and deleting imported VM...
==> virtualbox-ovf: Running post-processor: amazon-import
virtualbox-ovf (amazon-import): Uploading output-virtualbox-ovf\packer-virtualbox-ovf-1535560689.ova to s3://test.domain.com/packer-import-1535560689.ova
virtualbox-ovf (amazon-import): Completed upload of output-virtualbox-ovf\packer-virtualbox-ovf-1535560689.ova to s3://test.domain.com /packer-import-1535560689.ova
virtualbox-ovf (amazon-import): Started import of s3://test.domain.com /packer-import-1535560689.ova, task id import-ami-007c6ea5927dab5a7
virtualbox-ovf (amazon-import): Waiting for task import-ami-007c6ea5927dab5a7 to complete (may take a while)
virtualbox-ovf (amazon-import): Complete
Dan Franciscus
Dan Franciscus is a systems engineer and VMware Certified Professional (VCP) specializing in VMware, PowerShell, and other Microsoft-based technologies. You can reach Dan at his blog (http://www.winsysblog.com/) or Twitter at @dan_franciscus.