いずみこんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴10年)で、資格は13個保有しています。
「AWS SQSをPythonから使ってメッセージキューを実装する方法を知りたい」とお考えではありませんか?
処理を非同期化したいものの、SQSのAPI呼び出し方が分からず手が止まっている方は多いです。
SQSはboto3を使えば数行のコードでキューの作成・送信・受信・削除まで実装できます。



送信と受信の非対称な部分だけ押さえればすぐ使えるようになりますよ。
ということで、本記事ではAWS SQSをPythonで使ったメッセージキューを実装する方法を解説します。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【AWS】SQSをPythonで使ったメッセージキューを実装する方法
早速ですが、SQSをPythonで使ったメッセージキューの実装方法を解説します。
SQSとは
SQSはAWSが提供するフルマネージドのメッセージキューサービスです。
送信側と受信側の処理を切り離せるため、時間のかかる処理をバックグラウンドに逃がしたい場合によく使われます。
キューには標準キューとFIFOキューの2種類があり、順序保証や重複排除の要件に応じて使い分けます。
事前準備
PythonからSQSを操作するには、AWS公式のSDKであるboto3を使います。
pipでboto3をインストールします。
pip install boto3AWS CLIのconfigureコマンドで、アクセスキーとシークレットキーを設定します。
aws configure環境変数のAWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYで設定することも可能です。
キューを作成する
まずはキューを作成します。
import boto3
sqs = boto3.client("sqs", region_name="ap-northeast-1")
response = sqs.create_queue(
QueueName="order-queue",
Attributes={
"DelaySeconds": "0",
"VisibilityTimeout": "30",
},
)
queue_url = response["QueueUrl"]
print(queue_url)create_queueメソッドを呼ぶと、キューのURLが返ってきます。
返ってきたキューのURLは、送信・受信・削除のすべての操作で使うので保存しておきます。



VisibilityTimeoutは、メッセージを受信してから削除されるまでの間、他の受信処理に見えなくする秒数です。
処理に30秒以上かかるなら、もう少し長めに設定しておくと安全です。
メッセージを送信する
send_messageメソッドで、キューにメッセージを送信します。
response = sqs.send_message(
QueueUrl=queue_url,
MessageBody="注文データを処理してください",
MessageAttributes={
"OrderId": {
"StringValue": "12345",
"DataType": "String",
}
},
)
print(response["MessageId"])MessageBodyには送信したい本文の文字列を、MessageAttributesには検索や振り分けに使う付加情報を設定します。
送信が成功すると、MessageIdが発行されます。
メッセージを受信する
receive_messageメソッドで、キューからメッセージを受信します。
response = sqs.receive_message(
QueueUrl=queue_url,
MaxNumberOfMessages=10,
MessageAttributeNames=["All"],
WaitTimeSeconds=20,
)
messages = response.get("Messages", [])
for message in messages:
print(message["Body"])
print(message["ReceiptHandle"])WaitTimeSecondsに1以上の値を設定すると、ロングポーリングになります。
ロングポーリングを使うと、キューが空の間はAPI呼び出しを待機できるため、無駄なリクエスト回数を減らせます。
MaxNumberOfMessagesには、1回のリクエストで受信するメッセージ数の上限(最大10件)を指定します。



受信したメッセージにはReceiptHandleが付いていますが、送信時のMessageIdとは別物です。
削除するときはReceiptHandleの方を使うので、混同しないように注意してください。
メッセージを削除する
処理が終わったメッセージは、delete_messageメソッドで削除します。
for message in messages:
# メッセージの処理
sqs.delete_message(
QueueUrl=queue_url,
ReceiptHandle=message["ReceiptHandle"],
)delete_messageを呼ばないと、VisibilityTimeoutで設定した秒数が経過した後に同じメッセージが再び受信されます。
処理の完了とメッセージの削除は、必ずセットで実装します。
FIFOキューを使う場合
メッセージの順序保証や重複排除が必要な場合は、FIFOキューを使います。
response = sqs.create_queue(
QueueName="order-queue.fifo",
Attributes={
"FifoQueue": "true",
"ContentBasedDeduplication": "true",
},
)
fifo_queue_url = response["QueueUrl"]
sqs.send_message(
QueueUrl=fifo_queue_url,
MessageBody="注文データを処理してください",
MessageGroupId="order-group",
)FIFOキューを使う場合、キュー名は必ず「.fifo」で終わらせます。
送信時にはMessageGroupIdの指定が必須で、同じグループ内のメッセージだけ送信順序が保証されます。



標準キューは順序が入れ替わったり重複配信されたりする可能性があるので、処理側を冪等に作っておくと安心です。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【厳選】フリーランスエンジニアにおすすめなエージェント3選


フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。
僕が実際に利用しているおすすめエージェントを紹介しますね。



エージェントは必ず複数登録してください。
担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…
僕は実際に5つのエージェントを使い回していますよ。
フリーランスを始めるなら「レバテックフリーランス


」
- 業界最大級の案件数。
- 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
- 案件参画中のフォローの充実。
※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。
レバテックフリーランス
![]()
![]()
とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!



僕もはじめてフリーランスの案件を貰ったのはレバテックフリーランス
![]()
![]()
保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。
手厚い保障を重視したいなら「Midworks


」
- 手厚い保障で正社員並みの安心感。
- 還元率60%超え&単価公開でクリアな契約。
- 給与保障制度(審査あり)。
Midworks
![]()
![]()
フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。



僕も何度か案件を紹介してもらいました。
自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。
週2〜3日の案件探しなら「ITプロパートナーズ


」
- IT案件に特化したフリーランスエージェント。
- 週2〜3日の案件が豊富。
- リモート案件が多く、直エンドなので単価も高い。
※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。
ITプロパートナーズ
![]()
![]()
週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。



週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。
とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!
よくある質問
MessageIdとReceiptHandleは何が違いますか?
MessageIdは送信時に発行される、メッセージ自体を識別するIDです。
ReceiptHandleは受信のたびに発行される値で、delete_messageやvisibility timeoutの変更で使います。
メッセージを削除し忘れるとどうなりますか?
VisibilityTimeoutで設定した秒数が経過すると、削除されなかったメッセージは再び受信可能な状態に戻ります。
結果として同じメッセージを二重に処理してしまう可能性があるため、処理側は冪等に実装しておく必要があります。
標準キューとFIFOキューはどちらを選べばいいですか?
順序保証や重複排除が不要で、大量のメッセージをさばきたい場合は標準キューを選びます。
注文処理のように送信順序を守りたい業務では、FIFOキューを選びます。
処理に失敗したメッセージはどうすればいいですか?
デッドレターキューを設定しておくと、規定回数だけ処理に失敗したメッセージを別のキューへ自動的に振り分けられます。
デッドレターキューに溜まったメッセージを個別に調査すれば、失敗原因の特定にも役立ちます。
まとめ
今回は、AWS SQSをPythonで使ったメッセージキューを実装する方法について解説しました。
以下が本記事のまとめになります。



最後までお読みいただき、ありがとうございました!
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。








