EBS を使用するようにエラスティック インスタンスを設定する

このページの内容

このセクションの項目

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

Amazon エラスティック ブロック ストア(EBS)では、EC2 インスタンスにアタッチできる「EBS ボリューム」を提供します。EBS ボリューム(およびこれらのボリュームから作成された「EBS スナップショット」)では、エラスティック インスタンス用の永続的なストレージが提供されます。

Bamboo ジョブの構築に必要な比較的静的なリソース(ソースコードのチェックアウトおよび Maven リポジトリ アーティファクトなど)がある場合は、これらを EBS ボリュームに追加することができます。このボリュームから、EBS スナップショットを作成することができます。これは、指定された時点での EBS ボリュームの「状態」を効果的に記録することができます。

EBS スナップショットをセットアップしたら、エラスティック イメージ設定に関連付けることができます。このエラスティック イメージを起動すると、次のように動作します。

  • そのエラスティック インスタンスが、EBS ボリューム (エラスティック イメージに関連付けられた EBS スナップショットから派生) と一緒に起動します。
  • この EBS ボリュームは、このエラスティック インスタンスにアタッチされます。
    (info) そのスナップショットを作成する前に EBS ボリュームに追加されたビルド リソースはすべて、このエラスティック インスタンスで使用できます。

Elastic Bamboo と一緒に EBS を使うべき理由
エラスティック インスタンスはステートレスなので、そのインスタンス上で実行されるエラスティック エージェントもステートレスです。したがって、エラスティック インスタンスが同じイメージから再起動される場合は常に次のことが該当します。

  • エラスティック エージェントが外部から取得しなければならないリソース (Maven のリポジトリ アーティファクトなど) はすべて、全体をそのままダウンロードする必要があります。
  • 新しいジョブが作成されたら、エラスティック エージェントによる全体のチェックアウトを行う必要があります。

EBS を使用すると、こうした外部リソースを EBS ボリュームとスナップショットに保存できるため、イメージからエラスティック インスタンスを起動するたびにダウンロードしたり、ソースコードをチェックアウトしたりする必要がなくなります。ジョブがそのようなリソースのダウンロードに大きく依存している場合や、毎回クリーン ビルドを実行していない場合、EBS を使用することでビルド時間が大幅に改善される可能性があります。

さらに、EBS はエラスティック エージェントをカスタマイズする簡単なメカニズムを提供しているので、(独自のエラスティック エージェント機能を使って) カスタム エラスティック イメージをゼロから作成する必要がなくなります。たとえば、ファイルとスクリプトを EBS ボリュームにアップロードして、エラスティック エージェントの PostgreSQL データベースなどのリソースをインストールできます。こうしたリソースは、エージェントのエラスティック インスタンスの起動時に利用可能になります。

このページの内容

最初の EBS スナップショットを作成する

最初の EBS スナップショットを作成する方法は次のとおりです。

  1. Amazon Web Services (AWS) のアカウント識別子を Bamboo サーバーにダウンロードします。EBS と一緒に Elastic Bamboo を使用するには、AWS プライベート キー ファイルと証明書ファイルをお使いの Bamboo サーバーに保存する必要があります。まだ Bamboo サーバーに AWS プライベート キー ファイルまたは証明書ファイルをダウンロードしていない場合は、「AWS 非公開キーファイルと証明書ファイルを生成する」の手順をご確認ください。
  2. ダウンロードした AWS アカウント識別ファイルがある場所で、Bamboo の設定を更新します。これにより、起動された新しいエラスティック インスタンスすべてに識別ファイルがアップロードされるようになります。手順については、「Elastic Bamboo の設定」の「エラスティック インスタンスの設定」セクションをご覧ください。このページで説明されている [AWS アカウント識別子を新しいエラスティック インスタンスにアップロード] (EBS スナップショット ID が指定されている場合は必須) チェックボックス、"アカウント非公開キー ファイル" フィールド、"アカウント証明書ファイル" フィールドを更新する必要があります。
  3. Bamboo 経由で 1 つのエラスティック インスタンスを起動します。手順は「エラスティック インスタンスを起動する」をご確認ください。
  4. SSH 経由でエラスティック インスタンスにアクセスします。手順は「エラスティック インスタンスにアクセスする」をご確認ください。
  5. Log in as and administrator, such as root in Linux and, in Linux, make sure to load the root user's environment as below:

    sudo su - 

    In this case, the '-' or the '-l' or the '-login' parameters is required, otherwise some of the scripts may fail.

  6. Follow the steps below to create an EBS volume and attach it to the elastic instance (steps a & b), upload content to the EBS volume (step c & d), and generate the snapshot (step e & f):
    (info) All the scripts mentioned below are available in /opt/bamboo-elastic-agent/bin on Bamboo stock images. You can also download them from here (choose the latest version). 
    1. Run createInitialVolume.sh  <volume size> — This script creates a EBS volume (where <volume size> is the size of the volume), attaches the volume and mounts it on the elastic instance. For example, createInitialVolume.sh 100 will create a 100GB EBS volume and attach and mount it on the elastic instance.
    2. rewarmEbsSnapshot.sh を実行します。このスクリプトでは、EBS ボリュームに Elastic Bamboo の標準構造をセットアップします。この標準ボリューム構造のディレクトリとファイルに関する詳細は、下記の「重要な EBS ディレクトリとファイル」セクションに記載されています。
    3. (オプション) EBS ボリュームを入力します。EBS ボリュームを使用するエラスティック インスタンスで利用できるようにするファイルとスクリプトを EBS ボリュームに入力できるようになります。たとえば、Maven のリポジトリ データ、ソース コード、スクリプト、ファイルをアップロードして、お使いのエラスティック エージェントにデータベースをインストールする場合などです。ファイルをスナップショットに含める場合は、/mnt/bamboo-ebs フォルダーまたはそのサブフォルダーにファイルをアップロードする必要があります。EBS ボリュームを効果的に入力する方法に関するガイドラインは、「EBS ボリュームを入力する」をご参照ください。
      (info) EBS ボリュームはエラスティック インスタンスにアタッチされているため、SSH 経由でエラスティック インスタンスにアクセスすると、EBS ボリュームへのフル アクセスが可能になります (下記の「重要な EBS ディレクトリとファイル」を参照)。
    4. アップロードされたすべてのコンテンツの所有者が bamboo:bamboo であることを確認します。コマンド chown -R bamboo:bamboo <ファイル名> を実行すると、ファイルの所有者を設定できます。
    5. killall java コマンドを実行します。このコマンドでは、エージェント プロセスなど、インスタンス上のすべてのプロセスを強制終了するため、ボリュームをアンマウントしてスナップショットを作成できます。
    6. generateSnapshot.sh を実行します。このスクリプトでは、ボリュームに基づいてスナップショットを作成する前に、ボリュームをアンマウントしてデタッチします。スナップショットの作成にかかる時間は、EBS ボリュームにアップロードしたコンテンツの量によって異なります。スナップショットのスナップショット ID は、エラスティック インスタンスのログで確認できます。エラスティック インスタンスのログにアクセスする方法の手順は、「エラスティック インスタンスにアクセスする」をご参照ください。
      (info) マウントされたボリュームに現在あるデバイスはアンマウントできません。
  7. エラスティック インスタンスをシャットダウンします。手順は「エラスティック インスタンスをシャットダウンする」をご確認ください。

EBS スナップショットを使用するようにエラスティック イメージを設定する

EBS スナップショットの設定が終了したら、最後のステップは、スナップショットの詳細をエラスティック イメージ設定に追加することです。これにより、そのイメージから起動されるすべてのインスタンスに EBS ボリュームがアタッチされます。さまざまなスナップショットを別々のエラスティック イメージ設定に関連付けることができます。

EBS スナップショットを使用するように Elastic Bamboo を設定する方法は次のとおりです。

  1. Determine the Snapshot ID of the EBS snapshot you have just created. The Snapshot ID should be recorded in the logs of the elastic instance you created it on. You can also view your EBS snapshots in the AWS Console by clicking the Snapshots menu item.
  2. Click the  icon in the Bamboo header and choose Overview.
  3. In the menu on the left, go to Elastic Bamboo > Image Configurations
  4. EBS スナップショットを追加するエラスティック イメージ設定の [Operations (操作)] 列で [Edit (編集)] をクリックします。[Edit Elastic Image Configuration (エラスティック イメージ設定の編集) - <イメージ名>] 画面が表示されます (次のスクリーンショットを参照)。


  5. [Automatically attach an Amazon Elastic Block Store (EBS) volume to new elastic instances (Amazon Elastic Block Store (EBS) ボリュームを新しいエラスティック インスタンスに自動的にアタッチ)] を選択します。 
  6. [EBS Snapshot ID (EBS スナップショット ID)] フィールドに EBS スナップショットのスナップショット ID を入力します。
  7. Check Use legacy EBS handling to resolve EBS issues for images older than two years.
  8. [Save (保存)] をクリックします。指定したスナップショットから新しい EBS ボリュームが作成され、そのイメージから起動されたすべての新しいエラスティック インスタンスにアタッチされます。

EBS スナップショットを更新する

現在 Elastic Bamboo で EBS を使用していて、スナップショットの更新が必要になった場合は、次の手順に従ってください。この手順は、新しい EBS スナップショットを作成する手順に似ています。

EBS スナップショットを更新するには、次の手順に従います。

  1. Bamboo 経由で 1 つのエラスティック インスタンスを起動します。手順は「エラスティック インスタンスを起動する」をご確認ください。
  2. (オプション) インスタンスのエラスティック エージェントでビルドを実行して、アタッチされた EBS ボリュームにデータを入力します。EBS ボリュームにデータを効果的に入力する方法に関するガイドラインについては、「EBS ボリュームにデータを入力する」を参照してください。
  3. SSH 経由でエラスティック インスタンスにアクセスし (手順については、「エラスティック インスタンスにアクセスする」を参照)、次の操作を行います。
    (info) 次のスクリプトはすべて Bamboo にバンドルされています。
    1. Log in as and administrator, such as root in Linux and, in Linux, make sure to load the root user's environment as below:

      sudo su - 

      In this case, the '-' or the '-l' or the '-login' parameters is required, otherwise some of the scripts may fail.


    2. (オプション) 追加のコンテンツがあれば、アタッチされた EBS ボリュームにセキュア コピー (SCP) でアップロードします。ファイルをスナップショットに含める場合は、/mnt/bamboo-ebs フォルダまたはそのサブフォルダにファイルをアップロードする必要があります。
    3. killall java を実行します。このコマンドでは、すべてのエージェント プロセスを強制終了し、マウントされたボリュームを使用していない状態にします。
    4. jps -vl を実行します。このコマンドでは、インスタンスで実行されているすべての Java プロセスのリストを表示します。実行中の Java プロセスは存在しないはずです。
    5. generateSnapshot.sh を実行します。このスクリプトでは、ボリュームに基づいてスナップショットを作成する前に、ボリュームをアンマウントしてデタッチします。
      (info)マウントされたボリュームに現在ターミナルが存在する場合はデバイスをアンマウントできません。
    6. エラスティック インスタンス ログで、作成したばかりのスナップショットのスナップショット ID を確認します。エラスティック インスタンスのログにアクセスする方法の手順については、「エラスティック インスタンスにアクセスする」を参照してください。
    7. 前述の「EBS スナップショットを使用するようにエラスティック イメージを設定する」の説明に従って、Elastic Bamboo 設定の新しいスナップショット ID を更新します。

重要な EBS ディレクトリとファイル

慣例により、Bamboo では EBS デバイスは /dev/sdh でアタッチされます。これは /mnt/bamboo-ebs にマウントされます。標準構造のコンテンツは次のとおりです。

  • bin/customiseInstance.sh - このスクリプトは、エラスティック インスタンスの起動時に実行されます。このスクリプトは rewarmEbsSnapshot.sh の実行時に上書きされるため、カスタマイズしないことをお勧めします。
  • bin/customise-extras.sh - このスクリプトは、(Bamboo ユーザーとして実行されるのではなく) エラスティック インスタンスの起動時にルートとして実行されます。このスクリプトは上書きされないため、カスタマイズしても安全です。このスクリプトをカスタマイズして、データベースの設定、インスタンス上にある任意の場所へのファイルの移動などのプロセスを自動化できます。
  • profile-extras.sh - このスクリプトは、(ルートとして実行されるのではなく) Bamboo ユーザーで実行されるプロファイルに追加されます。これは環境変数を設定するのに便利です。
  • bamboo-agent/bamboo-agent.cfg.xml - この設定ファイルでは、ビルド作業ディレクトリを EBS ボリューム上のビルド作業ディレクトリを指すように変更します。
  • bamboo-agent/build-dir - これはビルド作業ディレクトリです。
  • maven/build.properties - このプロパティ ファイルは、エラスティック インスタンスの起動時に /home/bamboo にコピーされます。Maven 1 の既定のリポジトリは /mnt/bamboo-ebs/maven/.maven を指します。
  • maven/.m2/settings.xml - この設定ファイルは、エラスティック インスタンスの起動時に /home/bamboo/.m2 にコピーされます。Maven 2 の既定のリポジトリは /mnt/bamboo-ebs/maven/.m2/repository を指します。
  • tmp-extras - このディレクトリのコンテンツは、エラスティック インスタンスの起動時に /tmp にコピーされます。

 

-----

  1. Start a single elastic instance via Bamboo. See Starting an elastic instance for instructions.
  2. Access your elastic instance via SSH (see Accessing an elastic instance for instructions).
  3.  

     

    sudo su -

     

    1. In this case, the '-' or the '-l' or the '-login' parameters is required, otherwise some of the scripts may fail.
  4. Follow the steps below to create an EBS volume and attach it to the elastic instance (steps a & b), upload content to the EBS volume (step c & d), and generate the snapshot (step e & f):
    (info) All the scripts mentioned below are available in /opt/bamboo-elastic-agent/bin on Bamboo stock images. You can also download them from here (choose the latest version). 
    1. Run createInitialVolume.sh <volume size> — This script creates a EBS volume (where <volume size> is the size of the volume), attaches the volume and mounts it on the elastic instance. For example, createInitialVolume.sh 100 will create a 100GB EBS volume and attach and mount it on the elastic instance.
最終更新日: 2017 年 1 月 20 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する

このセクションの項目

Powered by Confluence and Scroll Viewport.