左のビデオで、Rendy が
AWS Data Pipeline を使用した EC2 インスタンスの停止方法を説明します

 

右のビデオで、Rendy が
AWS Data Pipeline ロールの作成方法を説明します

stop-start-ec2-instances-rendy
aws-kc-slate

スケジュールした間隔で、インスタンスを終了せずに、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスをプログラムで停止および起動するためのベストプラクティスを教えてください。

AWS Data Pipeline を使用して、スケジュールした間隔で、EC2 インスタンスをプログラムで起動および停止できます。Data Pipeline は、AWS の技術を使用しており、設定したスケジュールで外部依存関係なしに AWS コマンドラインインターフェース (AWS CLI) コマンドを実行します。Data Pipeline は、Amazon Simple Storage Service (Amazon S3) にログを書き込み、IAM ロールのコンテキストで実行されるため、キー管理の要件がなくなります。Data Pipeline はコスト効率も優れています。たとえば、Data Pipeline の無料利用枠を使用すると、1 日 1 回、インスタンスを停止して起動できます。詳細については、「AWS Data Pipeline 料金表」を参照してください。

注意: Amazon EC2 t1.micro インスタンスは、データパイプラインを実行するためのホスト環境として起動されます。この目的で起動された EC2 インスタンスは、50 分のデフォルトのタイムアウト期間に実行されます。データパイプラインの実行をホストするために使用されるすべてのリソースがアカウントに課金されます。100 分以内に EC2 インスタンスを停止して再起動するパイプラインを実行すると、消費されるリソースの量は、EC2 t1.micro インスタンスを単に実行し続けている場合と変わりません。

この記事で説明している方法で、消費されるリソースが節約されることを確認するには、EC2 t1.micro 以上のインスタンスを 100 分を超えて停止して再起動する必要があります (起動に 50 分、停止に 50 分)。

Data Pipeline で、DataPipelineDefaultResourceRole ロールのカスタマー管理ポリシーを作成する必要があるのは、このロールに関連付けられているデフォルトのポリシーが AmazonEC2RoleforDataPipelineRole AWS 管理ポリシーである場合です。AWS 管理ポリシーが読み取り専用であるためです。DataPipelineDefaultResourceRole にアタッチされたポリシーが AWS 管理ポリシーでない場合、カスタマー管理ポリシーを作成する必要はありません。代わりに、DataPipelineDefaultResourceRole ロールに割り当てられたポリシーを編集できます。

以下の手順に従って、指定された時刻に EC2 インスタンスをプログラムで起動および停止できる Data Pipeline をセットアップします。

DataPipelineDefaultResourceRole のカスタムポリシーの作成と検証

1.   AWS マネジメントコンソールの [セキュリティと識別] セクションで、[Identity & Access Management (IAM)] を選択して、Identity and Access Management ダッシュボードを開きます。

2.   [Policies] を選択します。

3.   [ポリシーの作成] を選択して、[ポリシーの作成] ページを開きます。

4.   [独自のポリシーを作成] オプションを選択します。

5.   DataPipelineDefaultResourceRole に関連付けられているポリシー名 (「DataPipelineDefaultResourceRole_EC2_Policy」など) を入力します。

6.   ポリシーの説明 (「Policy associated with the DataPipelineDefaultResourceRole when starting and stopping EC2 Instances with Data Pipeline」など) を入力します。

7.   新しいポリシーの [ポリシードキュメント] セクションに以下の情報を入力します。

{
   "Version": "2012-10-17",
  "Statement": [
      { 
        "Effect": "Allow",
        "Action": [
            "s3:*", 
            "ec2:Describe*",
            "ec2:Start*", 
            "ec2:RunInstances",
            "ec2:Stop*", 
            "datapipeline:*",
            "cloudwatch:*" 
          ],
          "Resource": [
              "*" 
          ]
      }
    ]
}

注意: ここで説明している同じアクセス権限を、DataPipelineDefaultResourceRole ロールに現在関連付けられているカスタマー管理ポリシーすべてに適用するのがベストプラクティスです。

8.   [Validate Policy] を選択します。

9.   ポリシーの検証後、[ポリシーの作成] を選択して、新しいポリシーを作成します。

DataPipelineDefaultResourceRole ロールにポリシーをアタッチします。

1.   [ポリシータイプ] フィルタ式に「DataPipeline」または他の適切なプレフィックスを入力します。このポリシーの横のチェックボックスをオンにし、[ポリシーアクション] ドロップダウンメニューから [アタッチ] オプションを選択します。

2.   [ポリシーのアタッチ] ページで、フィルタ式「datapipeline」を入力し、フィルタによって返される DataPipelineDefaultResourceRole エントリの横のチェックボックスをオンにします。

3.   ページの下部で [ポリシーのアタッチ] を選択して、DataPipelineDefaultResourceRole に新しいポリシーを関連付けます。

Data Pipelines を作成して AWS CLI コマンドを実行する

1.   Data Pipeline コンソールを開きます。

2.   [Create New Pipeline (新規パイプラインの作成)] を選択し、以下の情報を入力して、2 つのパイプラインを作成します。
Name (名前):Start EC2 instances」、「Stop EC2 instances」など。
Description (説明): 必要に応じてパイプラインに関連する詳細を入力します。
Source (ソース): [Build using template (テンプレートを使用してビルド)] を選択して、テンプレート Run AWS CLI command を選択します。
AWS CLI command (AWS CLI コマンド): パイプラインによる処理内容を指定します。2 つのパイプラインを作成します。1 つは、aws ec2 start-instances コマンドの実行用、もう 1 つは aws ec2 stop-instances コマンドの実行用です。

注意: ec2 start-instancesec2 stop-instances の両方で、--region パラメータに有効な値を指定する必要があります。

たとえば、以下のコマンドを使用して、指定した EC2 インスタンスを起動できます。

aws ec2 start-instances --instance-ids i-abcd1234 i-987a654b i-ba154f3c --region us-east-x 

このコマンドには、起動した同じ EC2 インスタンスを停止するために使用する構文が用意されています。

aws ec2 stop-instances --instance-ids i-abcd1234 i-987a654b i-ba154f3c --region us-east-x 

重要 --instance-ids パラメータに渡されたいずれのインスタンス ID も存在しない場合は、コマンド全体が失敗し、いずれのインスタンスも停止/起動されません。指定したインスタンス ID のいずれかが終了している場合、これは問題になります。インスタンス ID が i-abcd1234 であるインスタンスが終了している場合、例で示している aws ec2 start-instances は、指定したインスタンスのいずれかも起動しません。このシナリオにならないように、セミコロンで区切ったコマンドの発行を検討してください。

aws ec2 start-instances --instance-ids i-abcd1234 --region us-east-x;
aws ec2 start-instances --instance-ids i-987a654b --region us-east-x;
aws ec2 start-instances --instance-ids i-ba154f3c --region us-east-x

AWS CLI を使用した EC2 インスタンスの起動および停止方法の詳細については、AWS CLI ドキュメントの「start-instances」と「stop-instances」を参照してください。

Data Pipeline のスケジュールとログ記録を設定する

1.   適切なスケジュール情報を指定して各 Data Pipeline のスケジュールを設定します。詳細については、「パイプラインのスケジューリング」を参照してください。

2.Amazon S3 の場所をコンソールで指定するか、SDK または CLI のデフォルトオブジェクト内の pipelineLogUri で指定することによって、パイプライン作成時のパイプラインレベルのログ記録を有効にします。詳細については、「パイプラインのログの表示」を参照してください。

注意: Data Pipeline のログ記録は必須ではありません。ただし、有効にしていない場合、Data Pipeline の検証を実行すると、コンソールに警告が表示されます。

3.   セキュリティアクセスオプションを設定します。
- IAM Roles (IAM ロール): Custom Pipeline Role: DataPipelineDefaultRole を選択します。
- EC2 Instance Role (EC2 インスタンスロール): DataPipelineDefaultResourceRole​ を選択します。

注意: Data Pipeline によって必要な IAM ロールが作成されます。

ロールのアクセス権限を更新して、パイプラインをアクティブ化します。

1.   AWS マネジメントコンソールで、[IAM]、[ロール] の順に選択します。
– 管理ポリシー以外のポリシーを使用している場合は、DataPipelineDefaultResourceRole ロールを選択し、「DataPipelineDefaultResourceRole のカスタムポリシーの作成と検証」のステップ 7 で説明しているように、関連付けられているポリシーを編集します。
– それ以外の場合は、「DataPipelineDefaultResourceRole のカスタムポリシーの作成」で説明しているように、DataPipelineDefaultResourceRole をカスタムポリシーに関連付けます。詳細については、「パイプラインの編集」を参照してください。

2.   コンソールで [有効化] を選択して、パイプラインをアクティブ化します。コンソールで Data Pipeline のアクティビティをモニタリングして、アクションがスケジュールどおりに正常に完了していることを確認できます。


このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2015 年 05 月 21 日

更新: 2018 年 08 月 24 日