最近GCPでGitlabやRailsの開発環境スタックがOne-ClickでGCP上にデプロイできるようになりました。
- Click to Deploy GitLab Community Edition on Google Compute Engine
- Click to Deploy Ruby Development Stack on Google Compute Engine
GCPではコレ以外にも、Apache Cassandra、MEAN Stack、Mongo DB、RabbitMQなどの環境をOne-Clickでデプロイできるようになっています。
これらの環境をデプロイする技術は、単純なVMイメージコピーではなくプロビジョニングしている様に見えます。
これらの環境をデプロイする技術は、単純なVMイメージコピーではなくプロビジョニングしている様に見えます。
このOne-Click Deployを提供しているのがCloud Deployment Managerと呼ばれる、 GCP上のサービスです。
Cloud Deployment Manager is 何?
Cloud Deployment Manager(めんどくさいので以降CDM)はGCPに対して、
デプロイや、セットアップをテンプレートベースで定義することができるAPIとサービスです。
デプロイや、セットアップをテンプレートベースで定義することができるAPIとサービスです。
例えば上記に有るようなMEAN StackやRuby on Rails環境をテンプレートとして記述し、
いつでもGCP上にデプロイすることができるようになります。
なんとなくAWSでいうところのCloud Formationに似ている気がしますね
いつでもGCP上にデプロイすることができるようになります。
なんとなくAWSでいうところのCloud Formationに似ている気がしますね
なお現状(2014/09/02)はLimited Previewなサービスのため、利用するにはサインアップが必要です。
この辺を参考にやってみてください。
この辺を参考にやってみてください。
CDMの2つのビルドプロセス(リソース)
CDMでは大きく分けて2つのビルドプロセスが有ります。
1つはGCEのセットアップ情報を記述したテンプレートの作成と登録 (template リソース)、
もう一つはテンプレートを元にした実際のデプロイ(deployment リソース)
1つはGCEのセットアップ情報を記述したテンプレートの作成と登録 (template リソース)、
もう一つはテンプレートを元にした実際のデプロイ(deployment リソース)
templateはリージョンに関係ないグローバルリソースで、
deploymentはリージョン固定のリソースになります。
deploymentはリージョン固定のリソースになります。
それぞれはCLIやAPIを利用して、操作することができます。
CDMでやれること
CDMでは現状以下のGCEリソースを定義することができます。
※細かい設定は置いておいて
※細かい設定は置いておいて
- Replica Pool
- ほぼほぼ GCEインスタンスと同じ
- 別途Actionというものを定義することによりinitスクリプトを定義できる
- Autoscaling Group
- オートスケールの仕方設定
- これもLimited Preview
- Firewall
- 普通にfirewall
- Health Check
- LB用のヘルスチェック定義
- Network
- GCEのネットワークを設定できる
- ただしAPIリファレンス上は乗っているが、ドキュメント上に無いので試してみないとなんとも...
- Load Balancing
- LBの設定
またActionという仕組みにより、
インスタンス起動時に流すコマンドをまとめたものを定義することもできる ※後述
インスタンス起動時に流すコマンドをまとめたものを定義することもできる ※後述
自分で書いてみる Jenkinsのテンプレートを作ってみる
テンプレートを作る
まずは結構簡単に入れられるJenkinsのテンプレートを作ってみたいと思います。
構成は1台のGCEインスタンスにnginx-tomcat-jenkinsが乗っている感じです。
このテンプレートは以下になります。
構成は1台のGCEインスタンスにnginx-tomcat-jenkinsが乗っている感じです。
このテンプレートは以下になります。
name: nginx_tomcat_jenkins modules: nginx_tomcat_jenkins: type: REPLICA_POOL replicaPoolModule: numReplicas: 1 replicaPoolParams: v1beta1: machineType: n1-standard-1 zone: asia-east1-a baseInstanceName: nginx_tomcat disksToCreate: - boot: true initializeParams: sourceImage: https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-6-v20140718 diskSizeGb: 10 initAction: install_jenkins networkInterfaces: - network: default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT envVariables: JENKINS_HOME: value: /data/jenkins actions: install_jenkins: commands: [ "yum -y -q update", "yum -y -q install wget tar", "export JENKINS_HOME=$JENKINS_HOME", "%file:java_install.sh", "%file:nginx_setup.sh", "%file:tomcat_setup.sh", "%file:jenkins_setup.sh", "%file:run.sh" ]
解説をすると
テンプレートでは
どのリソースかは、type要素で判別します。
テンプレートでは
modules
とactions
の2つを設定していきます。modules
ではインスタンスや、LB、ネットワーク、オートスケールなどのリソースの設定を行います。どのリソースかは、type要素で判別します。
actions
ではインスタンス起動時のスクリプトを設定します。%file:
の形式で書いてあるものはテンプレートと同じディレクトリ内にあるファイルを埋め込んでくれる書式で、YAMLでテンプレートを書いた場合のみ利用できます。
modules
の下のnginx_tomcat_jenkins
はmodule名で任意に名前を付けられます。今回はGCEのインスタンスを作成するのでこのmoduleの
type
はREPLICA_POOLにしてあります。replicaParamModule
以下でインスタンスの設定を行っていきます。initAction
の部分でactions
配下のactionを指定して、どういったイニシャルスクリプトを流すかを設定しています。これらの値は基本的にテンプレート作成後、デプロイを行う時に上書きすることができます。
なお起動シェルも含めたコードは以下に有ります。
https://github.com/soundTricker/cdm-jenkins-template
テンプレートを登録する。
テンプレートの登録はCloud Deployment Manager API を利用するか、
Google Cloud SDK CLIを利用することで実行できます。
Google Cloud SDK CLIを利用することで実行できます。
今回はCLIを使って登録を行っていきます。
まずDeployment ManagerはまだLimited Previewの為、通常のままではCLIにコマンド群が入っていません。
Cloud SDKの
Cloud SDKの
preview
featureをインストールします。$ gcloud components update preview
取得後デフォルトのプロジェクトを設定しておきます。
$ gcloud config set project PROJECT-ID
設定が終わったらテンプレートを登録します。
今回は上記で作成したテンプレート(
今回は上記で作成したテンプレート(
jenkins.yaml
)をjenkins
というテンプレート名で登録します。$ gcloud preview deployment-manager templates create --template-file jenkins.yaml jenkins
登録できたかは以下で確認できます。
$ gcloud preview deployment-manager templates list $ gcloud preview deployment-manager templates get jenkins
なお
list
の方は名前だけが取得されget
の場合%file:
が展開された詳細なテンプレートが取得できます。テンプレートを利用してデプロイする。
次にデプロイを行います。 デプロイもCLI経由で行います。
$ gcloud preview deployment-manager deployments --region asia-east1 create --template jenkins jenkins-dm
なお先ほど記述した上書きを行う場合は以下のように--overridesで指定します。
$ gcloud preview deployment-manager deployments --region asia-east1 create --template jenkins --overrides $.modules.nginx_tomcat_jenkins.replicaPoolModule.numReplicas=2 jenkins-dm
しばらく待つとインスタンスが上がり、actionsで指定したスクリプトが実行されます。
まとめ
やってみると結構お手軽ですね。
ただ今回のスクリプトの場合はGCEインスタンスが1台ですし、サーバセットアップの部分は正直だたのshellなので、
ansibleやchef等のプロビジョニングアプリケーションを利用したほうが楽に思えます。
というよりプロビジョニングするぐらいならimages作ってCloud Design Patternで言うところの
Stamp Patternを利用して複製したほうが楽な気がします。
ansibleやchef等のプロビジョニングアプリケーションを利用したほうが楽に思えます。
というよりプロビジョニングするぐらいならimages作ってCloud Design Patternで言うところの
Stamp Patternを利用して複製したほうが楽な気がします。
Deployment Managerの使いドコロは個人的にはここではないように思えます。
※現状GoogleがリリースしているMEAN StackやRoRのOne-Click Deployには意味があると思いますが。
※現状GoogleがリリースしているMEAN StackやRoRのOne-Click Deployには意味があると思いますが。
次はもう少し複数台を配置するような設定を書いてみたいと思います。
Awesome,Thank you so much for sharing such an awesome blog
返信削除Thank you for sharing such great information very useful to us.
oracle training in chennai
oracle training institute in chennai
oracle training in bangalore
oracle training in hyderabad
oracle training
hadoop training in chennai
hadoop training in bangalore