例 9: Amazon EC2 インスタンスの使用 - AWS OpsWorks

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

例 9: Amazon EC2 インスタンスの使用

重要

AWS OpsWorks Stacks は新規顧客を受け付けなくなりました。既存のお客様は、2024 年 5 月 26 日までは、通常どおり OpsWorks コンソール、API、CLI、および CloudFormation リソースを使用できます。その時点で廃止されます。この移行に備えて、できるだけ早くスタックを AWS Systems Manager に移行することをおすすめします。詳細については、「AWS OpsWorks Stacks サポート終了に関する FAQ」および「AWS Systems Manager アプリケーションマネージャへの AWS OpsWorks Stacks アプリケーションの移行」を参照してください。

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

このトピックでは Amazon EC2 インスタンスでレシピを実行する方法を説明します。前述のセクションとほとんど同じ方法で Test Kitchen や Vagrant を使用しますが、2 つ違いがあります。

  • ドライバは Vagrant ではなく kitchen-ec2 です。

  • クックブックの .kitchen.yml ファイルには、Amazon EC2 インスタンスの起動に必要な情報で設定する必要があります。

注記

代替手段として、vagrant-aws Vagrant プラグインを使用する方法があります。詳細については、「Vagrant AWS プロバイダ」を参照してください。

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

AWS アカウントへのサインアップ

AWS アカウントがない場合は、以下のステップを実行して作成します。

AWS アカウント にサインアップするには
  1. https://portal.aws.amazon.com/billing/signup を開きます。

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

    サインアップ手順の一環として、通話呼び出しを受け取り、電話のキーパッドを使用して検証コードを入力するように求められます。

    AWS アカウントにサインアップすると、AWS アカウントのルートユーザーが作成されます。ルートユーザーには、アカウントのすべての AWS のサービスとリソースへのアクセス権があります。セキュリティのベストプラクティスとして、管理ユーザーに管理アクセスを割り当てルートユーザーアクセスが必要なタスクを実行する場合にのみ、ルートユーザーを使用してください。

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

管理ユーザーの作成

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

AWS アカウントのルートユーザーをセキュリティで保護する
  1. [ルートユーザー] を選択し、AWS アカウント のメールアドレスを入力して、アカウント所有者として AWS Management Console にサインインします。次のページでパスワードを入力します。

    ルートユーザーを使用してサインインする方法については、「AWS サインイン User Guide」の「Signing in as the root user」を参照してください。

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

    手順については、「IAM ユーザーガイド」の「AWS アカウント のルートユーザーの仮想 MFA デバイスを有効にする (コンソール)」を参照してください。

管理ユーザーを作成する
  1. IAM アイデンティティセンターを有効にします。

    手順については、「AWS IAM Identity Center ユーザーガイド」の「AWS IAM Identity Center の有効化」を参照してください。

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

    IAM アイデンティティセンターディレクトリ をアイデンティティソースとして使用するチュートリアルについては、「AWS IAM Identity Center ユーザーガイド」の「デフォルトの IAM アイデンティティセンターディレクトリ でユーザーアクセスを設定する」を参照してください。

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

    IAM アイデンティティセンターのユーザーを使用してサインインする方法については、「AWS サインイン User Guide」の「Signing in to the AWS access portal」を参照してください。

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

警告

IAM ユーザーには長期的な認証情報があり、セキュリティ上のリスクをもたらします。このリスクを軽減するために、これらのユーザーにはタスクの実行に必要な権限のみを付与し、不要になったユーザーを削除することをお勧めします。

  • AWS_ACCESS_KEY - ユーザーのアクセスキーは AKIAIOSFODNN7EXAMPLE のようなものです。

  • AWS_SECRET_KEY – ユーザーのシークレットキー。wJalrXUtnFEMI /K7MDENG/bPxRfiCYEXAMPLEKEY のようになります。

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

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

    sudo aptitude install ruby1.9.1-dev
  2. kitchen-ec2 ドライバは gem です。以下のようにインストールします。

    gem install kitchen-ec2

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

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

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

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

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

    name "createdir-ec2" version "0.1.0"
  6. 例 1: パッケージのインストール」に説明したように Test Kitchen を初期化します。以下のセクションでは .kitchen.yml を設定する方法を説明します。Amazon EC2 インスタンスでは際立って複雑です。

  7. createdir-ec2recipes サブディレクトリを追加します。

Amazon EC2 用の .kitchen.yml の設定

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 セクションにデフォルト設定を使用できますが、デフォルトの driverplatforms の設定は変更する必要があります。この例では、最小限の設定リストを使用して残りはデフォルト値を受け入れます。kitchen-ec2 設定の詳細なリストについては、「Kitchen::Ec2: Amazon EC2 用の Test Kitchen ドライバ」を参照してください。

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

name

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

aws_ssh_key_id

(必須) Amazon EC2 SSH キーペア名です。この例では US-East1 と名付けられます。

transport.ssh_key

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

region

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

availability_zone

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

require_chef_omnibus

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

security_group_ids

(オプション) インスタンスに適用されるセキュリティグループ ID のリストです。この設定は、default セキュリティグループをそのインスタンスグループに適用します。セキュリティグループの進入ルールがインバウンド SSH 接続を許可していることを確認してください。許可されていないと Test Kitchen がインスタンスと通信できません。default セキュリティグループを使用する場合、適宜編集する必要がある可能性があります。詳細については、「Amazon EC2 セキュリティグループ」を参照してください。

subnet_id

インスタンスのターゲットサブネットの ID (該当する場合)。

associate_public_ip

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

インターフェイスからリクエスト

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

  1. [DNS 名]

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

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

  4. プライベート DNS 名

重要

アクセスキーとシークレットキーにアカウントの認証情報を使用するよりも、ユーザーを作成してその認証情報を Test Kitchen に提供することをお勧めします。詳細については、「AWS アクセスキーを管理するためのベストプラクティス」を参照してください。

パブリック 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 属性を明確に指定する必要があります。

name

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

ドライバー

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 などのアカウント固有の属性に適切な値を割り当てます。

レシピの実行

この例では、「イテレーション」のレシピを使用します。

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

    directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
  2. kitchen converge を実行してレシピを実行します。このコマンドは、Amazon EC2 インスタンスを起動および初期化に時間がかかるため、これまでの例よりも時間がかかることに注意してください。

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

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