RabbitMQ は、AMQP、MQTT、STOMP、HTTP、WebSocket などの複数のメッセージングプロトコルをサポートするオープンソースのメッセージブローカーです。RabbitMQ は使いやすく、拡張性が高く、高い可用性を実現します。分散システムにおける通信を調整・管理し、非同期メッセージングを活用して、システムのデカップリング、優れた拡張性、並行処理、フォールトトレランスを向上させます。安定したパフォーマンス、豊富な機能セット、および活発なコミュニティによるサポートから、RabbitMQ は企業向けアプリケーションにおけるメッセージングおよびタスク処理に広く採用されています。本トピックでは、Elastic Compute Service (ECS) インスタンス上へのオープンソース RabbitMQ のデプロイ方法について説明します。
RabbitMQ のデプロイ
手動デプロイ
このセクションでは、最新バージョンの RabbitMQ をインストールする方法について説明します。その他のバージョンおよびインストール方法については、「RabbitMQ のインストール」をご参照ください。
前提条件
RabbitMQ を手動でデプロイする前に、以下の要件を満たす ECS インスタンスを作成してください。
インスタンスにパブリック IP アドレスが割り当てられているか、または Elastic IP Address (EIP) が関連付けられています。詳細については、「EIP」をご参照ください。
オペレーティングシステム:Ubuntu 20.04、Ubuntu 22.04、または Debian 11.0 ~ 12.5。
その他のサポート対象 OS やインストール方法については、「RabbitMQ のインストール」をご参照ください。
セキュリティグループルール:セキュリティグループにインバウンドルールを追加し、ポート 22、80、15672 のトラフィックを許可してください。
説明 MQ ツールを使用して RabbitMQ サーバーに接続する場合は、ポート 5672 のトラフィックも許可する必要があります。
操作手順
リモート接続には、RabbitMQ がデプロイ済みのインスタンスが必要です。
詳細については、「ワークベンチを使用した Linux インスタンスへの接続」をご参照ください。
RabbitMQ をインストールします。
RabbitMQ の基本的な依存関係をインストールします。
sudo apt-get install curl gnupg apt-transport-https -y
RabbitMQ および Erlang の GPG 公開鍵をダウンロードし、システムの信頼されたキーリングに追加します。
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null
RabbitMQ および Erlang の公式 Advanced Package Tool (APT) リポジトリを /etc/apt/sources.list.d/rabbitmq.list ファイルに追加します。
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
EOF
ローカルパッケージインデックスを更新します。
必要な Erlang パッケージをインストールします。
sudo apt-get install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
RabbitMQ をインストールします。
sudo apt-get install rabbitmq-server -y --fix-missing
RabbitMQ を構成します。
RabbitMQ を起動時に自動実行可能に設定し、RabbitMQ サービスを起動します。
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server
データセキュリティを確保するため、次のコマンドを実行してデフォルトユーザーを削除します。
RabbitMQ のデフォルトのユーザー名およびパスワードはともに guest です。
sudo rabbitmqctl delete_user guest
RabbitMQ 管理者ユーザーを作成します。
新しいユーザーを作成します。
sudo rabbitmqctl add_user <username> <password>
<username> および <password> を、ご希望のユーザー名およびパスワードに置き換えてください。
新規ユーザーを管理者として設定します。
sudo rabbitmqctl set_user_tags <username> administrator
新しく作成したユーザーにすべての権限を付与します。
sudo rabbitmqctl set_permissions -p / <username> ".*" ".*" ".*"
RabbitMQ 管理 Web インターフェイスを有効化します。
sudo rabbitmq-plugins enable rabbitmq_management
クイックデプロイ
Alibaba Cloud Marketplace のイメージを使用したクイックデプロイ
Alibaba Cloud Marketplace のイメージを使用したクイックデプロイでは、インストールおよび構成の手順を省略できるため、デプロイ時間を大幅に短縮できます。Alibaba Cloud Marketplace のイメージの価格は、イメージの製品ページに記載されています。
Cloud Native MQ for Apache RabbitMQ をクリックして、イメージの詳細ページを開きます。
イメージの製品ページでは、イメージに関する情報およびユーザーガイドを確認できます。
または プランの選択 をクリックします。
カスタム起動 ページで、画面の指示に従って設定項目を完了し、ECS インスタンスを購入します。
設定時に以下のパラメーターに注意してください。その他のパラメーターは必要に応じて設定できます。各パラメーターの詳細については、「カスタム起動タブでのインスタンス作成」をご参照ください。
イメージ: イメージ セクションは、購入したイメージにすでに設定されています。
パブリック IP:パブリック IPv4 アドレスを割り当てる を選択します。
セキュリティグループ:セキュリティグループルールは、ポート 22、80、15672 のトラフィックを許可する必要があります。
RabbitMQ のユーザー名およびログインパスワードを取得します。
RabbitMQ サーバーにリモート接続します。
詳細については、「ワークベンチを使用した Linux インスタンスへの接続」をご参照ください。
次のコマンドを実行して、RabbitMQ のユーザー名およびログインパスワードを取得します。
sudo cat /credentials/password.txt
コマンドの出力例を以下に示します。
rabbitmq_user:RabbitMQ へのログインに使用するユーザー名。
rabbitmq_password:RabbitMQ へのログインパスワード。
rabbitmq_gui_port:RabbitMQ の Web サーバーのポート。
rabbitmq_mq_port:RabbitMQ へのリモート接続ポート。
rabbitmq_er_port:RabbitMQ サーバーが Erlang のプロセス間通信に使用する内部ポート。
rabbitmq_mqtt_port:RabbitMQ サーバーが提供する MQTT サービスのリスニングポート。

Terraform を使用したクイックデプロイ
Terraform は Infrastructure as Code (IaC) ツールです。開発者および運用・保守 (O&M) チームが、インフラストラクチャの作成、デプロイ、管理を自動化する際に利用します。手動操作や手動構成を行わずに、シンプルなコードを記述することで、クラウドインフラストラクチャを定義および構成できます。
操作手順
ワンクリック実行 をクリックして Terraform Explorer を開き、以下の Terraform コードを自動的に読み込みます。
完全な Terraform コードを表示
provider "alicloud" {
region = var.region
}
variable "region" {
default = "cn-beijing"
}
variable "common_name" {
description = "リソース共通の名前。"
type = string
default = "deploy_rabbitmq_by_tf"
}
variable "system_disk_category" {
default = "cloud_essd"
description = "システムディスクのカテゴリ。"
}
variable "instance_password" {
description = "サーバーのログインパスワード。長さは 8 ~ 30 文字で、大文字、小文字、数字、特殊文字 (`~!@#$%^&*_-+=|{}[]:;'<>?,./`) のうち少なくとも 3 種類を含む必要があります。"
type = string
default = "Test@123456"
}
variable "image_id" {
description = "インスタンスのイメージ。Ubuntu のみ対応。"
type = string
default = "ubuntu_22_04_x64_20G_alibase_20241224.vhd"
}
variable "instance_type" {
description = "インスタンスタイプ。"
type = string
default = "ecs.e-c1m2.large"
}
variable "access_ip" {
description = "ECS にアクセスするために使用する IP アドレス。"
type = string
default = "0.0.0.0/0"
}
variable "rabbitmq_user_name" {
description = "RabbitMQ の新規ユーザーを作成します。"
type = string
default = "rabbitmq@new_user"
}
variable "rabbitmq_user_password" {
description = "RabbitMQ 新規ユーザーのパスワード。"
type = string
default = "rabbitmq@pw12345"
}
# 条件を満たす利用可能なゾーンを照会します。
data "alicloud_zones" "default" {
available_disk_category = var.system_disk_category
available_resource_creation = "VSwitch"
available_instance_type = var.instance_type
}
resource "alicloud_vpc" "rabbitmq_vpc" {
vpc_name = "${var.common_name}-vpc"
cidr_block = "192.168.0.0/16"
}
resource "alicloud_vswitch" "rabbitmq_vsw" {
vpc_id = alicloud_vpc.rabbitmq_vpc.id
vswitch_name = "${var.common_name}-vsw"
cidr_block = "192.168.0.0/24"
zone_id = data.alicloud_zones.default.zones.0.id
}
resource "alicloud_security_group" "rabbitmq_sg" {
security_group_name = "${var.common_name}-sg"
vpc_id = alicloud_vpc.rabbitmq_vpc.id
}
resource "alicloud_security_group_rule" "allow_tcp_22" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "22/22"
priority = 1
security_group_id = alicloud_security_group.rabbitmq_sg.id
cidr_ip = var.access_ip
}
resource "alicloud_security_group_rule" "allow_tcp_80" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "80/80"
priority = 1
security_group_id = alicloud_security_group.rabbitmq_sg.id
cidr_ip = var.access_ip
}
resource "alicloud_security_group_rule" "allow_tcp_15672" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "15672/15672"
priority = 1
security_group_id = alicloud_security_group.rabbitmq_sg.id
cidr_ip = var.access_ip
}
resource "alicloud_security_group_rule" "allow_icmp_all" {
type = "ingress"
ip_protocol = "icmp"
nic_type = "intranet"
policy = "accept"
port_range = "-1/-1"
priority = 1
security_group_id = alicloud_security_group.rabbitmq_sg.id
cidr_ip = "0.0.0.0/0"
}
resource "alicloud_instance" "rabbitmq_ecs" {
availability_zone = data.alicloud_zones.default.zones.0.id
security_groups = [alicloud_security_group.rabbitmq_sg.id]
instance_type = var.instance_type
system_disk_category = var.system_disk_category
image_id = var.image_id
instance_name = "${var.common_name}-ecs"
vswitch_id = alicloud_vswitch.rabbitmq_vsw.id
internet_max_bandwidth_out = 10
password = var.instance_password
}
locals {
command_content = <<SHELL
#!/bin/sh
sudo apt-get install curl gnupg apt-transport-https -y
## Team RabbitMQ のメイン署名鍵
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Cloudsmith のコミュニティミラー:モダンな Erlang リポジトリ
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Cloudsmith のコミュニティミラー:RabbitMQ リポジトリ
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null
## Team RabbitMQ が管理する APT リポジトリを追加
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## モダンな Erlang/OTP リリースを提供
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
# 冗長性のための別のミラー
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
## RabbitMQ を提供
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
# 冗長性のための別のミラー
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
EOF
## パッケージインデックスを更新
sudo apt-get update -y
## Erlang パッケージをインストール
sudo apt-get install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
## rabbitmq-server およびその依存関係をインストール
sudo apt-get install rabbitmq-server -y --fix-missing
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server
sudo rabbitmqctl delete_user guest
sudo rabbitmqctl add_user ${var.rabbitmq_user_name} ${var.rabbitmq_user_password}
sudo rabbitmqctl set_user_tags ${var.rabbitmq_user_name} administrator
sudo rabbitmqctl set_permissions -p / ${var.rabbitmq_user_name} ".*" ".*" ".*"
sudo rabbitmq-plugins enable rabbitmq_management
SHELL
}
resource "alicloud_ecs_command" "deploy_rabbitmq" {
name = "DeploydRabbitMQ"
type = "RunShellScript"
command_content = base64encode(local.command_content)
timeout = 3600
working_dir = "/root"
}
resource "alicloud_ecs_invocation" "invocation" {
instance_id = [alicloud_instance.rabbitmq_ecs.id]
command_id = alicloud_ecs_command.deploy_rabbitmq.id
timeouts {
create = "5m"
}
}
output "rabbitmq-login_url" {
value = format("http://%s:15672", alicloud_instance.rabbitmq_ecs.public_ip)
}
必要に応じてパラメーターを変更します。デフォルトでは、中国 (北京) リージョンに 1 つの VPC、1 つの vSwitch、1 つのセキュリティグループ、および 1 つの従量課金 ECS インスタンスが作成されます。ECS インスタンスの課金について詳しくは、「課金概要」をご参照ください。
デバッグ開始 をクリックして、作成されるリソースの詳細をプレビューします。リソース情報に誤りがなければ、プランと適用 をクリックしてリソースの作成を開始します。タスクが正常に実行されると、デプロイが完了します。
RabbitMQ 管理インターフェイスへのログイン
ローカルのブラウザで http://<Linux インスタンスのパブリック IP アドレス>:15672 を入力します。
以下のページが表示されれば、RabbitMQ のインストールが正常に完了したことを意味します。
作成した RabbitMQ 管理者のユーザー名およびパスワードを入力し、ログイン をクリックして RabbitMQ 管理インターフェイスにアクセスします。
RabbitMQ 管理インターフェイスには、以下の情報が表示されます。
オープンソース RabbitMQ のクラウドへの移行
RabbitMQ クラスターの安定性問題(例:メッセージ蓄積、スプリットブレイン)に対処し、高い同時実行性、分散デプロイメント、柔軟なスケーリングを実現したい場合、オープンソース RabbitMQ クラスターを ApsaraMQ for RabbitMQ へ移行できます。詳細については、「オープンソース RabbitMQ のクラウドへの移行」をご参照ください。