訳しながら理解していくPacker_AMI Builder(EBS backed)編

## はじめに
Packerのドキュメントって英語だし、英検3級レベルで英語力のない私にはつらい・・・
そして、一回(google翻訳を使って)訳しながら読んでまた忘れてまた(google翻訳を使って)訳すを繰り返すのをやめたい。
調べるときは全文を見ずに、必要な部分だけを見てたりするので、公式ドキュメントを訳しながら全体を理解していこうと思う。

英語読むのめんどくせーーーとなっている人の助けになればと思い公開した

今回は [AMI Builder(EBS backed)](https://www.packer.io/docs/builders/amazon-ebs.html)


## 注意事項
* 基本的にGoogle翻訳のまんまです。
* 一応、意味が分かるようには訳してるつもりですが、ちょいちょい意味分からない部分もあります。  
誤訳がある可能性があるので、最後はちゃんと公式ドキュメントを読みましょう
* 私の知りたい部分からやるので、訳す部分はバラバラになります。
* 公式ドキュメントに記載されていない部分(自分で調べた部分とか)は_italic_で記載しています。
* オプション部分は多いので、取り敢えず必須項目のみを記載

# AMI Builder (EBS backed)
Type: amazon-ebs

amazon-ebs Packer Builderは、EC2で使用するためのEBSボリュームに基づいてAmazon AMIを作成することができます。EBSバックアップインスタンスとインスタンスストアバックアップインスタンスの違いの詳細については、[EC2のドキュメントのルートデバイスの記憶域](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ComponentsAMIs.html#storage-for-the-root-device)を参照してください。

このビルダーは、ソースAMIからEC2インスタンスを起動し、実行中のマシンをプロビジョニングし、そのマシンからAMIを作成することによってAMIを構築します。これはすべて自分のAWSアカウントで行われます。ビルダーは、一時的な鍵ペア、セキュリティー・グループ・ルールなどを作成して、イメージの作成中にインスタンスに一時的にアクセスできるようにします。これにより、設定がかなり簡単になります。

ビルダーはAMIを管理しません。 AMIを作成してアカウントに保存したら、AMIの使用、削除などはあなた次第です。

>注意：一時リソースは、デフォルトですべてプレフィックスpackerで作成されます。これは、パッカーが操作できるセキュリティグループとキーのペアを制限したい場合に便利です。

## Configuration Reference
ビルダーには多くの構成オプションがあります。これらは、以下の2つのカテゴリに分類されます：必須パラメータとオプションパラメータ。各カテゴリ内で、使用可能な設定キーがアルファベット順に表示されます。

ここにリストされているオプションに加えて、[communicator](https://www.packer.io/docs/templates/communicator.html)をこのBuilder用に構成することができます。

### Rquired:

* access_key（string） - AWSとの通信に使用されるアクセスキー。[これを設定する方法を学ぶ](https://www.packer.io/docs/builders/amazon.html#specifying-amazon-credentials)
* ami_name (string) - AWSコンソールまたはAPIを使用してAMIを管理するときに表示される結果のAMIの名前。これは一意でなければなりません。これを一意にするには、タイムスタンプのような関数を使用します（詳細については、[template engine](https://www.packer.io/docs/templates/engine.html)を参照してください）。
* instance_type (string) - t2.smallなど、AMIを構築する際に使用するEC2インスタンスのタイプ。
* region (string) - EC2インスタンスを起動してAMIを作成する、us-east-1などの地域の名前。
* secret_key (string) - AWSとの通信に使用される秘密鍵。[これを設定する方法を学ぶ](https://www.packer.io/docs/builders/amazon.html#specifying-amazon-credentials)
* source_ami (string) - 新しく作成されたマシンのベースとして使用される初期AMI。代わりにsource_ami_filterを使用してこれを自動的に設定することができます。

### Optional:

中略(そのうち記載する)

## Basic Example
ここに基本的な例があります。アクセスキーを提供する必要があり、テンプレートの実行時に存在するイメージに応じてAMI IDを変更する必要があります。

```json
{
  "type": "amazon-ebs",
  "access_key": "YOUR KEY HERE",
  "secret_key": "YOUR SECRET KEY HERE",
  "region": "us-east-1",
  "source_ami": "ami-fce3c696",
  "instance_type": "t2.micro",
  "ssh_username": "ubuntu",
  "ami_name": "packer-quick-start {{timestamp}}"
}
```

>注意：Packerは、環境変数からアクセスキーと秘密のアクセスキーを読み取ることもできます。 Packerが探す環境変数の詳細については、上のセクションの設定リファレンスを参照してください。

AMI IDおよびインスタンスの種類と地域との関係の詳細については、AWS EC2 Documentation [for Linux](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/finding-an-ami.html)または[for Windows](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/finding-an-ami.html)を参照してください。

## Accessing the Instance to Debug
なんらかの理由でデバッグするためにインスタンスにアクセスする必要がある場合は、-debugフラグを指定してBuilderを実行してください。デバッグモードでは、Amazonビルダーは秘密鍵を現在のディレクトリに保存し、DNSまたはIP情報も出力します。この情報を使用して、実行中のインスタンスにアクセスできます。

## AMI Block Device Mappings Example
ここに、オプションのAMIブロックデバイスマッピングを使用する例を示します。 launch_block_device_mappingsの設定では、ビルド中にルートボリューム（/dev/sda）を40GBに拡張します（デフォルトの8GBから）。
ami_block_device_mappingsを使用するAWSは、AMIの新しいインスタンスをブートするときに、/ dev / sdbと/ dev / sdcのボリュームを追加します。

```json
{
  "type": "amazon-ebs",
  "access_key": "YOUR KEY HERE",
  "secret_key": "YOUR SECRET KEY HERE",
  "region": "us-east-1",
  "source_ami": "ami-fce3c696",
  "instance_type": "t2.micro",
  "ssh_username": "ubuntu",
  "ami_name": "packer-quick-start {{timestamp}}",
  "launch_block_device_mappings": [
    {
      "device_name": "/dev/sda1",
      "volume_size": 40,
      "volume_type": "gp2",
      "delete_on_termination": true
    }
  ],
  "ami_block_device_mappings": [
    {
      "device_name": "/dev/sdb",
      "virtual_name": "ephemeral0"
    },
    {
      "device_name": "/dev/sdc",
      "virtual_name": "ephemeral1"
    }
  ]
}
```

## Build template data
上記のテンプレートエンジンとしてマークされている設定ディレクティブでは、次の変数を使用できます。

* BuildRegion - packerがAMIを構築している地域（例えばeu-central-1）。
* SourceAMI - AMIを構築するために使用されたソースAMI ID（ami-a2412fcdなど）。
* SourceAMIName - AMIを構築するために使用されたソースAMI名（例えば、ubuntu / images / ebs-ssd / ubuntu-xenial-16.04-amd64-server-20180306）。
* SourceAMITags - ソースAMIタグ。これはmap [string]文字列オブジェクトです。

## Tag Example
オプションのAMIタグを使用した例を次に示します。これにより、完了したAMIにOS_VersionタグとReleaseタグが追加されます。これまでと同様に、アクセスキーを提供する必要があり、このテンプレートの実行時にどのイメージが存在するかに基づいてソースAMI IDを変更する必要があります。

```json
{
  "type": "amazon-ebs",
  "access_key": "YOUR KEY HERE",
  "secret_key": "YOUR SECRET KEY HERE",
  "region": "us-east-1",
  "source_ami": "ami-fce3c696",
  "instance_type": "t2.micro",
  "ssh_username": "ubuntu",
  "ami_name": "packer-quick-start {{timestamp}}",
  "tags": {
    "OS_Version": "Ubuntu",
    "Release": "Latest",
    "Base_AMI_Name": "{{ .SourceAMIName }}",
    "Extra": "{{ .SourceAMITags.TagName }}"
  }
}
```

>注：Packerは、ビルドされたイメージのソースとして、事前構築されたAMIを使用します。これらのソースAMIには、新しいイメージを構築するインスタンスの終了時に破棄されるようにフラグが立てられていないボリュームが含まれている場合があります。Packerは、ユーザーが終了後に残るように指定されていないすべての残りのvolumeをクリーンアップしようとします。これらのソースボリュームを保持する必要がある場合は、デバイスのlaunch_block_device_mappingsブロックでdelete_on_termination = falseを指定して、終了設定を上書きすることができます。

## Windows 2016 Sysprep Commands - For Amazon Windows AMIs Only
Amazon Windows 2016 AMIでは、Sysprepコマンドを実行する必要があります。これらのコマンドは、プロビジョナセクションに簡単に追加できます。

```json
{
    "type": "powershell",
    "inline": [
      "C:/ProgramData/Amazon/EC2-Windows/Launch/Scripts/InitializeInstance.ps1 -Schedule",
      "C:/ProgramData/Amazon/EC2-Windows/Launch/Scripts/SysprepInstance.ps1 -NoShutdown"
    ]
}
```