[OCI]Oracle CloudでMySQL DBを始めるための完全ガイド (2021/01/29)

Oracle CloudでMySQL DBを始めるための完全ガイド (2021/01/29)

https://blogs.oracle.com/developers/complete-guide-to-getting-started-with-mysql-db-in-the-oracle-cloud
投稿者:Todd Sharp

9月に入り、ついに待望のMySQL Database Service in the Oracle Cloudが発表されました。
これは、MySQLに慣れ親しんだ開発者にとって大きなニュースであり、
アプリケーションで使用するための安全で完全なマネージド・クラウド・サービスを求めている開発者にとっては大きなニュースです。
自動バックアップ、モニタリング、SDKとの統合、API、OCI CLIなど、マネージドクラウドサービスに期待される機能はすべて揃っています。
この記事では、Oracle CloudのMySQL DBシステムのデプロイ、構成、および接続に必要なものを見てみましょう。さっそくやってみましょう。

チートモード! 以下のブログ記事では、MySQL DB、仮想クラウド・ネットワーク(VCN)、
オプションのコンピュート・インスタンスをベースジョン・ホストとして手動で起動する方法を詳細に紹介します。
Terraformを使用してデプロイを自動化したい場合は、Oracle Cloud Infrastructure Resource Managerを使用して
これらのリソースを自動的にデプロイする方法のセクションに進んでください。

このガイドは非常に長いので、必要に応じて読み飛ばせるように目次を追加することにしました。



コンパートメントの作成
まず最初に行うことをお勧めするのは、MySQLリソースを保存するための新しいコンパートメントを作成することです。
これは必須ではありませんが、クラウドのテナント内でコンパートメント化された状態を維持するのに役立ちます。
Oracle Cloudコンソールのサイドバーメニューで、「Identity」を選択して「Compartment」を選択し、「Create Compartment」をクリックします。

名前を付けてください。この記事ではmysql-compartmentを使用します。



仮想クラウドネットワーク(VCN)の作成

ここでは、DBシステムと通信する必要のある他のリソースに使用する仮想クラウドネットワーク(VCN)を新たに作成します。
サイドバーから「ネットワーキング」と「仮想クラウドネットワーク」を選択します。

新しく作成したコンパートメントを選択して、そのコンパートメントにVCNを作成することを忘れないでください。

VCNを作成するには、「VCNの作成」をクリックすることもできますが、関連するサブネットなどを手動で作成する必要があります。
必要なコンポーネントを自動化してくれる「VCNウィザードの開始」をクリックする方がはるかに簡単です。

ここで「VCN with Internet Connectivity」を選択し、ウィザードを開始する。

mysql-vcn という名前を付け、mysql-compartment コンパートメントを選択します。

VCN CIDR ブロックとパブリックおよびプライベート CIDR ブロックを割り当てます。

「次へ」をクリックして、エントリを確認し、「作成」をクリックします。

「View Virtual Cloud Network」をクリックします。VCNサイドバーで、「セキュリティリスト」をクリックします。

プライベートサブネットのセキュリティリストをクリックします。

プライベートサブネットのセキュリティリストで、「Add Ingress Rules」をクリックします。

プライベートサブネットのCIDR範囲を使用して、ポート3306(MySQL)と33060(MySQL Xプロトコル)のTCPプロトコルのためのイングレスルールを追加します。
基本的には、これらのポートをVCNの内部トラフィック用に開放して、任意のリソース(アプリケーションやBastionホスト)がMySQL DBと通信できるようにしています。


コンピュートインスタンスの作成

Note: これは、ローカルホストから MySQL インスタンスに接続したい場合にのみ必要です。
MySQL をテストや本番用のインスタンスとしてデプロイされたアプリケーションで使用している場合は、
踏み台ホストとして動作するためのコンピュートインスタンスを作成する必要はなく、次のセクションに進んでください。

MySQLインスタンスにアクセスするためには、踏み台ホストとして動作するコンピュートインスタンスを作成する必要があります。

Tip! 踏み台ホストのインスタンスをスケールアップ/ダウンすることで、使用していないときにお金を払わずに済むようにすることができます。
詳細については、クラウドのコスト削減を参照してください。Dev/QA 環境の自動スケーリングを参照してください。

「Compute」-「Instance」をクリックします。

「Create Instance」をクリックします。

名前を付け、必要に応じてADを選択します。

OSイメージとVMシェイプを選択します。

先ほど作成したVCNとパブリックサブネットを使用するようにネットワーキングを設定します
(これはMySQL DBへの「ジャンプ」に使用する踏み台ホストなので)。

SSH鍵のオプションを選択します(私は既存の公開鍵をアップロードしています)。

ブートボリュームのデフォルト値を受け入れ、「Create」をクリックします。インスタンスが「実行中」の状態になったら、パブリックIPを取得します。


グループとユーザーの作成

テナント内で完全なパーミッションを持っていないユーザでMySQL DBシステムを作成する場合は、
新しいユーザを作成する必要があります(または既存のユーザに以下のグループポリシーを適用する必要があります)。
ユーザーが管理者権限を持っている場合は、このセクションをスキップすることができます。
ポリシーの詳細については、ドキュメントを参照してください。



mysql-usersという名前のグループを作成します。

「Users」に移動し、「Create User」をクリックします。

mysql-user という名前の IAM ユーザーを作成します。

mysql-userの詳細ページで、「Add User to Group」をクリックして、ユーザをmysql-usersグループに追加します。

「Policies」に移動します。root コンパートメントで、新しいポリシーを作成します。

3 つのステートメントでポリシーを作成します。

コピー&ペーストを簡単にするために、必要なステートメントを以下に示します(上記で指定したグループ名とコンパートメント名と同じものを使用していると仮定します)。

Allow group mysql-users to {SUBNET_READ, SUBNET_ATTACH, SUBNET_DETACH, VCN_READ, COMPARTMENT_INSPECT} in compartment mysql-compartment
Allow group mysql-users to manage mysql-family in compartment mysql-compartment
Allow group mysql-users to use tag-namespaces in tenancy

MySQLシステムの作成


MySQLシステムへ! サイドバーから「MySQL」と「DBシステム」を選択します。

CLIユーザー:コマンドラインを使用したい場合は、ドキュメントをチェックしてください。CLIを使用したDBシステムの作成を参照してください。

必要な前提条件については、すでにすべて対処済みなので、「MySQL の前提条件」の情報は無視してください。
「Create MySQL DB System」をクリックします。

システムの名前と説明を入力します。mysql-compartmentが選択されていることを確認し、デフォルトのADが選択されたままにしておきます。

システムのVMシェイプを選択し、必要なストレージサイズを入力し、希望するメンテナンスウィンドウを選択します(必要に応じて)。
「Next」をクリックします。

ウィザードのステップ2で、管理者ユーザーのユーザー名とパスワードを入力します(パスワードも確認)。

先ほど作成したVCNと「プライベート」サブネットを選択します。
ホスト名を入力し、デフォルトのポートを受け入れます。「Next」をクリックします。

最後に、DBシステムのバックアップ方法を定義し、「作成」をクリックします。

MySQL DB システムが起動したら、割り当てられたプライベート IP アドレスをメモしておきます。

権限について気になる場合は、ドキュメントにデフォルトの権限が記載されています。

ボーナス - Terraform と OCI Resource Manager を使用したリソースのデプロイ


リソースを手動でデプロイする方法を知っているのは素晴らしいことですが、
ときにはTerraformのようなツールを使ってインフラストラクチャの作成を自動化し、CI/CDパイプラインに統合する方が簡単な場合もあります。
そのために使えるTerraformスクリプトを作成し、GitHubで公開しています。
これを使うには、自分のリポジトリにフォークする必要があります。
Resource Managerに慣れていない方は、スタックのデプロイ方法を見てみましょう。

構成の作成


まず、GitHub上にPersonal Access Tokenを作成して、Resource ManagerがGitHubからプルするためのアクセス権を与える必要があります。

トークンに名前を付け、read:packages の権限を与えます。

これをコピーして、便利な場所に保存しておきましょう。

OCI コンソールに戻り、「Resource Manager」、「Configuration Source Providers」を選択します。

「Create Configuration Source Provider」をクリックします。

名前を付けて、サーバーのURLに https://github.com と入力し、上で作成した GitHub Personal Access Token を貼り付けます。

ここでサイドバーの「Stacks」をクリックし、「Create Stack」をクリックします。

スタックのソースとして「Source Code Control System」(#1)を選択し、先ほど作成した「Configuration Source」(#2)を選択し、フォークしたレポ(#3)とブランチ(#4)を選択します。

スタックに好きな名前を付け、スタックを格納するコンパートメントを選択し、Terraformのバージョンを選択します(0.13.xを選択)。「Next」をクリックします。

次の画面では、いくつかの選択と、作成されるリソースに使用される変数名の入力を求められます。
リージョン、コンパートメント(作成したリソースを保存する場所)を選択し、MySQL の管理者ユーザー名を入力し、管理者パスワードを入力して確認します。

MySQL DBシステムに使用するシェイプを選択し、DBシステムとVCNの名前を入力し、DBのストレージ量(デフォルト50GB)を入力し、可用性ドメインを選択します。

踏み台ホストを作成する場合は、チェックボックスにチェックを入れ、
SSH公開鍵ファイル、インスタンスのシェイプ、踏み台ホストのイメージを選択します。
完了したら、「Next」をクリックして入力内容を確認し、次の画面で「Create」をクリックします。

スタックの詳細ページでは、スタックの詳細を確認することができます。

スタックの詳細ページの上部にある「Terraform Actions」ボタンをクリックすると、スタックで実行できるオプションが表示されます。

「計画」をクリックし、プランに名前を付け、「計画」をクリックしてプランを生成します。

プランが正常に生成されたら、スタックの詳細に戻り、「Terraform Actions」の下の「適用」をクリックします。
先ほど作成したプランを選択し、「適用」をクリックします。

「適用」 はすべてのリソースを作成するのに少し時間がかかりますが (10分からそれ以上かかるかもしれません)、成功すれば準備は完了です。

ヒント: 「適用」アクションには、この計画の生成と実行に使用した GitHub コミットの ID が保存されます。

サイドバーの「出力」をクリックすると、出力を確認することができます。
これで、管理者のユーザー名、プライベートIP(DBシステムの場合)、踏み台ホストのコンピュートインスタンスのパブリックIPの概要が表示されます。

これで、MySQL DB に接続して使用を開始する準備が整いました。
スタックで作成したリソースをすべて削除する必要がある場合は、スタック詳細ページの「Terraform Action」で「破棄」を選択してください。

MySQL DB システムの設定


MySQL Configurations は、DB システムの動作を定義する変数の集合体です。
ローカルのインストールで使用される標準の my.ini や my.cnf ファイルと同じように考えることができます。
このトピックについてはこのブログ記事では詳しく説明しませんが(もしかしたら別の記事になるかもしれません!)、
それまでの間はドキュメントを参照して、MySQL 構成についての詳細を知ることができます。

MySQL DB システムへの接続


この時点で MySQL DB システムに接続する方法はいくつかあります。
最初に見ていく方法は、踏み台ホストのコンピュートインスタンスに安全に接続し、MySQL Shellを使用して接続する方法です。
これを行うには、インスタンス作成時に指定した公開鍵に対応する秘密鍵でSSHを使用します。

MySQL Shellでの接続

最初に接続するときは、MySQL Shellをインストールする必要があります。
$ ssh opc@[your bastion host IP] -I ~/.ssh_id_oci_demo

$ sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm\\\\ $ sudo yum install mysql-shell

次に、mysqlshと接続します。
$ mysqlsh admin@[DB system private IP]

これでMySQL Shellが接続されます。

この時点で、MySQL Shellを使用して必要なタスクを実行することができます。


MySQLクライアントとの接続

また、より快適に、あるいは慣れ親しんだ方は、MySQLクライアントをインストールして使用することもできます。

$ sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm\\\\ $ sudo yum install mysql

接続します:
$ mysql --host 10.0.1.3 -u admin -p


MySQL Workbenchからの接続

私と同じように、MySQL Workbench を使って MySQL DB に接続したいと思っています。
これは非常に簡単で、新しい接続を行い、接続方法として「Standard TCP/IP over SSH」を選択するだけです。
下図のように、あなたのベースジョンホストと追加の認証情報を入力します。
もちろん、専用のスキーマユーザを作成して、そのユーザでログインすることもできます。

別のオプションとして、SSH トンネリングを使用して、MySQL Workbench からローカルホストへの接続と転送ポートを作成します。
例えば、以下のようにします。
$ ssh -L 33000:[MySQL private IP]:3306 opc@[bastion host IP address]-I /path/to/private_key

SSH トンネリングは、ローカルホスト上で実行中のアプリケーションから
MySQL クラウドインスタンスに安全に接続する必要がある場合に良いオプションです。
また、コマンドラインから MySQL Workbench を起動し、Workbench を閉じたときに自動的に切断されるように SSH トンネルをパイプすることもできます。
私のMacでは、このようになっています。
$ /Applications/MySQLWorkbench.app/Contents/MacOS/MySQLWorkbench | ssh -TL 33000:10.0.1.3:3306 opc@[bastion host IP address]-I /path/to/private_key

まとめ

この記事では、仮想クラウドネットワークを設定し、踏み台ホストとして使用するコンピュートインスタンスを作成し、
DBシステムを作成することで、Oracle Cloud MySQLクラウドサービスを立ち上げて実行する方法について説明しました。
その後、新しく作成したシステムに接続するためのいくつかの方法を調べました。
次の記事を読んでみたいというご意見がありましたら、Twitterで私と連絡を取るか、下のコメントを残してください。

Image by Gerhard G. from Pixabay

コメント

このブログの人気の投稿

Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

Oracle Cloud Infrastructure Secure Desktopsを発表: デスクトップ仮想化のためのOracleのクラウドネイティブ・サービス (2023/06/28)

新しいOracle Container Engine for Kubernetesの機能強化により、大規模なKubernetesがさらに簡単になりました (2023/03/20)