AWS EC2インスタンスのPHPからSQSのキューへメッセージを送信する
全体図
今回から3回に分けてSQSを使用した疎結合なシステムを構築していきます。
今回のゴール
第1回目は、Amazon Linux2のEC2インスタンスにPHPをインストールしてSQSのキューへメッセージを送信できるようにします。
(上記図中の赤枠の部分)
SQSはFIFOキューを使用します。
SQSの設定
【詳細】
[タイプ]:FIFO
[名前]:test-queue.fifo
【設定】
[メッセージ保持期間]:14日
[コンテンツに基づく重複除外]:有効
[重複除外スコープ]:メッセージグループ
今回はKMSのカスタマーマスターキーで暗号化するので暗号化に関する設定を行いました。
【暗号化】
[サーバー側の暗号化]:有効
[カスタマーマスターキー]:入力
[データキー再利用期間]:1時間
EC2にPHPをインストール
下記の過去記事を参考にしてEC2にPHPをインストールしました。
PHPファイルの作成
下記の内容でsqsSend.phpを作成しました。
今回は東京リージョンを使用しているのでap-northeast-1としておりますが、適時変更してください。
<?php
require 'vendor/autoload.php';
use Aws\Sqs\SqsClient;
use Aws\Exception\AwsException;
define('SQS_URL', 'https://sqs.ap-northeast-1.amazonaws.com/(your account ID)/test-queue.fifo');
try{
$client = new SqsClient([
'region' => 'ap-northeast-1',
'version' => '2012-11-05',
]);
$body = ['no'=>1,
'title'=>'タイトルあああああ',
'description'=>'説明いいいいい'
];
$params = [
'MessageAttributes' => [
'Title' => [
'DataType' => 'String',
'StringValue' => 'タイトル',
]
],
'MessageBody' => json_encode($body),
'QueueUrl' => SQS_URL,
'MessageGroupId' => 'test-group',
];
$result = $client->sendMessage($params);
var_dump($result);
} catch(AwsException $e){
error_log($e->getMessage());
}
EC2にロールのアタッチ
ポリシーの作成
EC2インスタンスにSQS・KMSに対するポリシーをアタッチしたロールを適用します。
KMS関連のポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:DescribeKey",
"kms:ReEncrypt*",
"kms:GenerateDataKey*"
],
"Resource": "(ARN)"
}
]
}
SQS関連のポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"sqs:SendMessage",
"sqs:GetQueueAttributes"
],
"Resource": "(ARN)"
}
]
}
確認
作成したPHPを実行してキューにメッセージを送信します。
php sqsSend.php
キューのメッセージ件数を確認して件数が表示されることを確認しました。
aws sqs get-queue-attributes --attribute-names ApproximateNumberOfMessages --queue-url https://sqs.ap-northeast-1.amazonaws.com/(your AWS Account ID)/test-queue.fifo
{
"Attributes": {
"ApproximateNumberOfMessages": "1"
}
}
次回
次回は、「Lambdaでイベントソースマッピング(トリガー)を使用してSQSのメッセージを受信する」を構築していきます。