RabbitMQ は、Advanced Message Queuing Protocol (AMQP)、Message Queuing Telemetry Transport (MQTT)、Streaming Text Oriented Messaging Protocol (STOMP)、HTTP、WebSockets など、複数のメッセージングプロトコルをサポートするオープンソースのメッセージブローカーです。 RabbitMQ は使いやすく、拡張性が高く、可用性が高いです。 RabbitMQ は、分散システムにおける通信の調整と管理を行い、非同期メッセージングを実装して、システムのデカップリング、スケーラビリティ、同時処理能力、およびフォールトトレランスを向上させます。 RabbitMQ は、安定したパフォーマンス、多様な機能、活発なコミュニティサポートにより、エンタープライズレベルのアプリケーションのメッセージングおよびタスク処理で広く使用されています。このトピックでは、Elastic Compute Service (ECS) インスタンスにオープンソース RabbitMQ をデプロイする方法について説明します。
RabbitMQ のデプロイ
この例では、RabbitMQ の最新バージョンをインストールする方法について説明します。 RabbitMQ の他のバージョンのインストール方法については、「Installing RabbitMQ」を参照してください。
前提条件
次の要件を満たす ECS インスタンスが作成されます。
インスタンスには、システムによってパブリック IP アドレスが割り当てられているか、または Elastic IP Address (EIP) が関連付けられています。 詳細については、「EIP」をご参照ください。
インスタンスは、Ubuntu 20.04、Ubuntu 22.04、または Debian 11.0 から Debian 12.5 の Debian バージョンを実行しています。
サポートされているその他のオペレーティングシステムとインストール方法については、「Installing RabbitMQ」を参照してください。
ポート 22、80、および 15672 でのトラフィックを許可するために、インスタンスのセキュリティグループにインバウンドルールが追加されます。
説明
Message Queue (MQ) ツールを使用して RabbitMQ サーバーに接続するには、ポート 5672 も開く必要があります。
手順
RabbitMQ をデプロイする ECS インスタンスに接続します。
詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。
RabbitMQ をインストールします。
基本的な RabbitMQ 依存関係をインストールします。
sudo apt-get install curl gnupg apt-transport-https -y
RabbitMQ と Erlang の GNU Privacy Guard (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 Packaging 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 のデフォルトアカウントを削除することをお勧めします。
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 を起動し、オープンソース RabbitMQ コンソールに移動します。
sudo rabbitmq-plugins enable rabbitmq_management
Alibaba Cloud Marketplace イメージを使用して RabbitMQ をデプロイする
Terraform を使用して RabbitMQ をデプロイする
Alibaba Cloud Marketplace のイメージを使用して RabbitMQ をデプロイできます。 これにより、RabbitMQ をインストールおよび構成する必要がなくなり、デプロイ時間が大幅に短縮されます。 Alibaba Cloud Marketplace のイメージ詳細ページの料金タブに表示される価格が適用されます。
Cloud Native MQ for Apache RabbitMQ Powered by Websoft9 をクリックして、イメージ詳細ページに移動します。
イメージ詳細ページで、イメージ情報とユーザーガイドを入手できます。
[choose Your Plan] をクリックします。
ECS インスタンス購入ページの [カスタム起動] タブで、プロンプトに従って ECS インスタンスを構成して購入します。
次のパラメーターに注意してください。 ビジネス要件に基づいて他のパラメーターを構成します。 その他のパラメーターについては、「カスタム起動タブでインスタンスを作成する」をご参照ください。
[イメージ]: 購入したイメージは、[イメージ] セクションで自動的に選択されます。
[パブリック IP アドレス]: [パブリック Ipv4 アドレスを割り当てる] を選択します。
[セキュリティグループ]: ポート 22、80、および 15672 でのトラフィックを許可するセキュリティグループのインバウンドルールを構成します。
RabbitMQ サーバーにログインするために使用するユーザー名とパスワードを取得します。
RabbitMQ サーバーに接続します。
詳細については、「Workbench を使用して SSH 経由で 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: Erlang での処理間通信のために RabbitMQ サーバーが使用する内部ポート。
rabbitmq_mqtt_port: RabbitMQ サーバーが提供する MQTT サービスのリスニングポート。

Terraform は、開発者と O&M チームがクラウドインフラストラクチャの作成、デプロイ、および管理を自動化するのに役立つコードとしてのインフラストラクチャ (IaC) ツールです。 Terraform を使用すると、手動操作や構成を行うことなく、簡単なコードを書いてクラウドインフラストラクチャを定義および構成できます。
手順
[here] をクリックして Terraform Explorer ページに移動し、次の Terraform コードを自動的にロードします。
provider "alicloud" {
region = var.region
}
variable "region" {
default = "cn-beijing"
}
variable "common_name" {
description = "Common name for resources."
type = string
default = "deploy_rabbitmq_by_tf"
}
variable "system_disk_category" {
default = "cloud_essd"
description = "The category of the system disk."
}
variable "instance_password" {
description = "Server login password, length 8-30, must contain three (Capital letters, lowercase letters, numbers, `~!@#$%^&*_-+=|{}[]:;'<>?,./ Special symbol in)"
type = string
default = "Test@123456"
}
variable "image_id" {
description = "Image of instance. Supported only on Ubuntu."
type = string
default = "ubuntu_22_04_x64_20G_alibase_20241224.vhd"
}
variable "instance_type" {
description = "Instance type."
type = string
default = "ecs.e-c1m2.large"
}
variable "access_ip" {
description = "The IP address you used to access the ECS."
type = string
default = "0.0.0.0/0"
}
variable "rabbitmq_user_name" {
description = "Create a new user for RabbitMQ."
type = string
default = "rabbitmq@new_user"
}
variable "rabbitmq_user_password" {
description = "Password for a new RabbitMQ user."
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
sudo apt-get install curl gnupg apt-transport-https -y
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
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
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
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
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
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 つの Virtual Private Cloud (VPC)、1 つの vSwitch、1 つのセキュリティグループ、および 1 つの従量課金制 ECS インスタンスが cn-beijing リージョンに作成されます。 パラメーター値をビジネス要件に基づいて実際の値に置き換えます。 ECS インスタンスの課金については、「課金概要」を参照してください。
[デバッグの開始] をクリックして、作成するリソースの詳細をプレビューします。 リソース情報が正しい場合は、[計画と適用] をクリックしてリソースを作成します。 タスクステータスが「成功」の場合、デプロイタスクは完了です。
オープンソース RabbitMQ コンソールにログインする
オンプレミスのブラウザを開き、アドレスバーに http://<Linux インスタンスのパブリック IP アドレス>:15672
と入力します。
次の図は、RabbitMQ がインストールされていることを示しています。
作成した RabbitMQ 管理者ユーザーのユーザー名とパスワードを入力し、[ログイン] をクリックして、オープンソース RabbitMQ コンソールにアクセスします。
次の図は、オープンソース RabbitMQ コンソールを示しています。