AWS SQSを使用した疎結合なシステムを構築①


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のメッセージを受信する」を構築していきます。

, , ,

コメントを残す

メールアドレスが公開されることはありません。