週末や夜間などの特定の時間に Amazon EC2 インスタンスを実行する必要はありません。スケジュールした間隔で、インスタンスを終了せずに、Amazon EC2 インスタンスを停止して起動する方法を教えてください。
スケジュールした間隔 EC2 インスタンスを停止して開始する便利な方法を教えてください。そのためには PowerShell と AWS CLI スクリプトを使用できます。ただし、スクリプトによるエラーが発生しやすくなり、アクセスキーの管理が必要になり、余計な外部依存関係が生じることがあります。
AWS Data Pipeline はこのタスクに最適です。Data Pipeline は、AWS の技術を使用しており、設定したスケジュールで外部依存関係なしに AWS CLI コマンドを実行するように設定できます。Data Pipeline は、S3 にログを書き込み、IAM ロールのコンテキストで実行されるため、キー管理の要件がなくなります。Data Pipeline は、費用対効果もあります。たとえば、Data Pipeline の無料利用枠を使用すると、1 日 1 回、インスタンスを停止して起動できます。詳細については、「AWS Data Pipeline 料金表」を参照してください。
注
Amazon EC2 t1.micro インスタンスは、Data Pipeline を実行するためのホスト環境として起動されます。この目的で起動された EC2 インスタンスは、50 分のデフォルトのタイムアウト期間に実行されます。データパイプラインの実行をホストするために使用されるすべてのリソースがアカウントに課金されます。100 分以内に EC2 インスタンスを停止して再起動するパイプラインを実行すると、消費されるリソースの量は、EC2 t1.micro インスタンスを単に実行し続けている場合と変わりません。この記事で説明している方法で、消費されるリソースが節約されることを確認するには、EC2 t1.micro 以上のインスタンスを 100 分を超えて停止して再起動する必要があります(起動に 50 分、停止に 50 分)。
Data Pipeline で、DataPipelineDefaultResourceRole ロールのカスタマー管理ポリシーを作成する必要があるのは、このロールに関連付けられているデフォルトのポリシーが AmazonEC2RoleforDataPipelineRole AWS 管理ポリシーである場合です。AWS 管理ポリシーが読み取り専用であるためです。DataPipelineDefaultResourceRole にアタッチされたポリシーが AWS 管理ポリシーでない場合、カスタマー管理ポリシーを作成する必要はありませんが、代わりに、DataPipelineDefaultResourceRole ロールに割り当てられたポリシーを編集できます。DataPipelineDefaultResourceRole ロールのカスタマー管理ポリシーを作成するには、以下の手順に従います。
- AWS マネジメントコンソールの [Security and Identity ] セクションで、[Identity & Access Management (IAM)] を選択して、Identity and Access Management ダッシュボードを開きます。
- [Policies] を選択します。
- [Create Policy] を選択して、[Create Policy] ページを開きます。
- [Create Your Own Policy] オプションを選択します。
- DataPipelineDefaultResourceRole に関連付けられているポリシー名(DataPipelineDefaultResourceRole_EC2_Policy など)を入力します。
- ポリシーの説明(「Policy associated with the DataPipelineDefaultResourceRole when starting and stopping EC2 Instances with Data Pipeline」など)を入力します。
- 新しいポリシーの [Policy Document] セクションに以下の情報を入力します。
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*",
"ec2:Describe*",
"ec2:Start*",
"ec2:RunInstances",
"ec2:Stop*",
"datapipeline:*",
"cloudwatch:*"
],
"Resource": [
"*"
]
}
]
}
注
ここで説明している同じアクセス権限を、DataPipelineDefaultResourceRole ロールに現在関連付けられているカスタマー管理ポリシーすべてに適用することをお勧めします。 - [Validate Policy] を選択します。ポリシーの検証後、[Create Policy] を選択して、新しいポリシーを作成します。
- 新しいポリシーの作成後、そのポリシーを DataPipelineDefaultResourceRole ロールにアタッチします。
- [Policy Type ] フィルタ式に DataPipeline または他の該当するプレフィックスを入力します。新しく作成したポリシーの横のチェックボックスをオンにし、[Policy Actions] ドロップダウンメニューから [Attach] オプションを選択します。
- [Attach Policy ] ページで、フィルタ式「datapipeline」を入力し、フィルタによって返される DataPipelineDefaultResourceRole エントリの横のチェックボックスをオンにします。
- ページの下部で [Attach Policy ] を選択して、DataPipelineDefaultResourceRole に新しいポリシーを関連付けます。
以下の手順に従って、スケジュールした間隔で Amazon EC2 インスタンスを停止して起動する AWS CLI コマンドを実行する、Data Pipeline を作成して設定します。
1. パイプラインを作成する
Data Pipeline コンソールを開きます。[Create New Pipeline] を選択し、以下の情報を入力して、2 つのパイプラインを作成します。
Name: 「Start EC2 instances」、「Stop EC2 instances」など。
Description: 必要に応じてパイプラインに関連する詳細を入力します。
Source: [Build using template ] を選択してから、テンプレート [Run AWS CLI command] を選択します。
AWS CLI command: パイプラインによる処理内容を指定します。2 つのパイプラインを作成します。1 つは、aws ec2 start-instances コマンドの実行用、もう 1 つは aws ec2 stop-instances コマンドの実行用です。
注意: ec2 start-instances と ec2 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」を参照してください。
2. Data Pipeline のスケジュールを適用する
インスタンスを起動して停止するパイプラインを別々に作成した後、適切なスケジュール情報で各パイプラインを設定します。詳細については、「パイプラインのスケジューリング」を参照してください。
3. Data Pipeline のログ記録を設定する
各パイプラインのログ記録を有効にし、ログの保存先として同じリージョン内の S3 バケットを指定します。Data Pipeline のログ記録は必須ではありません。ただし、有効になっていなくても、Data Pipeline の検証を実行すると、コンソールに警告が表示されます。
4. セキュリティアクセスを実装する
以下のオプションを設定して、適切なセキュリティアクセスを実装します。
IAM Roles: Custom
Pipeline Role: DataPipelineDefaultRole
EC2 Instance Role: DataPipelineDefaultResourceRole
注
Data Pipeline によって必要な IAM ロールが作成されます。
5. ロールのアクセス権限を更新する
AWS マネジメントコンソールで、[IAM]、[Roles] の順に選択します。管理ポリシー以外のポリシーを使用している場合は、DataPipelineDefaultResourceRole ロールを選択し、「DataPipelineDefaultResourceRole のカスタムポリシーの作成」のステップ 7 で説明しているように、関連付けられているポリシーを編集します。それ以外の場合は、「DataPipelineDefaultResourceRole のカスタムポリシーの作成」で説明しているように、DataPipelineDefaultResourceRole をカスタムポリシーに関連付けます。詳細については、「パイプラインの編集」を参照してください。
6. パイプラインをアクティブ化する
コンソールで [Activate ] を選択して、パイプラインをアクティブ化します。コンソールで Data Pipeline のアクティビティをモニタリングして、アクションがスケジュールどおりに正常に完了していることを確認できます。
EC2, Data Pipeline, スケジュール, 停止, 起動, インスタンス