Getting Start を見ながらやってみる。
環境・前提
Docker for Windows で hashicorp/packer のイメージを使う。
- Host OS: Windows 10 Pro
- image: hashicorp/packer:1.3.1
- docker: Docker version 18.06.1-ce, build e68fc7a
AWS のアカウントは、作成だけした状態からスタート。
必要パッケージのインストール
docker pull するだけ。
docker pull hashicorp/packer:1.3.1
AWS の環境設定
Packer で AWS のリソースをいじるためには、 いろいろと権限が必要。
下記 3 つを作成する。
- ポリシー
- グループ
- ユーザー
ポリシーの作成
必要な権限は Amazon AMI Builder のドキュメントに記載されている ので、この JSON をコピーしてポリシーを作る。
- AWS マネジメントコンソール -> サービス -> IAM -> ポリシー
- ポリシーの作成 -> JSON タブを開く -> 前述の JSON 定義を貼り付け -> Review policy
- 名前、説明を記述 -> Create policy
- ポリシー名:
packer-basic
- ポリシー名:
グループの作成
- AWS マネジメントコンソール -> サービス -> IAM -> グループ
- 新しいグループの作成 -> グループ名入力 -> 次のステップ
- グループ名:
Packer
- グループ名:
packer-basic
のポリシーをアタッチ -> 次のステップ- グループの作成
ユーザーの作成
- AWS マネジメントコンソール -> サービス -> IAM -> ユーザー
- ユーザーを追加 -> ユーザー名、アクセスの種類を入力 -> 次のステップ
- ユーザー名:
mikoto2000-packer
- アクセスの種類: プログラムによるアクセス
- ユーザー名:
- アクセス許可の設定 -> 次のステップ
- ユーザーをグループに追加を選択
- グループ
Packer
を追加する
- ユーザーの作成
作成直後に表示される、 アクセスキー ID
と シークレットアクセスキー
をメモしておく。
イメージ作成用テンプレートの作成
ベーステンプレートファイルの作成
とりあえず、 Getting Start の JSON をまるっとコピーし、 getting_start.json
として保存。
{
"variables": {
"aws_access_key": "",
"aws_secret_key": ""
},
"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "us-east-1",
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*",
"root-device-type": "ebs"
},
"owners": ["099720109477"],
"most_recent": true
},
"instance_type": "t2.micro",
"ssh_username": "ubuntu",
"ami_name": "packer-example {{timestamp}}"
}]
}
- 他のイメージを元に作成したい場合には、
builders/source_ami_filter/filters/
の各項目に、AWS マネジメントコンソール -> AMI
からイメージを検索したときに出てくる情報を入れればよいらしい。 - 別リージョンに作成したい場合は、
builders/region
を ここ のどれかにすればよいらしい。
変数ファイルの作成
キー類をハードコードするのが嫌だったのでやり方を探したら、 別 JSON に記載する方法 があったのでそれを採用することにした。
AWS_ACCESS_KEY, AWS_SECRET_KEY はそれぞれ、ユーザーの作成 で確認した アクセスキー ID
と シークレットアクセスキー
を設定する。
{
"aws_access_key": "AWS_ACCESS_KEY",
"aws_secret_key": "AWS_SECRET_KEY"
}
作ったファイルの検証
hashicorp/Packe
のイメージを起動。
docker run -v "\PATH\TO\WORK_DIR:/work" --workdir "/work" --entrypoint='' -it --rm hashicorp/packer:1.3.1 /bin/bash
コンテナ内で次のコマンドを実行する。
packer validate -var-file=./variables.json getting_start.json
成功なら Template validated successfully.
と表示される。
イメージのビルド
引き続き、コンテナ内で次のコマンドを実行する。
packer build -var-file=./variables.json getting_start.json
最終的に下記のような成功ログが表示されるはず。 数分かかった。
==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:
us-east-1: ami-0acbfa688dc2e0b4b
- Packer Builder というインスタンスを作る
source_ami_filter
の条件に引っかかったものを取得・展開- 「2.」でとってきたものをイメージ化
みたいなことをしているっぽい。
完成したイメージは、 AWS マネジメントコンソール -> サービス -> EC2 -> AMI
で確認できる。
動作確認
作成したイメージからインスタンス作成ができることを確認する。
インスタンス作成
- AWS マネジメントコンソール -> サービス -> EC2 -> インスタンス
- インスタンスの作成
- マイ AMI -> 今回作った AMI を選択
t2.small
を選択 -> 確認と作成- 作成
- キーペアの作成
- 新しいキーペアの作成を選択
- キーペア名:
mikoto2000
- キーペア名:
- キーペアのダウンロード
~/.ssh/mikoto2000.pem
に保存
- 新しいキーペアの作成を選択
- インスタンスの作成
数分待つと、 AWS マネジメントコンソール -> サービス -> EC2 -> インスタンス
に今作ったインスタンスが作成され、ステータスチェックがパスしていることが確認できる。
SSH 接続
インスタンス情報の パブリック DNS (IPv4)
のアドレスに、 Tera Term Pro で接続する。
- User name: ubuntu
- Use RSA/DSA/ECDSA/ED25519 key to log in を選択し、鍵に
~/.ssh/mikoto2000.pem
を指定
はい。
このあと、イメージのカスタマイズが必要であれば provisioners
でがちゃがちゃする感じなのかな?
後片付け
これまでの手順で、インスタンス・AMI・スナップショットが作成されているので、それぞれ削除すること。 削除しないと課金されるはず。
それぞれは次の場所で削除可能。
- インスタンス : AWS マネジメントコンソール -> サービス -> EC2 -> インスタンス
- AMI : AWS マネジメントコンソール -> サービス -> EC2 -> AMI
- スナップショット : AWS マネジメントコンソール -> サービス -> EC2 -> スナップショット
以上。
0 件のコメント:
コメントを投稿