LoginSignup
5
5

More than 5 years have passed since last update.

TerraformとMongoDb cloud managerでシャードをがーっと作る

Last updated at Posted at 2015-12-14

この記事は。MongoDB Advent Calendar 2015 - Qiitaの14日目の記事です。
本日個人的理由でへろへろなのですが、がーっと書いていきたいと思います。
職場で検証用のMongoDB環境を何度か作っていたので、それと似た手順でMongoDB Cloud Managerを使ってAWS上にお試しMongoDB shard clusterを作る手順を書きたいと思います。

mmsアカウント作成

MongoDB Cloud Manager - Management Made Easy | MongoDBから無料アカウント作成します。30日間のトライアルアカウントが取得できます。
Settings → Group Settings よりGROUP IDとAGENT API KEYをメモっておいてください。

キーペアの作成

ec2ダッシュボードよりキーペアを作成し、手元のパソコンの~/.ssh/と~/.ssh/configに接続情報を整えておきます。

AMIを作りなおしてID埋める

MMSエージェントインストール済のAMI ※からEC2インスタンスを作って、インスタンスにsshし/etc/mongodb-mms/automation-agent.config のREPLACEとしている箇所に先ほどのGROUP IDとAGENT API KEYを入れてAMI再作成してください。ami-idはメモっておいてください。
※まにあわず。後ほど公開するかも。といってもmmsエージェントが入っているだけです。

access_key, secret整え

これから作成するAWSアカウントにてIAMより環境構築用にAdministratorAccessポリシーなどを付与したユーザを作成しawscliやterraformが使えるようにaws configureしておいてください。

ドメインの登録

mms上でmongocをインストールする際、CNAMEが必須のため、あらかめドメイン登録があると良いです。今回はRoute53のレジストラを使ってumiyosh.comというのをでっちあげました。金がもったいないなどの場合はGIPなどでもだいじょぶなはずです(後付の変更ができないので構成変更などできないなどになったりしますのでほんとお試し版という感じです)。

terraform cloneして必要なところを追記する

すぐ動きそうなterraformをうpしたのでそれをcloneしてきます。

% git clone https://github.com/umiyosh/mmsInstall.git 
% cd mmsInstall
% vi variable.tf

variable.tfを書き換えます。REPLACEとしているVPC IDZONE IDhosted_zoneSUBNET IDAMI ID(先ほど自分でさくせいしたやつ)などを書き換えていきます。

terraform plan

terraform操作するローカルcliで以下の環境変数をexportしておいてください。

% export AWS_DEFAULT_REGION=ap-northeast-1
% export AWS_SECRET_ACCESS_KEY=シークレットアクセスキーに置き換えてください
% export AWS_ACCESS_KEY_ID=アクセスキーに置き換えてください

作成するまえにplanしAWS上に作成されるリソースを見ましょう。terraformは初期構築するだけならラクですが操作を間違うと大事なリソースを消したりなどあるのでなにもないAWSアカウントでやるのが良いです。

% terraform plan --refresh=false
The Terraform execution plan has been generated and is shown below.
Resources are shown in alphabetical order for quick scanning. Green resources
will be created (or destroyed and then created if an existing resource
exists), yellow resources are being changed in-place, and red resources
will be destroyed.

Note: You didn't specify an "-out" parameter to save this plan, so when
"apply" is called, Terraform can't guarantee this is what will execute.

+ aws_iam_instance_profile.test_profile
    arn:              "" => "<computed>"
    create_date:      "" => "<computed>"
<<省略>>

こんな感じのが出てくればOKです。

terraform apply

先にIAMリソースを作成しないとインスタンス作成時にIAM profileが存在しないのでインスタンス作成に失敗するという微妙問題があるみたいなので-targetでIAMリソースを先に作成しておきます。あと有効になるのに
ちょっと時間を置く必要があるので時間をおきます。

% terraform plan -target=aws_iam_role.test_role -target=aws_iam_role_policy.test_policy -target=aws_iam_instance_profile.test_profile --refresh=false
% terraform apply -target=aws_iam_role.test_role -target=aws_iam_role_policy.test_policy -target=aws_iam_instance_profile.test_profile

applyしリソースを作成します

% terraform apply

MongoDB Cloud ManagerのDeployment → SERVERS → tileボタンに作成したMMS Agentが登録されていればOKです。

MongoDB Cloud Manager APIで作成

MongoDB Cloud Managerでポチポチやっても良いのですが、MMS APIで今回はやってみたいと思います。
MongoDB Cloud Manage Settings → Group Settings → Enable Public APIYESにします。
おなじくMongoDB Cloud Manage Settings → Public API Access よりAPI KeyをGenerateします。API KeyはPOST時に使うのでメモって置いてください。以下のようにcurlコマンドで疎通を確認します。

% curl -u "<user@example.net>:<api_key>" --digest -i "https://cloud.mongodb.com/api/public/v1.0?pretty=true"

この環境だとprivate_ipを細かく切ってないのでMongoDB Cloud Manager側でどれがmongod,mongoc,mongosなのか判別つかないですね。ここを自動でやる良い方法ないか考えたのですが思いつかんかったです。Tag Nameには種別かいてあるのでawscliでがばっと取ってきてめもってshard.jsonに反映してください。例によってREPLACEと書かれたところとmongocのalias を変えてください。

% aws ec2 describe-instances --profile umiyosh --filter "Name=instance-state-name,Values=running"| jq '.Reservations[].Instances[] | {PrivateDnsName,Tags }' -c
% vi shard.json
% curl -u "<user@example.net>:<api_key>" -H "Content-Type: application/json" "https://cloud.mongodb.com/api/public/v1.0/groups/<group_id>/automationConfig" --digest -i -X PUT --data @shard.json

Deployment Pcocessを見るとデプロイされていると思います。

shard確認

2つたてたmongosのうちどっちかにsshしてDBを作って enableshardingしたりして味見すると良いでしょう。

% /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-3.0.6/bin/mongo --host localhost --port 27000
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5