Packerを使ったAMIの構築

AWS運用自動化サービス「Cloud Automator」
全国のPacker愛好家の皆様こんにちは。 技術四課 岩本です。
早速ではござますが、Packerを使って、AMIの構築自動化をやってみました&作ってみました。

Packerとは?

Packerとは、HashiCorp社が提供するマシンイメージの自動生成・管理を行うコマンドライン・ツールです。
Templateと呼ばれるテンプレートファイルから、マシンイメージの作成が行えます。
AWS以外にも、HyperV、GCP、DigitalOceanやVMwareなどにも対応しています。
詳しくは、こちらをご覧ください。

出来上がったものがこちら。

出来上がったものがこちらになります

これは何?

  • Packerを使ったEC2(RHRL7)の構築テンプレートです。

何ができるの?

  • Cloudinitの設定ファイルを置き換えます。
    • ロケールの変更
    • タイムゾーンの変更
    • 詳細はcloud-init_cfg/jp.cfgを参照
  • 指定した設定ファイルを含めた、AMIのカスタムイメージが作成されます。
  • 実行AWSアカウント内にAMIが作成され、作成された指定した別AWSアカウントに(プライベートイメージとして)共有されます
  • EBSは、20GBのルートデバイスと、20GBの追加デバイスが作成されます。

Packerの仕組み(概要)

Templateと呼ばれるテンプレートファイルをJSON形式で定義します。
AWSの場合、Templateを元に、EC2インスタンスが立ち上がり、定義されたコマンド・操作が実行されます。
EC2インスタンスを元にAMIが作成され、起動されたEC2は削除されます。
EC2起動時に利用されるキーペアも自動的に作成され、AMI削除後には自動的に削除されます。
Packerを利用する事で、上記の一連の流れを自動化できます。

使い方

事前準備

  • Packerのインストール
  • Homebrewの場合

パラメータの指定

  • 利用環境に合わせてsetup.jsonvariablesセクションの各値を書き換えます。
  • name
    • 作成されるAMI名です。
  • region
    • 作成するAWSリージョン
  • ami-id
    • 元となるAMI-ID
  • sg-id
    • AMIの元となるEC2が起動時に利用するセキュリティグループ
  • vac-id
    • AMIの元となるEC2が起動時に配置されるVPC
  • subnet-id
    • AMIの元となるEC2が起動時に配置されるサブネット
  • cloud-init_cfg
    • cloud-init_cfg/以下にあるCloudinit用ファイル
  • shared-aws-account
    • AMI作成後に共有するAWSアカウント

実行

  • バリデーションチェック
  • 実行
    • AWS CLIにて、アクセスキー/シークレットキーが設定されている事を想定
  • 上記の様にコマンドを実行すると、順にタスクが実行され出来上がったAMIのIDが表示されます。

まとめ

EC2内(OS以上)の構成を行う場合、Ansible、Chefなど様々なプロビジョニングツールがあります。
弊社の様に様々なお客様環境を作成する場合、お客様要件によっては完全クローズドのAWS環境など、OSへの外部からの接続が行えない場合や、
インターネットへの接続は別途Proxyの設定が必要となる場合があります。
Packerの機能を用いれば、別AWSアカウント上でAMIを作成し、Packer内で別AWSアカウントへの共有まで行えます。
事前に必要なパッケージやアップデートを適用したEC2を、クローズドな環境でも構築できます。

AWS運用自動化サービス「Cloud Automator」