Help us understand the problem. What is going on with this article?

AWS DataPipeline の ShellCommandActivity を使って特定のタグを持つインスタンスを日次停止する

More than 3 years have passed since last update.

AWS Data Pipeline とは
AWS Data Pipelineで日次バッチ処理取得データをS3にポストする

AWS DataPipeline は DB 接続だったり、S3 上のログを EMR に流しこんだりなど日次バッチを AWS 上で定義、実行ができるというもので、とても便利そうです。

今回は 0:00 に起動している ec2 インスタンスがあったら容赦なく停止するというバッチを AWS DataPipeline の ShellCommandActivity を使って作ってみます。

なお、VPC ではなく、EC2−Classic で試してみます。

前提条件

  • ec2 インスタンスには dont_stop というタグが付与されているものとします
  • dont_stop タグの value が False のインスタンスを停止対象とします

はまったこと

  • ShellCommandActivity
    • ベースは amazon-linux 2013.03
      • 今のところ HVM インスタンスは非サポート
      • awscli が 0.9 と非常に古い
        • --query や --filters が使えないので要 update
    • エラー処理をちゃんとしないとキレイに terminate されない

ManageMentConsole から pipeline を作る

Create Pipeline

Screen Shot 2015-12-09 at 18.25.16.png

  • NameDescription に必要な情報を入力します
  • Building using a template では ShellCommandActivity 選択します

Parameters

Screen Shot 2015-12-09 at 18.45.03.png

  • S3 フォルダの指定は必須です
    • 今回は S3://my-bucket/output s3://my-bucket/input のようにします
  • Shell command to run にスクリプトを貼り付けます
    • \ を使う場合はエスケープする必要があります

スクリプトはこんなのです。

#!/bin/bash

sudo yum update aws-cli -y

AWS="/usr/bin/aws --region ap-northeast-1"

ids=$(${AWS} ec2 describe-instances --filters \\
    "Name=tag:dont_stop,Values=False" \\
    "Name=instance-state-code,Values=16" \\
    --query 'Reservations[].Instances[].InstanceId' \\
    --output text)

if [ -z "${ids}" ]; then
    echo "nothing running instance."
else
    echo "stop instances ids -> ${ids}"
    ${AWS} ec2 stop-instances --instance-id ${ids} \\
    && echo "complete ec2-auto-stop."
fi

exit 0

Schedule

Screen Shot 2015-12-09 at 18.36.32.png

  • 12/9 の 0:00 から日次で動作するように設定します
  • Ending を Nerver にして期限は定めません

Pipeline Configuration

Screen Shot 2015-12-09 at 18.38.49.png

  • Logging を有効として、ログの格納場所を指定します
  • ActivityLog / stdout / stderr が出力されます

Security/Access

Screen Shot 2015-12-09 at 18.38.57.png

  • ここでは default とします

Tags

Screen Shot 2015-12-09 at 18.39.03.png

  • 必要な情報を入力します
  • ここまできたら Edit in Architect をクリックします

Architect

Architect と呼ばれる画面に遷移します。要素が色々あります。

Screen Shot 2015-12-09 at 18.48.08.png

Resources

EC2 インスタンスについての情報を記入するところで、あった方がよさそうなオプションを追加してみます。

Screen Shot 2015-12-09 at 19.09.48.png

  • Add an Optional field から 2 つ追加してみます
    • Action On Resource Failure の時、一回だけ retry します
    • Action On Task Failure の時、instance は terminate します

Save pipeline

Pipeline を保存します。すると Activate するか聞かれますが、まだしません。

IAM Role

Pipeline 経由で起動した EC2 インスタンスの IAM Role を調整します。
Architect に遷移した際に IAM Role が自動で作成されています。

Screen Shot 2015-12-09 at 19.27.45.png

この内、DataPipelineDefaultResourceRoleが ec2 インスタンスに割り当てられる IAM Role です。
デフォルトではec2:StopInstancesの権限がないので、追加します。

Activate

Architect画面に戻り、Activate します。
以下の様に pipeline の進捗が確認できるようになっています。

Screen Shot 2015-12-09 at 19.36.07.png

ec2 インスタンスも起動しています。
(Resources から keypair を指定して ssh してみましたが、ログインできませんでした)

Screen Shot 2015-12-09 at 19.39.24.png

Finished

しばらくすると完了します。

Screen Shot 2015-12-09 at 19.47.39.png

この一連の処理で 12 min かかってるのであまり早くはないです。
画面にある Logs から stdout を見ることができるので、失敗した時はデバッグに使えます。

さいごに

pipeline 定義は json にエクスポートできるのですが、これを使って aws cli からも利用できそうです。
AWS Data Pipelineをスケジューラとして使う

が、それはまた今度・・・

sansan
法人向け名刺管理サービスSansan及び個人向け名刺管理サービスEightを企画・開発・販売するベンチャー
http://jp.corp-sansan.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした