【技術検証】CloudFormation × SQS でFIFOキューを構築するチュートリアルをやってみた

## はじめに

今回は、AWSのマネージドメッセージキューサービスである「Amazon SQS（Simple Queue Service）」を、AWS CloudFormation を使って作成してみました。

下記のハンズオンの内容となり、自分の環境で実際に手を動かして構築し、その内容をまとめたものになります。

https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/create-queue-cloudformation.html

SQSは今まで触ったことのないサービスでしたが、サーバーレスアーキテクチャやマイクロサービスの間の非同期通信にとても便利なサービスという印象です（AWSの認定試験で勉強しました！）。

## Amazon SQSとは？

Amazon SQSは、マイクロサービス、分散システム、およびサーバーレスアプリケーション向けに設計された、完全マネージド型のメッセージキューサービスです。

https://aws.amazon.com/jp/sqs/

アプリケーション間で非同期にメッセージをやりとりするために使われ、信頼性が高く、スケーラブルで、使いやすいのが特徴です。

**このサービスです！（今まで使ったことなかったです...）**

![Screenshot 2025-06-21 at 14.48.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/832c2210-c0c5-4d28-ba48-332bfa59f523.png)

過去にLambda関連の記事で一度取り上げたことがあるサービスなので、その記事のリンクを掲載しておきます（メインはLambdaですが...）。

https://qiita.com/free-honda/items/43de33ee3587c474f3a1

## 何が嬉しいのか？

* **非同期処理が可能**：処理のボトルネックを分離できる
* **スケーラブル**：トラフィックの急増にも対応
* **マネージド型**：インフラ管理が不要
* **高い可用性**：自動で冗長性を確保
* **サーバーレスとの相性抜群**：LambdaやStep Functionsと連携可能

**個人的にわかりやすかったサイトです**

https://business.ntt-east.co.jp/content/cloudsolution/column-135.html



## 実際にチュートリアルで作ってみた

今回は、AWS CloudFormation コンソールからFIFOタイプのSQSキューを作成してみました。

### 使用したテンプレート（MyQueue.json）

```json
{
   "AWSTemplateFormatVersion": "2010-09-09",
   "Resources": {
      "MyQueue": {
         "Properties": {
            "QueueName": "MyQueue.fifo",
            "FifoQueue": true,
            "ContentBasedDeduplication": true
             },
         "Type": "AWS::SQS::Queue"
         }
      },
   "Outputs": {
      "QueueName": {
         "Description": "The name of the queue",
         "Value": {
            "Fn::GetAtt": [
               "MyQueue",
               "QueueName"
            ]
         }
      },
      "QueueURL": {
         "Description": "The URL of the queue",
         "Value": {
            "Ref": "MyQueue"
         }
      },
      "QueueARN": {
         "Description": "The ARN of the queue",
         "Value": {
            "Fn::GetAtt": [
               "MyQueue",
               "Arn"
            ]
         }
      }
   }
}
```

### 作成手順（AWSマネジメントコンソール）

- CloudFormationコンソールで「スタックの作成」→「新しいリソースを使用（標準）」を選択

![Screenshot 2025-06-21 at 14.10.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/45118fff-ddb3-4c9a-8a89-1b6c2285a4db.png)

- 「テンプレートファイルをアップロード」で `MyQueue.json` を選択

![Screenshot 2025-06-21 at 14.12.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/f6b0c419-e1cd-49e8-895c-37098445b4a4.png)


- スタック名に `MyQueueStack` を入力

![Screenshot 2025-06-21 at 14.13.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/accd0daa-869a-40f4-b385-84de0dd56ea2.png)

- オプションはそのまま変更せずに「次へ」

![Screenshot 2025-06-21 at 14.13.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/4e078dcd-df40-4d70-ba23-f18c1c720f1f.png)


- 内容を確認して「送信」

![Screenshot 2025-06-21 at 14.14.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/817f1715-2e25-4e3a-937d-191569d3b4c4.png)

**CloudFormation のイベントが正常に実行されていることも確認でき、問題ありませんでした！**

![Screenshot 2025-06-21 at 14.16.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/9ed6221d-07e2-44ff-87fe-84627c803389.png)


マネジメントコンソール上で、想定通りに作成されていることは確認できましたが、まだ何もリソースと紐付けていないため、現時点では「作成しただけ」の状態になっています。


![Screenshot 2025-06-21 at 14.45.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/1f6ba7be-7130-493d-85de-fc7fb0e4e6be.png)

***明日は、このリソースにSNSやLambda関数を紐付けて、いろいろと検証してみようと思っています〜***

## まとめ

ここまで読んでいただき、ありがとうございました！Amazon SQSは、非同期処理を取り入れたいときや、システムの結合度を下げたいときに非常に便利だと感じました。

:::note info
**一方で、使いこなすにはまだまだ理解が足りていない部分も多く、これからしっかり勉強していきたいと思います！**
:::

今回は基本のキュー作成だけでしたが、今後はLambda連携やデッドレターキューとの組み合わせなども試していきたいと思います...！