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

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

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

重要

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

この時点で、 でインスタンスをローカルで実行しています VirtualBox。これは迅速かつ簡単ですが、最終的には Amazon EC2インスタンスでレシピをテストする必要があります。特に、Amazon Linux でレシピを実行する場合は、Amazon でのみ使用できますEC2。CentOS などの同様のシステムを予備的な実装やテストに使用できますが、Amazon Linux でレシピを完全にテストする唯一の方法は Amazon EC2インスタンスを使用することです。

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

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

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

注記

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

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

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

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

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

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

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

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

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

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

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

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

    ルートユーザーを使用してサインインする方法については、「」の「ルートユーザーとしてサインインする」を参照してください。 AWS サインイン ユーザーガイド

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

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

管理アクセスを持つユーザーを作成する
  1. IAM Identity Center を有効にします。

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

  2. IAM Identity Center で、ユーザーに管理アクセス権を付与します。

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

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

    IAM Identity Center ユーザーを使用してサインインする方法については、「 へのサインイン」を参照してください。 AWS の アクセスポータル AWS サインイン ユーザーガイド

追加のユーザーにアクセス権を割り当てる
  1. IAM Identity Center で、最小特権のアクセス許可を適用するベストプラクティスに従うアクセス許可セットを作成します。

    手順については、「」の「アクセス許可セットの作成」を参照してください。 AWS IAM Identity Center ユーザーガイド

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

    手順については、「」の「グループの追加」を参照してください。 AWS IAM Identity Center ユーザーガイド

Amazon へのアクセス許可を持つ IAM ユーザーを作成しEC2、ユーザーのアクセスキーとシークレットキーをワークステーション上の安全な場所に保存する必要があります。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、 などの Ruby 環境マネージャーを使用することもできますRVM。この手順は、kitchen-ec2 ドライバーのバージョン 0.8.0 でテスト済みですが、より新しいバージョンがあります。特定のバージョンをインストールするには、gem install kitchen-ec2 -v <version number> を実行します。

  3. Test Kitchen がインスタンスへの接続に使用できる Amazon EC2SSHキーペアを指定する必要があります。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 の .kitchen.yml の設定 EC2

ドライバーが適切に設定された Amazon EC2インスタンスを起動kitchen-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 設定の詳細なリストについては、「キッチン::Ec2: A Test Kitchen Driver for Amazon EC2」を参照してください。

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

name

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

aws_ssh_key_id

(必須) この例US-East1で名前が付けられた Amazon EC2SSHキーペア名。

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

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

subnet_id

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

associate_public_ip

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

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

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

  1. DNS 名前

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

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

  4. プライベートDNS名

重要

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

.kitchen.yml パブリックリポジトリ GitHub や Bitbucket リポジトリにアップロードするなど、パブリックにアクセス可能な場所に置かないように注意してください。ご自分の認証情報が公開され、アカウントのセキュリティが侵害される恐れがあります。

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。指定されたリージョンに属している必要があります。この例ではami-ed8e9284、米国西部 (北カリフォルニア) リージョンAMIの Amazon Linux である を使用しています。

  • transport.username – Test Kitchen がインスタンスとの通信に使用するSSHユーザー名。

    Amazon Linux には ec2-user を使用します。他の は異なるユーザー名を持つAMIs場合があります。

.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コンソール に移動し、米国西部 (北カリフォルニア)) リージョンを選択し、ナビゲーションペインのインスタンス をクリックします。リストに新しく作成されたインスタンスが表示されます。

  4. を実行して、 で実行されているインスタンスで実行しているのと同じように、インスタンスkitchen loginにログインします VirtualBox。/srv の下に新しく作成したディレクトリがあるはずです。任意のSSHクライアントを使用してインスタンスに接続することもできます。