タイトルからだと分かり難いかもしれませんが、SQSのキューのメッセージを処理し続けて、メッセージがなくなったらシャットダウンするようなインスタンスを作ってみたいと思っています。
※ OSはCentOS(5.6)です。

はじめに、下記のようなPHPスクリプトを用意します。

▼ common.php

define("AWS_KEY"         , "AAAAAAAA");
define("AWS_SECRET_KEY"  , "SSSSSSSS");
define("CP_SQS_URL_CRAWL", "https://sqs.ap-northeast-1.amazonaws.com/000000000000/crawl");

▼ receive-message

require_once("/opt/cloudpack/bin/common.php");
require_once("/opt/aws/php/sdk.class.php");
$sqs = new AmazonSQS();
$sqs->set_region(AmazonSQS::REGION_APAC_NE1);

// キューのメッセージが0で無い限り繰り返し
while($sqs->get_queue_size(CP_SQS_URL_CRAWL) != 0) {
  $response = $sqs->receive_message(CP_SQS_URL_CRAWL);
  if(isset($response->body->ReceiveMessageResult->Message)) {
     var_dump($response->body->ReceiveMessageResult->Message->Body);
     sleep(60); // ここに実際の処理を記述
     $sqs->delete_message(CP_SQS_URL_CRAWL, $response->body->ReceiveMessageResult->Message->ReceiptHandle);
  }
}

// メンテナンス用に"User Data"が設定されていたらシャットダウンしないように
$curl = curl_init("http://169.254.169.254/1.0/user-data");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_exec($curl);
if(curl_getinfo($curl, CURLINFO_HTTP_CODE) != 200) {
  exec("/sbin/shutdown -h now");
}

curl_close($curl);

上記のスクリプトを起動時に実行するため、下記のように/etc/rc.localに記述します。

▼ /etc/rc.local

...
# For Crawl
/opt/cloudpack/bin/receive-message >>/var/log/crawl.log 2>&1

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら