

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 例 9: Amazon EC2 インスタンスの使用
<a name="cookbooks-101-basics-ec2"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

ここまでは、インスタンスを VirtualBox でローカルに実行していました。これは迅速かつ簡単ですが、最終的には Amazon EC2 インスタンスでレシピをテストすることになります。特に Amazon Linux でのレシピの実行する場合は Amazon EC2 でのみ可能です。予備的な実装やテストには CentOS などのような類似システムを使用できますが、Amazon Linux のレシピを完全にテストするには、Amazon EC2 インスタンスを使用するしかありません。

このトピックでは Amazon EC2 インスタンスでレシピを実行する方法を説明します。前述のセクションとほとんど同じ方法で Test Kitchen や Vagrant を使用しますが、2 つ違いがあります。
+ ドライバは Vagrant ではなく [https://rubygems.org/gems/kitchen-ec2](https://rubygems.org/gems/kitchen-ec2) です。
+ クックブックの `.kitchen.yml` ファイルには、Amazon EC2 インスタンスの起動に必要な情報で設定する必要があります。

**注記**  
代替手段として、`vagrant-aws` Vagrant プラグインを使用する方法があります。詳細については、「[Vagrant AWS プロバイダ](https://github.com/mitchellh/vagrant-aws)」を参照してください。

Amazon EC2 インスタンスを作成するには、AWS 認証情報が必要です。AWS アカウントを持っていない場合は、以下のように取得できます。

## にサインアップする AWS アカウント
<a name="sign-up-for-aws"></a>

がない場合は AWS アカウント、次の手順を実行して作成します。

**にサインアップするには AWS アカウント**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup) を開きます。

1. オンラインの手順に従います。

   サインアップ手順の一環として、電話またはテキストメッセージを受け取り、電話キーパッドで検証コードを入力します。

   にサインアップすると AWS アカウント、 *AWS アカウントのルートユーザー* が作成されます。ルートユーザーには、アカウントのすべての AWS のサービス とリソースへのアクセス権があります。セキュリティベストプラクティスとして、ユーザーに管理アクセス権を割り当て、[ルートユーザーアクセスが必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)の実行にはルートユーザーのみを使用するようにしてください。

AWS サインアッププロセスが完了すると、 から確認メールが送信されます。[https://aws.amazon.com/](https://aws.amazon.com/) の **[マイアカウント]** をクリックして、いつでもアカウントの現在のアクティビティを表示し、アカウントを管理することができます。

## 管理アクセスを持つユーザーを作成する
<a name="create-an-admin"></a>

にサインアップしたら AWS アカウント、日常的なタスクにルートユーザーを使用しないように AWS アカウントのルートユーザー、 を保護し AWS IAM アイデンティティセンター、 を有効にして管理ユーザーを作成します。

**を保護する AWS アカウントのルートユーザー**

1.  **ルートユーザー**を選択し、 AWS アカウント E メールアドレスを入力して、アカウント所有者[AWS マネジメントコンソール](https://console.aws.amazon.com/)として にサインインします。次のページでパスワードを入力します。

   ルートユーザーを使用してサインインする方法については、「*AWS サインイン ユーザーガイド*」の「[ルートユーザーとしてサインインする](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)」を参照してください。

1. ルートユーザーの多要素認証 (MFA) を有効にします。

   手順については、*IAM* [ユーザーガイドの AWS アカウント 「ルートユーザー (コンソール) の仮想 MFA デバイス](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)を有効にする」を参照してください。

**管理アクセスを持つユーザーを作成する**

1. IAM アイデンティティセンターを有効にします。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[AWS IAM アイデンティティセンターの有効化](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html)」を参照してください。

1. IAM アイデンティティセンターで、ユーザーに管理アクセスを付与します。

   を ID ソース IAM アイデンティティセンターディレクトリ として使用する方法のチュートリアルについては、「 *AWS IAM アイデンティティセンター ユーザーガイド*」の[「デフォルトを使用してユーザーアクセスを設定する IAM アイデンティティセンターディレクトリ](https://docs.aws.amazon.com/singlesignon/latest/userguide/quick-start-default-idc.html)」を参照してください。

**管理アクセス権を持つユーザーとしてサインインする**
+ IAM アイデンティティセンターのユーザーとしてサインインするには、IAM アイデンティティセンターのユーザーの作成時に E メールアドレスに送信されたサインイン URL を使用します。

  IAM Identity Center ユーザーを使用してサインインする方法については、*AWS サインイン 「 ユーザーガイド*[」の AWS 「 アクセスポータルにサインイン](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)する」を参照してください。

**追加のユーザーにアクセス権を割り当てる**

1. IAM アイデンティティセンターで、最小特権のアクセス許可を適用するというベストプラクティスに従ったアクセス許可セットを作成します。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[アクセス許可セットを作成する](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-create-a-permission-set.html)」を参照してください。

1. グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。

   手順については、「*AWS IAM アイデンティティセンター ユーザーガイド*」の「[グループを追加する](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html)」を参照してください。

Amazon EC2 にアクセスするためのアクセス許可を持つ [IAM ユーザーを作成し](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)、ユーザーのアクセスキーとシークレットキーをワークステーション上の安全な場所に保存する必要があります。Test Kitchen はインスタンスを作成するためにこれらの認証情報を使用します。Test Kitchen に認証情報を提供するには、ワークステーションの以下の環境変数にキーを割り当てることをお勧めします。

**警告**  
IAM ユーザーは長期認証情報を保有するため、セキュリティ上のリスクが生じます。このリスクを軽減するために、これらのユーザーにはタスクの実行に必要な権限のみを付与し、不要になったユーザーは削除することをお勧めします。
+ AWS\$1ACCESS\$1KEY – ユーザーのアクセスキー。 のようになりますAKIAIOSFODNN7EXAMPLE。
+ AWS\$1SECRET\$1KEY – ユーザーのシークレットキー。 のようになりますwJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY。

この手法によって、たとえば認証情報を含むプロジェクトを公開リポジトリにアップロードしてしまうなど不慮の事故でアカウントが侵害される機会が減ります。

**クックブックをセットアップするには**

1. `kitchen-ec2` ドライバを使用するには、`ruby-dev`パッケージがシステムにインストールされている必要があります。以下の例のコマンドで `aptitude` を使用して Ubuntu システムでパッケージをインストールする方法を説明します。

   ```
   sudo aptitude install ruby1.9.1-dev 
   ```

1. `kitchen-ec2` ドライバは gem です。以下のようにインストールします。

   ```
   gem install kitchen-ec2
   ```

   ワークステーションによっては、このコマンドで `sudo` が必要になる場合があります。また、[RVM](https://rvm.io/) などの Ruby 環境マネージャを使用することもできます。この手順は、`kitchen-ec2` ドライバーのバージョン 0.8.0 でテスト済みですが、より新しいバージョンがあります。[特定のバージョン](https://rubygems.org/gems/kitchen-ec2/versions)をインストールするには、`gem install kitchen-ec2 -v <version number>` を実行します。

1. Test Kitchen がインスタンスへの接続に使用できる Amazon EC2 SSH キーペアを指定する必要があります。Amazon EC2 キーペアがない場合、作成方法の詳細については、[「Amazon EC2 キーペア」](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)(Amazon EC2 キーペア) を参照してください。キーペアがインスタンスと同じ AWS リージョンに属している必要があることに注意してください。この例では、米国西部 (北カリフォルニア) を使用します。

   キーペアを選択したら、`opsworks_cookbooks` のサブディレクトリ `ec2_keys` を作成し、そのサブディレクトリにキーペアのプライベートキー (`.pem`) ファイルをコピーします。`ec2_keys` にプライベートキーを配置するのはコードをほんの少し簡素化する便宜上のものです。システムのどこに配置してもかまいません。

1. `createdir-ec2` という名前の `opsworks_cookbooks` のサブディレクトリを作成し、そのディレクトリに移動します。

1. `createdir-ec2` に、次のコンテンツを含む `metadata.rb` ファイルを追加します。

   ```
   name "createdir-ec2"
   version "0.1.0"
   ```

1. 「[例 1: パッケージのインストール](cookbooks-101-basics-packages.md)」に説明したように Test Kitchen を初期化します。以下のセクションでは `.kitchen.yml` を設定する方法を説明します。Amazon EC2 インスタンスでは際立って複雑です。

1. `createdir-ec2` に `recipes` サブディレクトリを追加します。

## Amazon EC2 用の .kitchen.yml の設定
<a name="w2ab1c14c71b9c15c17c31c37"></a>

`kitchen-ec2` ドライバが適切に設定された Amazon EC2 インスタンスを起動するために必要な情報を使用して `.kitchen.yml` を設定します。以下に示しているのは、米国西部 (北カリフォルニア) リージョンにある Amazon Linux インスタンス用の `.kitchen.yml` ファイルの例です。

```
driver:
  name: ec2
  aws_ssh_key_id: US-East1
  region: us-west-1
  availability_zone: us-west-1c
  require_chef_omnibus: true
  security_group_ids: sg........
  subnet_id: subnet-.........
  associate_public_ip: true
  interface: dns

provisioner:
  name: chef_solo

platforms:
  -name: amazon
  driver:
    image_id: ami-xxxxxxxx
  transport:
    username: ec2-user
    ssh_key: ../ec2_keys/US-East1.pem

suites:
  - name: default
    run_list:
      - recipe[createdir-ec2::default]
    attributes:
```

`provisioner` および `suites` セクションにデフォルト設定を使用できますが、デフォルトの `driver` と `platforms` の設定は変更する必要があります。この例では、最小限の設定リストを使用して残りはデフォルト値を受け入れます。`kitchen-ec2` 設定の詳細なリストについては、「[Kitchen::Ec2: Amazon EC2 用の Test Kitchen ドライバ](https://github.com/test-kitchen/kitchen-ec2)」を参照してください。

例では以下の `driver` 属性を設定します。前に説明したように、ユーザーのアクセスキーおよびシークレットキーは標準的な環境変数に割り当てられていることを前提とします。ドライバはこれらのキーをデフォルトで使用します。それ以外の場合、適切なキー値に設定した `aws_access_key_id` および `aws_secret_access_key` を `driver` 属性に追加して、明示的にキーを指定する必要があります。

**名前**  
(必須) この属性は `ec2` に設定する必要があります。

**aws\$1ssh\$1key\$1id**  
(必須) Amazon EC2 SSH キーペア名です。この例では `US-East1` と名付けられます。

**transport.ssh\$1key**  
(必須) `aws_ssh_key_id` で指定したキーのプライベートキー (`.pem`) ファイルです。`US-East1.pem` 属性は作業ディレクトリ (この例では `../opsworks/ec2_keys`) を指定します。

**リージョン**  
(必須) インスタンスの AWS リージョンです。この例では、`us-west-1` で表される米国西部 (北カリフォルニア) を使用しています。

**availability\$1zone**  
(オプション) インスタンスの利用可能ゾーンです。この設定を省略した場合、指定されたリージョン、米国西部 (北カリフォルニア)のデフォルトのアベイラビリティーゾーンの `us-west-1b` が Test Kitchen で使用されます。ただし、デフォルトのゾーンがお使いのアカウントでは使用できない場合があります。その場合は、明示的に利用可能ゾーンを指定する必要があります。ちょうど、この例を用意するために使用したアカウントは `us-west-1b` をサポートしていないため、例では明示的に `us-west-1c` を指定しています。

**require\$1chef\$1omnibus**  
`true` に設定すると、この設定は、オムニバス形式のインストーラが `chef-client` をすべてのプラットフォームインスタンスにインストールするときに必ず使用されるようにします。

**security\$1group\$1ids**  
(オプション) インスタンスに適用されるセキュリティグループ ID のリストです。この設定は、`default` セキュリティグループをそのインスタンスグループに適用します。セキュリティグループの進入ルールがインバウンド SSH 接続を許可していることを確認してください。許可されていないと Test Kitchen がインスタンスと通信できません。`default` セキュリティグループを使用する場合、適宜編集する必要がある可能性があります。詳細については、「[Amazon EC2 セキュリティグループ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html)」を参照してください。

**subnet\$1id**  
インスタンスのターゲットサブネットの ID (該当する場合)。

**associate\$1public\$1ip**  
インターネットからインスタンスにアクセスできるようにする場合は、Amazon EC2 でインスタンスにパブリック IP アドレスを関連付けます。

**インターフェイスからリクエスト**  
インスタンスにアクセスするために使用したホスト名設定タイプ。有効な値は `dns`、`public`、`private`、または `private_dns` です。この属性の値を指定しない場合、`kitchen-ec2` は次の順序でホスト名設定を指定します。この属性を省略すると、設定タイプが設定されていません。  

1. [DNS 名]

1. パブリック IP アドレス

1. プライベート IP アドレス

1. プライベート DNS 名

**重要**  
アクセスキーとシークレットキーにアカウントの認証情報を使用するよりも、ユーザーを作成してその認証情報を Test Kitchen に提供することをお勧めします。詳細については、「[AWS アクセスキーを管理するためのベストプラクティス](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html)」を参照してください。  
GitHub または Bitbucket の公開リポジトリにアップロードするなど、パブリックにアクセス可能な場所に `.kitchen.yml` を置かないように注意してください。ご自分の認証情報が公開され、アカウントのセキュリティが侵害される恐れがあります。

`kitchen-ec2` ドライバは以下のプラットフォームをデフォルトでサポートします。
+ Ubuntu-10.04
+ Ubuntu-12.04
+ Ubuntu-12.10
+ Ubuntu-13.04
+ Ubuntu-13.10
+ Ubuntu-14.04
+ CentOS 6.4
+ Debian-7.1.0
+ windows-2012r2
+ windows-2008r2

これらのプラットフォームを 1 つ以上使用する場合は、適切なプラットフォーム名を `platforms` に追加します。`kitchen-ec2` ドライバは自動的に適切な AMI を選択し、SSH ユーザー名を生成します。他のプラットフォーム (この例では Amazon Linux を使用) を使用できますが、以下の `platforms` 属性を明確に指定する必要があります。

**名前**  
プラットフォーム名。この例では Amazon Linux を使用しているので、`name` は `amazon` に設定します。

**ドライバー**  
`driver` 属性です。以下のものが含まれます。  
+ `image_id` - プラットフォームの AMI です。指定したリージョンに属している必要があります。この例では、米国西部 (北カリフォルニア) リージョンの Amazon Linux AMIである `ami-ed8e9284` を使用します。
+ `transport.username` - SSH ユーザー名です。Test Kitchen がインスタンスとの通信に使用します。

  Amazon Linux には `ec2-user` を使用します。その他の AMI では別のユーザー名になる場合があります。

`.kitchen.yml` のコードを例で置き換え、`aws_access_key_id` などのアカウント固有の属性に適切な値を割り当てます。

## レシピの実行
<a name="w2ab1c14c71b9c15c17c31c39"></a>

この例では、「[イテレーション](cookbooks-101-basics-ruby.md#cookbooks-101-basics-ruby-iteration)」のレシピを使用します。

**レシピを実行するには**

1. 以下のコードとともに`default.rb` という名前のファイルを作成してクックブックの `recipes` フォルダに保存します。

   ```
   directory "/srv/www/shared" do
     mode 0755
     owner 'root'
     group 'root'
     recursive true
     action :create
   end
   ```

1. `kitchen converge` を実行してレシピを実行します。このコマンドは、Amazon EC2 インスタンスを起動および初期化に時間がかかるため、これまでの例よりも時間がかかることに注意してください。

1.  [[Amazon EC2 console]](https://console.aws.amazon.com/ec2/) (Amazon EC2 コンソール) に移動し、米国西部 (北カリフォルニア) リージョンを選択して、ナビゲーションペインで **[Instances]** (インスタンス) をクリックします。リストに新しく作成されたインスタンスが表示されます。

1. VirtualBox で実行中のインスタンスに対して行ったのと同じように `kitchen login` を実行してインスタンスにログインします。`/srv` の下に新しく作成したディレクトリがあるはずです。お好きな SSH クライアントを使用してインスタンスに接続することもできます。