※テスト的に下記記事と同内容を投稿しています。
※qiitaの投稿は消してこちらに統一しました。
はじめに
AWS Batchは、ほどよくマネージドなジョブキュー/ワーカーサービスとして使用できます。
ジョブはDockerコンテナなのでポータブルでありつつ、キューやワーカーの実行環境といったアプリケーション(というかビジネスロジックというか)から切り離せるレイヤはマネージドなサービスでユーザはあまり管理しなくていい。
というわけで個人的にけっこう気に入っているサービスなのですが、同じAWSでもECS/EKS/Fargateといったコンテナサービスと比べると何となく地味で目立たない存在。。。
だからというわけではないですが、最近表題のとおりphpからAWS Batchジョブを実行する機会がありましたのでサンプルコードをご紹介します。
実現すること
表題の通りで、AWS BatchのsubmitJobとは要はエンキューしてワーカーに非同期で仕事させるということです。
前提条件
- php5.5.0以上がインストール済み
- 以下のAWS Batchジョブが実行可能であること
- コンピューティング環境がap-northeast-1にある
- ジョブ定義:test-batch-job
- ジョブキュー:test-queue
param1
,param2
の2つのパラメータを持つ
- AWS Batchを使ったことがないけどとりあえず試してみたい場合はこちら等を参考にしてみてください。
【新サービス】AWS BatchがGA(一般利用開始)になったので使ってみた | DevelopersIO
事前準備
AWS SDK for PHPのインストール
composerも何もない前提で書きます。
それぞれ以下のコマンドを実行。
composerをダウンロード
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
ref. https://getcomposer.org/download/
AWS SDK for PHPのインストール
php -d memory_limit=-1 composer.phar require aws/aws-sdk-php
ref. https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/getting-started_installation.html
サンプルコード
AWS SDK for PHPをインストールしたディレクトリに以下のファイルを保存します。
|
|
-
‘jobDefinition’ に上記のようにジョブ定義名のみ指定すると、そのジョブ定義の最新リビジョンが使用されます。特定のリビジョンで実行したい場合は
test-batch-job:10
のようにリビジョン番号を指定します。 -
以下の場合、コメントアウトしてあるconfig内の’credentials’の設定は不要です
-
上記のどれでもない場合は’credentials’の設定が必要となりますが、基本的にはコード内にcredentialを持つことはセキュリティ的な理由から非推奨とされています、念のため。
-
$args
をいじればジョブ定義のその他設定値を上書きして実行できます。
AWS SDK for PHP 3.x
実行
$ php ./submit-job.php
jobName: test-batch
jobId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
マネジメントコンソール等からも実行状況が確認できます。
蛇足
ここでは便宜的にペライチスクリプトとしてご紹介しましたが、実際のアプリケーションに組み込む場合はビジネスロジックが直接AWS Batchをさわるのではなく、1枚ラッパー的な層を挟んでそいつにエンキューってノリにしたほうが良いかと思います。
せっかくほどよくマネージドなジョブキュー/ワーカーサービスなので、アプリケーションも極力それに依存しない書き方ができるといいですね。
参考文献
AWS SDK for PHP バージョン 3 の要件と推奨事項 - AWS SDK for PHP
AWS SDK for PHP バージョン 3 の基本的な使用パターン - AWS SDK for PHP