# BYOCデプロイメントの作成

EMQXプラットフォームのBring Your Own Cloud（BYOC）プランは、お客様自身のクラウドインフラストラクチャ上でデプロイメントを作成できるようにし、データをお客様の環境内に保持することを可能にします。このデプロイメントにより、データのセキュリティと管理が向上し、データ漏洩などのリスクを回避できます。さらに、EMQX BYOCデプロイメントは、さまざまなシナリオのニーズに応じたパフォーマンスとスケーラビリティの向上も提供します。本ページでは、BYOCデプロイメントの作成および利用方法について説明します。

## 前提条件

BYOCデプロイメントを作成する前に、対象のパブリッククラウドに対応したアカウントの準備、クラウドリソースの計画、EMQX BYOC製品ライセンスの申請が必要です。詳細は[デプロイメントの前提条件](../deployments/byoc_prerequisite.md)をご参照ください。

## デプロイメントの作成

1. アカウントにログインし、[EMQXプラットフォームコンソール](https://cloud-intl.emqx.com/console/)にアクセスします。

2. プロジェクトの新しいデプロイメントを開始するには、コンソールのホームページまたはデプロイメント一覧ページに移動し、**+ New Deployment**をクリックします。

3. **Choose Plan**で**BYOC**を選択します。

4. BYOCプランの設定をニーズに応じて構成します。

   ![BYOCSpecification](./_assets/byoc_specification.png)

   **クラウドプロバイダーおよびリージョンの設定**：

   - **Choose Cloud Platform**：**AWS**または**Google Cloud**を選択します。

     他のクラウドプラットフォームでのデプロイを希望する場合は、[チケット](../feature/tickets.md)または[メール](<mailto:cloud-support@emqx.io>)でお問い合わせください。

   - **Choose Region**：デプロイするリージョンを選択します。

     他のリージョンでのデプロイを希望する場合は、[チケット](../feature/tickets.md)または[メール](<mailto:cloud-support@emqx.io>)でお問い合わせください。

   **設定（EMQXクラスター用）**：
   ::: tip
   最大セッション数は、申請したEMQX BYOCライセンスに記載された数と一致させる必要があります。デプロイ完了後にセッション数の上限を変更する場合は、[チケット](../feature/tickets.md)でお問い合わせください。
   :::

   - **Sessions Limit**：任意の時点で接続可能なMQTTデバイスの最大同時セッション数を指定します。

   - **Pub&Sub TPS**：送受信されるメッセージの最大トランザクション数（TPS）を指定します。

   - **EMQX Node Instance Type**：**Sessions Limit**および**Pub&Sub TPS**に基づいて自動選択されます。実際のビジネスニーズに応じてインスタンスタイプを変更することも可能です。

   - **EMQX Node Quantity**：**Sessions Limit**および**Pub&Sub TPS**に基づいて自動入力されます。実際のビジネスニーズに応じてノード数（2〜5ノード）を変更可能です。

   - **VPC CIDR Block**：仮想プライベートクラウド（VPC）作成に使用するプライベートIPアドレス範囲を選択します。

   **デプロイメント名とプロジェクト**：

   - **Deployment Name**：業務上意味のあるデプロイメント名を入力します。
   - **Project**：適切なプロジェクトを選択します。

   **タグ（任意）**：リソース管理のために最大10個までクラウドリソースタグを追加可能です。

5. 右側の**New Deploy**ボタンをクリックしてデプロイメントを開始します。この段階で*EMQXプラットフォームサービス契約*の確認と同意を求められます。内容をよく読み、同意した上で進めてください。

6. 同意するとデプロイメント概要ページにリダイレクトされます。

次に、[デプロイメントの実行](#run-deployment)セクションの手順に従ってデプロイを開始できます。

## デプロイメントの実行

デプロイメント概要ページでは、ステータスが**Waiting for Deployment**となっているはずです。この時点では**Connection Information**にデプロイメントの詳細は表示されません。**Start Deployment**ボタンをクリックすると、**Deployment Guide**サイドバーが表示され、デプロイ手順を案内します。以下の手順に従ってデプロイを完了させることも可能です。

以下の手順は、パブリックネットワーク接続が可能なUbuntu 20.04（AMD64）環境でのデプロイ完了方法を示しています。開始前に、TLS/SSL証明書およびBYOCライセンスファイルをUbuntu環境のディレクトリにコピーしてください。

:::: tabs
::: tab "AWS"

1. 準備したUbuntu 20.04（AMD64）環境を開きます。このUbuntu環境はインターネットにアクセス可能である必要があります。

2. Ubuntuのコマンドラインで以下のコマンドを実行し、ツールキットをダウンロードしてUbuntuディレクトリに保存します。

   ```bash
   wget https://cloudassets.emqx.com/en/byoc-deployments/5.1.0/create-aws-byoc-deployment.tar.gz
   ```

3. 以下のコマンドでダウンロードしたツールキットを解凍し、解凍したフォルダに移動します。

   ```bash
   tar -zxf create-aws-byoc-deployment.tar.gz && cd create-aws-byoc-deployment
   ```

4. `./byoc create`コマンドの各フィールドに実際のパラメータを入力します。

   ```bash
   ./byoc create \
         --platform aws \
         --accessKey <Your AccessKey> \
         --secretKey <Your SecretKey> \
         --domain <Your Domain> \
         --sslCertPath <Your Domain SSL Absolute Cert Path>  \
         --sslKeyPath <Your Domain SSL Absolute Key Path> \
         --clientCaPath <Your Client CA Absolute Path (Optional)> \
         --byocEndpoint https://cloud-intl.emqx.com \
         --byocKey abcdXXXXXXXXXX111
   ```
   
   - `--accessKey`：AWS IAMユーザーのアクセスキーIDを入力します。
   - `--secretKey`：AWS IAMユーザーのアクセスキーシークレットを入力します。
   - `--domain`：デプロイされたMQTTサービスにアクセスするためのドメイン名（例：your.domain.com）を入力します。
   - `--sslCertPath`：TLS/SSL証明書の絶対パスを指定します。**CA署名済み証明書のみ対応**しています。SSL証明書の形式要件は[BYOCプランのTLS/SSL設定](../deployments/byoc_ssl.md)を参照してください。BYOCはカスタムの片方向TLS/SSL認証を提供します。
   - `--sslKeyPath`：TLS/SSL証明書の秘密鍵の絶対パスを指定します。**CA署名済み証明書のみ対応**しています。SSL証明書鍵の形式要件は[BYOCプランのTLS/SSL設定](../deployments/byoc_ssl.md)を参照してください。
   - `--clientCaPath`：クライアントCA証明書の絶対パスを指定します。指定すると作成されるデプロイメントは双方向TLS/SSL認証を使用します。不要な場合は実行時にこのパラメータを削除してください。双方向TLS/SSL認証の詳細は[BYOCプランのTLS/SSL設定](../deployments/byoc_ssl.md)を参照してください。
   
   以下の3つの値はコンソールでデプロイメントガイドが生成される際に自動入力されるため、変更しないでください。
   
   - `--platform`：クラウドプロバイダーを指定します。
   - `--byocEndpoint`：EMQXプラットフォームのアクセスアドレスです。
   - `--byocKey`：BYOCデプロイメントの認証キーです。生成されたbyocKeyは1時間有効であり、スクリプトコマンド生成後できるだけ早く実行してください。

5. `./byoc create`コマンドを実行し、数分待ちます。システムから作成するクラウドリソースの確認を求められたら、`yes`と入力して続行します。

   ```bash
   Do you want to perform these actions?
     Terraform will perform the actions described above.
     Only 'yes' will be accepted to approve.
   
     Enter a value: 
   ```

:::
::: tab "Google Cloud"

1. 準備したUbuntu 20.04（AMD64）環境を開きます。このUbuntu環境はインターネットにアクセス可能である必要があります。

2. Ubuntuのコマンドラインで以下のコマンドを実行し、ツールキットをダウンロードしてUbuntuディレクトリに保存します。

   ```bash
   wget https://cloudassets.emqx.com/en/byoc-deployments/5.1.0/create-gcp-byoc-deployment.tar.gz
   ```

3. 以下のコマンドでダウンロードしたツールキットを解凍し、解凍したフォルダに移動します。

   ```bash
   tar -zxf create-gcp-byoc-deployment.tar.gz && cd create-gcp-byoc-deployment
   ```

4. `./byoc create`コマンドの各フィールドに実際のパラメータを入力します。

   ```bash
   ./byoc create \
         --platform gcp \
         --projectID <Your Project ID> \
         --authJSONPath <The absolute path of your Service Account JSON file> \
         --domain <Your Domain> \
         --sslCertPath <Your Domain SSL Absolute Cert Path>  \
         --sslKeyPath <Your Domain SSL Absolute Key Path> \
         --clientCaPath <Your Client CA Absolute Path (Optional)> \
         --byocEndpoint https://cloud-intl.emqx.com \
         --byocKey abcdXXXXXXXXXX111
   ```

   - `--projectID`：Google CloudのプロジェクトIDを入力します。Google Cloudコンソールの上部バーのプロジェクトセレクターで確認可能です。
   - `--authJSONPath`：[Google Cloudサービスアカウントキー](https://cloud.google.com/iam/docs/keys-create-delete#creating)のJSONファイルのパスを入力します。
   - `--domain`：デプロイされたMQTTサービスにアクセスするためのドメイン名（例：your.domain.com）を入力します。
   - `--sslCertPath`：TLS/SSL証明書の絶対パスを指定します。**CA署名済み証明書のみ対応**しています。SSL証明書の形式要件は[BYOCプランのTLS/SSL設定](../deployments/byoc_ssl.md)を参照してください。BYOCはカスタムの片方向TLS/SSL認証を提供します。
   - `--sslKeyPath`：TLS/SSL証明書の秘密鍵の絶対パスを指定します。**CA署名済み証明書のみ対応**しています。SSL証明書鍵の形式要件は[BYOCプランのTLS/SSL設定](../deployments/byoc_ssl.md)を参照してください。
   - `--clientCaPath`：クライアントCA証明書の絶対パスを指定します。指定すると作成されるデプロイメントは双方向TLS/SSL認証を使用します。不要な場合は実行時にこのパラメータを削除してください。双方向TLS/SSL認証の詳細は[BYOCプランのTLS/SSL設定](../deployments/byoc_ssl.md)を参照してください。

   以下の3つの値はコンソールでデプロイメントガイドが生成される際に自動入力されるため、変更しないでください。

   - `--platform`：クラウドプロバイダーを指定します。
   - `--byocEndpoint`：EMQXプラットフォームのアクセスアドレスです。
   - `--byocKey`：BYOCデプロイメントの認証キーです。生成されたbyocKeyは1時間有効であり、スクリプトコマンド生成後できるだけ早く実行してください。

5. `./byoc create`コマンドを実行し、数分待ちます。システムから作成するクラウドリソースの確認を求められたら、`yes`と入力して続行します。

   ```bash
   Do you want to perform these actions?
     Terraform will perform the actions described above.
     Only 'yes' will be accepted to approve.
   
     Enter a value: 
   ```
:::
::::

## DNSレコードの追加

デプロイメントリソースが作成されると、システムは以下の情報を返します。返されたIPアドレスを基に、DNSサービスにドメイン名解決レコードを追加し、デプロイされたパブリックIPアドレスをドメイン名に紐付けます。DNSやドメイン名解決の基本概念については[DNSの概念](https://developers.cloudflare.com/dns/concepts/)を参照してください。

```bash
Apply complete! Resources: 45 added, 0 changed, 0 destroyed.

Outputs:

cloud_register_data = <sensitive>
jwt_token = <sensitive>
lb_address = "<Your Deployment IP>"
password = "<EMQX Dashboard Password>"
username = "<EMQX Dashboard Username>"
vpc_id = "vpc-bp1n1dwiv2srgkgle4rlu"
*****************************
You need add a record to your DNS service provider.
IP address: 112.124.9.12
Domain: <Your Custom Domain>
*****************************
Checking if <Your Custom Domain> is resolved to the 112.124.9.12 of the load balancer
```

クラウドプラットフォームが提供するDNS解決サービスや他のマネージドDNSプロバイダーを利用可能です。例えばGoogle Cloud PlatformのCloud DNSを利用する場合は、以下の手順を参照してください：[レコードの追加、変更、削除 | Cloud DNS | Google Cloud](https://cloud.google.com/dns/docs/records)。

DNSレコードが有効になると、システムは`HTTPS listener is ready`を返します。

```bash
HTTPS listener is ready
```

## デプロイメントの完了

ドメイン名解決が完了すると、Ubuntuのコマンドラインに以下のように表示され、デプロイメントが成功したことを示します。

```bash
Deployment successful! Here is the service information:
--------------------------------------------------------
EMQX service connection address: <Your Custom Doamin>
EMQX Dashboard address: https://<Your Custom Doamin>:18084
EMQX Dashboard username: <EMQX Dashboard Username>
EMQX Dashboard password: <EMQX Dashboard Password>
You can log in to the EMQX Platform Console(https://cloud.emqx.com/console) to manage your deployment.
--------------------------------------------------------
Thank you for choosing our service. Happy IoT!
```

EMQXダッシュボードのユーザー名とパスワードは、管理コンソールへのログインおよびクラスター管理に使用するため、安全に保管してください。この情報は今後再表示されません。

## デプロイメント情報の確認

デプロイメント概要ページに戻り、ページを更新するとリアルタイムのステータスおよび接続情報を取得できます。

   ![byoc](./_assets/byoc_deployment_console.png)

**リアルタイムステータス：**

- **Deployment Name**：デプロイメント名。クラウドリソースのプレフィックスにもなり、パブリッククラウドコンソールでの検索が容易になります。
- **Instance Status**：稼働状況と作成日時。
- **Sessions**：現在の接続数と最大許容数。
- **Pub&Sub TPS**：デプロイメント内での1秒あたりの送受信メッセージ数とTPS制限。

**接続情報：**

- **Address**：デプロイ時にユーザーが指定したドメイン名。
- **Connection Ports**：デフォルトでMQTTプロトコルアクセス用に1883（mqtt）、8883（mqtts）、8083（ws）、8084（wss）が開放されています。ダッシュボードログイン用に18084（https）、REST APIアクセス用に8443（https）が使用されます。

ポートのカスタマイズを希望される場合は、[サポートチケット](../feature/tickets.md)またはメール（cloud-support@emqx.io）でお問い合わせください。

**ライセンス情報：**

基本的なライセンス情報と有効期限が含まれます。詳細は[BYOCライセンス](../deployments/byoc_license.md)をご参照ください。

## 高度なネットワーク設定

### VPCピアリング設定

仮想プライベートクラウド（VPC）ピアリングは、異なるネットワークにある2つのVPC間で通信を可能にするネットワーク接続です。この機能はクラウドサービスプロバイダーが提供し、BYOCがデプロイされたVPCと同じクラウドサービスプロバイダー内の他のVPC間でのピアリング接続をサポートします。VPCピアリングの設定については、各パブリッククラウドのドキュメントを参照してください：[Working with VPC Peering - Amazon Web Service](https://docs.aws.amazon.com/vpc/latest/peering/working-with-vpc-peering.html)、[VPC Network Peering - Google Cloud](https://cloud.google.com/vpc/docs/vpc-peering)。

### NATゲートウェイ設定

パブリッククラウドプラットフォームが提供するNATゲートウェイは、ネットワークアドレス変換サービスを提供し、BYOCデプロイメントがVPCピアリング接続なしでパブリックネットワークリソースにアクセスできるようにします。BYOCがデプロイされたVPCにNATゲートウェイを追加可能です。詳細は各パブリッククラウドのNATゲートウェイドキュメントを参照してください：[NAT Gateways - Amazon Web Service](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)、[Cloud NAT - Google Cloud](https://cloud.google.com/nat/docs/overview)。

## デプロイメントへの接続

任意のMQTTクライアントツールを使用してデプロイメントに接続し、テストできます。推奨ツールは[MQTTX](../connect_to_deployments/mqttx.md)です。
