翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
例 9: Amazon EC2 インスタンスの使用
重要
- AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 にお問い合わせください。 AWS Support でのチーム AWS re:Post
この時点で、 でインスタンスをローカルで実行しています 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 アカウント
https://portal.aws.amazon.com/billing/サインアップ
を開きます。 オンラインの手順に従います。
サインアップ手順の一環として、通話呼び出しを受け取り、電話キーパッドで検証コードを入力するように求められます。
にサインアップするとき AWS アカウント、 AWS アカウントのルートユーザー が作成されます。ルートユーザーはすべての にアクセスできます AWS のサービス アカウントの および リソース。セキュリティのベストプラクティスとして、ユーザーに管理アクセスを割り当て、ルートユーザーのみを使用してルートユーザーアクセスが必要なタスクを実行してください。
AWS サインアッププロセスが完了すると、 から確認メールが送信されます。https://aws.amazon.com/
管理アクセスを持つユーザーを作成する
にサインアップした後 AWS アカウント、 をセキュリティで保護する AWS アカウントのルートユーザー、有効化 AWS IAM Identity Center、および日常的なタスクにルートユーザーを使用しないように管理ユーザーを作成します。
のセキュリティ保護 AWS アカウントのルートユーザー
-
にサインインします。AWS Management Console
ルートユーザーを選択し、 AWS アカウント E メールアドレス。次のページでパスワードを入力します。 ルートユーザーを使用してサインインする方法については、「」の「ルートユーザーとしてサインインする」を参照してください。 AWS サインイン ユーザーガイド 。
-
ルートユーザーの多要素認証 (MFA) を有効にします。
手順については、「 の仮想MFAデバイスの有効化」を参照してください。 AWS アカウントIAM ユーザーガイドのルートユーザー (コンソール)。
管理アクセスを持つユーザーを作成する
-
IAM Identity Center を有効にします。
手順については、「 の有効化」を参照してください。 AWS IAM Identity Center ()AWS IAM Identity Center ユーザーガイド 。
-
IAM Identity Center で、ユーザーに管理アクセス権を付与します。
の使用に関するチュートリアル IAM アイデンティティセンターディレクトリ ID ソースとして、「デフォルトを使用してユーザーアクセスを設定する」を参照してください。 IAM アイデンティティセンターディレクトリ ()AWS IAM Identity Center ユーザーガイド 。
管理アクセス権を持つユーザーとしてサインインする
-
IAM Identity Center ユーザーでサインインするには、IAMIdentity Center ユーザーの作成時に E メールアドレスにURL送信されたサインインを使用します。
IAM Identity Center ユーザーを使用してサインインする方法については、「 へのサインイン」を参照してください。 AWS の アクセスポータル AWS サインイン ユーザーガイド 。
追加のユーザーにアクセス権を割り当てる
-
IAM Identity Center で、最小特権のアクセス許可を適用するベストプラクティスに従うアクセス許可セットを作成します。
手順については、「」の「アクセス許可セットの作成」を参照してください。 AWS IAM Identity Center ユーザーガイド 。
-
グループにユーザーを割り当て、そのグループにシングルサインオンアクセス権を割り当てます。
手順については、「」の「グループの追加」を参照してください。 AWS IAM Identity Center ユーザーガイド 。
Amazon へのアクセス許可を持つ IAM ユーザーを作成しEC2、ユーザーのアクセスキーとシークレットキーをワークステーション上の安全な場所に保存する必要があります。Test Kitchen はインスタンスを作成するためにこれらの認証情報を使用します。Test Kitchen に認証情報を提供するには、ワークステーションの以下の環境変数にキーを割り当てることをお勧めします。
警告
IAM ユーザーは長期的な認証情報を持っているため、セキュリティ上のリスクがあります。このリスクを軽減するために、これらのユーザーにはタスクの実行に必要な権限のみを付与し、不要になったユーザーを削除することをお勧めします。
-
AWS_ACCESS_KEY – ユーザーのアクセスキー。 のようになりますAKIAIOSFODNN7EXAMPLE。
-
AWS_SECRET_KEY – ユーザーのシークレットキー。次のようになります。wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.
この手法によって、たとえば認証情報を含むプロジェクトを公開リポジトリにアップロードしてしまうなど不慮の事故でアカウントが侵害される機会が減ります。
クックブックをセットアップするには
-
kitchen-ec2
ドライバを使用するには、ruby-dev
パッケージがシステムにインストールされている必要があります。以下の例のコマンドでaptitude
を使用して Ubuntu システムでパッケージをインストールする方法を説明します。sudo aptitude install ruby1.9.1-dev
-
kitchen-ec2
ドライバは gem です。以下のようにインストールします。gem install kitchen-ec2
ワークステーションによっては、このコマンドに が必要になる場合や
sudo
、 などの Ruby 環境マネージャーを使用することもできますRVM。この手順は、 kitchen-ec2
ドライバーのバージョン 0.8.0 でテスト済みですが、より新しいバージョンがあります。特定のバージョンをインストールするには、 gem install kitchen-ec2 -v <
を実行します。version number
> -
Test Kitchen がインスタンスへの接続に使用できる Amazon EC2SSHキーペアを指定する必要があります。Amazon EC2キーペアがない場合は、Amazon EC2 キーペアの作成方法を参照してください。キーペアは、インスタンスと同じAWSリージョンに属している必要があることに注意してください。この例では、米国西部 (北カリフォルニア) を使用します。
キーペアを選択したら、
opsworks_cookbooks
のサブディレクトリec2_keys
を作成し、そのサブディレクトリにキーペアのプライベートキー (.pem
) ファイルをコピーします。ec2_keys
にプライベートキーを配置するのはコードをほんの少し簡素化する便宜上のものです。システムのどこに配置してもかまいません。 -
createdir-ec2
という名前のopsworks_cookbooks
のサブディレクトリを作成し、そのディレクトリに移動します。 -
createdir-ec2
に、次のコンテンツを含むmetadata.rb
ファイルを追加します。name "createdir-ec2" version "0.1.0"
-
「例 1: パッケージのインストール」に説明したように Test Kitchen を初期化します。次のセクションでは
.kitchen.yml
、Amazon EC2インスタンスで非常に複雑な を設定する方法について説明します。 -
createdir-ec2
にrecipes
サブディレクトリを追加します。
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
セクションにデフォルト設定を使用できますが、デフォルトの driver
と platforms
の設定は変更する必要があります。この例では、最小限の設定リストを使用して残りはデフォルト値を受け入れます。kitchen-ec2
設定の詳細なリストについては、「キッチン::Ec2: A Test Kitchen Driver for Amazon EC2
例では以下の driver
属性を設定します。前に説明したように、ユーザーのアクセスキーおよびシークレットキーは標準的な環境変数に割り当てられていることを前提とします。ドライバはこれらのキーをデフォルトで使用します。それ以外の場合、適切なキー値に設定した aws_access_key_id
および aws_secret_access_key
を driver
属性に追加して、明示的にキーを指定する必要があります。
- 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 アドレスをインスタンスに関連付けることができます。
- インターフェイスからリクエスト
-
インスタンスにアクセスするために使用したホスト名設定タイプ。有効な値は
dns
、public
、private
、またはprivate_dns
です。この属性の値を指定しない場合、kitchen-ec2
は次の順序でホスト名設定を指定します。この属性を省略すると、設定タイプが設定されていません。-
DNS 名前
-
パブリック IP アドレス
-
プライベート IP アドレス
-
プライベート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 を使用しているので、
name
はamazon
に設定します。 - ドライバー
-
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
などのアカウント固有の属性に適切な値を割り当てます。
レシピの実行
この例では、「イテレーション」のレシピを使用します。
レシピを実行するには
-
以下のコードとともに
default.rb
という名前のファイルを作成してクックブックのrecipes
フォルダに保存します。directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
-
kitchen converge
を実行してレシピを実行します。Amazon EC2インスタンスの起動と初期化に必要な時間のため、このコマンドの完了には前の例よりも時間がかかることに注意してください。 -
Amazon EC2コンソール
に移動し、米国西部 (北カリフォルニア)) リージョンを選択し、ナビゲーションペインのインスタンス をクリックします。リストに新しく作成されたインスタンスが表示されます。 -
を実行して、 で実行されているインスタンスで実行しているのと同じように、インスタンス
kitchen login
にログインします VirtualBox。/srv
の下に新しく作成したディレクトリがあるはずです。任意のSSHクライアントを使用してインスタンスに接続することもできます。