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

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

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

重要

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

この時点で、 でインスタンスをローカルで実行しています 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 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 アカウント E メールアドレスを入力して、アカウント所有者AWS Management Consoleとして にサインインします。次のページでパスワードを入力します。

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

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

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

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

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

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

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

管理アクセス権を持つユーザーとしてサインインする
  • 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

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: A Test Kitchen Driver for Amazon EC2」を参照してください。

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

名前

(必須) この属性は 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

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

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

インスタンスにアクセスするために使用したホスト名設定タイプ。有効な値は 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 属性を明確に指定する必要があります。

名前

プラットフォーム名。この例では 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クライアントを使用してインスタンスに接続することもできます。