Amazon Linux 2 を VirtualBox でオンプレミスの開発環境に使用する


# 概要

- Amazon Linux 2 が発表
- EC2だけでなく、Docker や VMwareやVirtualBox、Hyper-V などの仮想環境で使用可能
- ローカルの開発環境で使いたい！


# Amazon Linux 2 とは

↓ここを参照
- [Amazon Linux 2](https://aws.amazon.com/amazon-linux-2/)
- [Amazon Linux 2 のご紹介](https://aws.amazon.com/jp/about-aws/whats-new/2017/12/introducing-amazon-linux-2/)

# イメージのダウンロード

↓ここから
[Amazon Linux 2 仮想マシンイメージ](https://cdn.amazonlinux.com/os-images/latest/)


# VirtualBox で Amazon Linux 2 起動する

## ポイント

ログインユーザーのパスワードやSSHの公開鍵は cloud-init で設定する

↓詳しくは
[README.cloud-init](https://cdn.amazonlinux.com/os-images/latest/README.cloud-init)


## cloud-init のファイルを格納したISOイメージを作成

AWS re:Invent 2020 で発表された AWS CloudShell を使用しました。 （2020/12/22 更新）
（ genisoimage が使用できればどこでも良いはず）

↓AWS CloudShell について
- [AWS CloudShell – AWS リソースへのコマンドラインアクセス](https://aws.amazon.com/jp/blogs/news/aws-cloudshell-command-line-access-to-aws-resources/)
- [AWS CloudShell | Browser-Based Shell](https://aws.amazon.com/jp/cloudshell/)

2017/12/17
Mac で cloud-init のファイルを格納したISOイメージを作成する方法を [その他](https://qiita.com/aibax/items/88e2ab6794cfc89ff997#mac-%E3%81%A7-cloud-init-%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%A0%BC%E7%B4%8D%E3%81%97%E3%81%9Fiso%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E4%BD%9C%E3%82%8B%E6%96%B9%E6%B3%95) に記載しました。


### genisoimage コマンドのインストール

```
$ sudo yum -y install genisoimage
```

### meta-data ファイルを作成

meta-data ファイルの内容
（ホスト名はお好みで）

```
local-hostname: localhost.localdomain
```

### user-data ファイルを作成

user-data ファイルの内容
（パスワードに `secret` を設定する場合）

```
#cloud-config

chpasswd:
  list: |
    ec2-user:secret
```
【注意】 `ec2-user:secret` の間にスペースを入れてはいけません

### ISOイメージの作成

```
$ genisoimage -output seed.iso -volid cidata -joliet -rock meta-data user-data
```

注意: ボリュームIDは `cidata` を指定


## VirtualBox に新規仮想マシンを追加

1. ハードディスクにダウンロードした Amazon Linux 2 のイメージを指定

![新規仮想マシンの追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18609/6a0cf25d-24bf-3243-d29f-5e1793cab7a9.png "新規仮想マシンの追加")

2. cloud-init のファイルを格納したISOイメージを起動ドライブにマウント

![ストレージ設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18609/f803d56d-e9e1-1543-fba0-4feffa76e223.png "ストレージ設定")


## VirtualBox の仮想マシンを起動

ユーザー `ec2-user` / パスワード `user-data で指定したパスワード` でログインできます


# その他

## Mac で cloud-init のファイルを格納したISOイメージを作る方法

公式のドキュメントでは cloud-init のファイルを格納したISOイメージを genisoimage で作成しています。

実際には以下の条件に合うイメージであれば利用可能です。
- ファイルシステムが ISO9660 (JOLIET) である
- ボリュームIDが cidata である

このイメージを Mac で作るときは hdiutil を使用します。

### hdiutil で cloud-init のファイルを格納したISOイメージを作成する

ディレクトリ `cidata` に、ファイル `user-data` と `meta-data` を格納する
（ディレクトリ名がボリュームIDになります）

```
.
└── cidata
    ├── meta-data
    └── user-data
```

hdiutil でISOイメージを作成する

```
$ hdiutil makehybrid -iso -joliet -o seed.iso cidata
```

ISOイメージがカレントディレクトリの seed.iso に出力されます。


## SSHで使用する公開鍵を user-data で登録する方法

↓設定方法のサンプル
[Cloud config examples — cloud-init 20.4 documentation > Configure instances SSH keys](https://cloudinit.readthedocs.io/en/latest/topics/examples.html?highlight=cidata#configure-instances-ssh-keys)


# まとめ

Amazon Linux がオフラインの開発にも使用できるようになりました。
~~現在はまだ LTS Candidate ということなので、LTS バージョンがリリースされるのが楽しみです。~~
【2018/6/27更新】LTS バージョンがリリースされました！
[Announcing Amazon Linux 2 with Long Term Support](https://aws.amazon.com/jp/about-aws/whats-new/2018/06/announcing-amazon-linux-2-with-long-term-support/)

# つづき

Amazon Linux 2 を Vagrant で使用するための Base Box の作り方を書きました
[Amazon Linux 2 の Vagrant Base Box を作成する](https://qiita.com/aibax/items/7fd9a874cb7e88f95488)


# 参考

- [Amazon Linux 2](https://aws.amazon.com/amazon-linux-2/)

- [Amazon Linux 2 のご紹介](https://aws.amazon.com/jp/about-aws/whats-new/2017/12/introducing-amazon-linux-2/)

- [【速報】AWS向けの新ディストリビューション Amazon Linux 2 を発表！ ｜ Developers.IO](https://dev.classmethod.jp/cloud/aws/amazon-linux-2-now-available/)