Amazon Linux2を仮想基盤上で実行する


#はじめに
AWSの勉強をしている中で手元でAmazon Linux2の検証を行いたいと思い、以下の資料を元に設定方法をまとめました。なお、今回はESXiを使用していますが、KVMやVartualBoxなどの他の仮想プラットフォームで実施する場合も基本的な流れは一緒ですので参考にして頂けますと幸いです。

参考：[Amazon Linux 2 を仮想マシンとしてオンプレミスで実行する](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/amazon-linux-2-virtual-machine.html)

#作業手順
ざっくりとした作業の流れは以下の通りです。
・seed.iso起動イメージの作成
・Amazon Linux2の仮想マシンイメージをダウンロード
・新しい仮想マシンを起動する

##用意するもの
・ESXiサーバー
　Amazon Linux2を稼働させるESXiサーバー
　VMware Workstation 14 Player上にESXi6.5をネステッド環境にして用意。

・Amazon Linux2の仮想マシンイメージファイル
　最新のファイルは[こちら](https://cdn.amazonlinux.com/os-images/2.0.20180810/vmware/)からダウンロード可能。

・isoイメージを作成するための環境
　起動用のisoファイルを作成するために必要になります。
　今回はCentOS7.5を使用しましたが`genisoimage`コマンドが使えれば何でもOKです。

##seed.iso起動イメージの準備
ES2のインスタンスを作成する際の「高度な詳細」で指定するユーザーデータにあたる部分です。仮想基盤上のイメージに適用するために、isoイメージで作成します。

###１．環境準備
作業環境(CentOS7.5)でisoイメージを作成するために必要となるパッケージを準備します。
以下のコマンドで`genisoimage`を導入します。
`yum install genisoimage`

次に作業用のディレクトリを作成します。
`mkdir seedconfig`
これで環境準備は完了です。

###２．meta-dataの作成
seedconfigディレクトリ配下でmeta-dataファイルを作成します。

```yml:meta-data
local-hostname: [ホスト名]

#network-interfaces: |
#  iface eth0 inet static
#  address 192.168.xx.xx
#  network 192.168.xx.0
#  netmask 255.255.255.0
#  broadcast 192.168.xx.255
#  gateway 192.168.xx.2
```
今回はホスト名のみ指定し、IPアドレスはDHCPで自動で割り振るようにします。
Networkを静的に指定する場合は、network-interfaces以下のコメントを外してください[^1]。

[^1]: 上記内容だとonbootが設定されていないため、起動時にeth0が自動起動しません。OS起動後に手動で起動させるか、`/etc/sysconfig/network-scripts/ifcfg-eth0`のonbootをyesに修正してください。

###３．user-dataの作成
同じくseedconfigディレクトリ配下でuser-dataファイルを作成します。

```yml:user-data
#cloud-config
users:
  - default
chpasswd:
  list: |
    ec2-user:[パスワード]
ssh_pwauth: True
locale: ja_JP.UTF-8

runcmd:
  - [ cp, /usr/share/zoneinfo/Asia/Tokyo, /etc/localtime]
```
ここではデフォルトで必要と思われる以下の項目を設定しています。
必要に応じて、[こちら](https://cloudinit.readthedocs.io/en/latest/index.html "Cloud-Init")を参考に追記修正を行ってください。
・ec2-userの作成
・ec2-userのパスワード設定
・SSH接続時のパスワードでの接続許可
・ロケールを「ja_JP.UTF-8」に設定
・タイムゾーンを「Asia/Tokyo」にする


###４．イメージファイルの作成
seedconfigディレクトリ配下で以下のコマンドを実行してISOファイルを作成します。
`genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data`

```:実行例
[root@localhost]# genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data
I: -input-charset not specified, using utf-8 (detected in locale settings)
Total translation table size: 0
Total rockridge attributes bytes: 331
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 0
183 extents written (0 MB)
[root@localhost]#
```
カレントディレクトリにseed.isoができていれば成功です。
作成したイメージファイルはSCPなどで手元に持ってきてください。

###５．ESXiにイメージファイルをアップロードする
３で作成したseed.isoをESXi上にアップロードします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/c02df7a1-0814-a7bf-fb31-c809a78c3548.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/e12ff91b-2223-62e6-ea4e-5d3d05199e18.png)

無事アップロードができました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/3feee44d-d64f-e425-cff4-b514a697539f.png)

##Amazon Linux2の仮想マシンイメージをダウンロードする
起動に使用するVMware用のイメージを[こちら](https://cdn.amazonlinux.com/os-images/2.0.20180810/vmware/)からダウンロードします。
なお、リンクが切れている場合は[「Amazon Linux 2 を仮想マシンとしてオンプレミスで実行する」](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/amazon-linux-2-virtual-machine.html)より最新のイメージファイルのリンクを探してください。

##新しい仮想マシンを起動する
これで準備は完了しましたので、仮想マシンの起動します。

###１．仮想マシンの作成・登録
ESXiのナビゲータビューより、仮想マシン-仮想マシンの作成・登録を押下してウィザードをスタートさせます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/530d1bf3-21a9-5604-6653-fcf727503e80.png)

作成タイプは「OVFファイルまたはOVAファイルからの仮想マシンをデプロイ」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/3c284aad-c046-da84-917b-eddc29409e03.png)

こちらの画面でダウンロードしたVMware用イメージを登録します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/9d1bd799-6441-d31a-277c-923c57eab49b.png)

その他の項目はデフォルトで問題ないです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/935a8e8d-0a53-d1f7-8732-61aa1c23ca80.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/97b18025-ec68-4d1d-06a8-b58d6df7632c.png)

最後に「完了」を押下します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/771439e1-d1bd-4a24-144f-505f757da95f.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/624bd56c-a689-f251-36de-cee4d4201653.png)

タスクが全て完了すれば終了です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/82a54d51-eb81-1ce4-f6af-313301c4f641.png)

この時点では、ホスト名やユーザーの登録ができていないため、ログインができません。続けて２を実施します。

###２．Amazon Linux2とseed.isoの紐づけ
Amazon Linux2をseed.isoから起動するように設定します。

まずは、１で起動しているOSを停止させます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/6541e697-2676-abee-b23e-96d0391863f1.png)


次に設定の編集で「その他のデバイスの追加」から「CD/DVDドライブ」を追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/663cec20-3c24-3ea3-000f-ef7f558aff0c.png)

新規追加されたCD/DVDドライブより「データストアISOファイル」を選択。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/49dbc920-c1f6-d079-c04c-6e1f039ed66e.png)

先ほどアップロードしたseed.isoをマウントします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/d7ebead3-f59c-cddc-6a65-b6112a454eb9.png)



最後に「仮想マシンオプション」-「起動オプション」より、「強制的にBIOSセットアップ」の項目にチェックを入れて「保存」すれば準備完了です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/1f8a6466-4ecb-861b-7775-2181e376d034.png)


###３．OSの起動

パワーオンボタンでOSを起動します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/653dc162-e7b9-ad3c-2acb-ad7680243d2d.png)

起動するとまずBIOS画面が表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/fe4f8320-f21d-9054-7993-61e6b003e83b.png)

カーソルキーでBootタブまで移動します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/7c57f472-3d15-2db0-98fc-739801bf46d0.png)

起動順番を修正して「CD-ROM Drive」を先頭にします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/84257b00-7b13-2b40-1b91-d456c45bedba.png)

F10キーでSaveした上でBIOS画面から抜けます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/76ab5937-ff3b-b619-6812-9f5eb45644d8.png)

OSが起動するのを待ちます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/995749f9-ae6f-3e77-b9a0-13303d70f031.png)

ログイン画面が表示されたら、ec2-userでログインします。
パスワードはuser-dataで設定したものを使用してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/f12c1456-24d3-772f-a385-f60a0372a092.png)

##SSH接続確認
IPとパスワードでSSH接続を行います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269326/6645cc05-b0ea-9906-19d6-ed11e101beaf.png)

無事ログインできました。

```
Last login: Thu Sep 00 00:00:00 2018 from xxx.xxx.xxx.xxx

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
5 package(s) needed for security, out of 344 available
Run "sudo yum update" to apply all updates.
[ec2-user@amazonlinux ~]$
```

#おわりに
今回の作業ですが、cloud-Initについての知見が乏しいため、seed.isoの作成で大いにハマってしまいました。記述した内容について、もっとこうした方が良いという意見がございましたコメント頂けますと助かります。

参考：[Amazon Linux 2 を仮想マシンとしてオンプレミスで実行する](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/amazon-linux-2-virtual-machine.html)