SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
本気で使うStackStorm
Ansible連携と冗長化について
2017/10/11
ソフトバンク株式会社
山根 武信
1
自己紹介
山根 武信
所属:テクノロジーユニット
ネットワーク統括
サービスプラットフォーム開発本部
アプリケーション&クラウド開発統括部
基盤開発企画部
コアテクノロジー開発課
・内製S/W開発
・統計PF開発
・NFV開発
・サービス系インフラ自動化開発
最近読んだ本:
趣味:
走って痩せる
ちばアクアラインマラソン 2016
2
最近やっていること
個別インフラから共通インフラへ
認証 Web ・・・認証 Web ・・・
個別 個別 個別
共通インフラ
3
環境
7.3.1611
2.1.1-1
Ansible連携
4
5
StackStormの用途
ワークフローエンジンとして利用
NW機器 サーバ
6
StackStormおさらい
IFTTT for DevOps
IF “ログファイルに特定の文字列が追加されたら”
THEN “L2SWの特定portをshutdownする”
THIS
THAT
7
StackStormおさらい(単純なAction)
Sensors
RuleTrigger
Trigger Critera Action
Call
Action
IFTTT定義
ファイル監視 一行追加 特定文字
列のみ
L2SW に
ssh し設
定変更
L2SW に
ssh し設定変
更実行
8
StackStormおさらい(Workflow)
Sensors
RuleTrigger
Trigger Critera Action
Call
Workflow
Action
IFTTT定義
Action
Action
Action
Call
9
StackStorm実装
Django
Apps
Rules
WebHook
Trigger
Trigger
Workflow
Action
Call
Workflow
Action
mistral-v2
Ansible
Action
Ansible
Action
Ansible
Action
Call
Open
Stack
Call
Ansible
Playbook
Ansible
Playbook
Ansible
Playbook
API
Call
10
StackStorm実装
Rule
---
name: "delete_vm_rule"
pack: "workflow"
description: "StackStorm Delete VM webhook Rule"
enabled: true
trigger:
type: "core.st2.webhook"
parameters:
url: "delete_vm"
action:
ref: "workflow.delete_vm_action"
parameters:
trace_tag: "{{ trigger.body.trace_tag }}"
project: "{{ trigger.body.project }}"
controller: "{{ trigger.body.controller }}"
vm_name: "{{ trigger.body.vm_name }}"
■URL
https://[HOST]/api/v1/webhooks/delete_vm
■Header
St2-Trace-Tag: [ Trace Tag value ]
X-Auth-Token: [ Token value ]
Content-Type: application/json
■Body
{"trace_tag": “’Trace Tag Value’",
"project": “’project value’",
"controller": “’controller value’",
"vm_name": “’vm_name value’"}
Rule定義ファイル [delete_vm_rule] Webhook REST-API
REST-API URLの指定
REST-API JSONパラメータ
Actionの指定
11
StackStorm実装
Action
---
description: delete vm
enabled: true
entry_point: workflows/delete_vm_action.yml
name: delete_vm_action
pack: workflow
parameters:
trace_tag:
default: dummy
type: string
project:
default: dummy
type: string
controller:
default: dummy
type: string
vm_name:
default: dummy
type: string
runner_type: mistral-v2
Action定義ファイル
Workflow定義ファイルの指定
Workflow Engineの指定
12
StackStorm実装
Workflow
version: '2.0'
name: workflow.delete_vm_action
description: delete_vm
workflows:
main:
type: direct
input:
- trace_tag
- project
- controller
- vm_name
tasks:
delete_vm:
action: ansible.playbook
input:
private_key: /xxxxx/id_rsa
user: xxxxx
inventory_file: /xxxxx/hosts
playbook: /xxxxx/delete_vm.yml
extra_vars: project=<% $.project %> controller=<% $.controller %> vm_name=<% $.vm_name %>
on-error:
- send_ng_status
on-success:
- send_ok_status
send_ok_status:
action: core.http
input:
url: http://xxxxx/
method: POST
headers: { "Content-Type": "text/plain" }
body: "<% $.trace_tag %>, 0"
send_ng_status:
action: core.http
input:
url: http://xxxxx/
method: POST
headers: { "Content-Type": "text/plain" }
body: "<% $.trace_tag %>, 1"
Ansible Playbook Action
extra_vars で Ansible にパラメータ渡し
呼び出し元に結果とTrace Tagを返す
Ansible Playbookの指定
Workflow定義ファイル [delete_vm_action.yml]
13
StackStorm実装
Ansible Playbook
---
- name: delete vm
hosts: st2
connection: local
vars:
project: "{{ project }}"
controller: "{{ controller }}"
vm_name: "{{ vm_name }}"
environment:
OS_IDENTITY_API_VERSION: "3"
gather_facts: false
roles:
- { role: delete_vm, when: "vm_name != '-'" }
Playbook [delete_vm.yml]
StackStormから渡されたパラメータ
- name: delete vm
os_server:
auth:
auth_url: "http://{{ controller }}:5000/v3"
username: "{{ auth_env.username }}"
password: "{{ auth_env.password }}"
project_domain_id: "{{ auth_env.project_domain_id }}"
project_name: "{{ project }}"
user_domain_id: "{{ auth_env.user_domain_id }}"
state: "absent"
timeout: "{{ vm_env.timeout }}"
name: "{{ vm_name }}"
Role [delete_vm]
14
Ansible Packを使用する理由
リカバリの容易さ
StackStorm障害時にAnsible単体でリカバリ可能
モジュールの豊富さ
設定対象に対するAnsible Moduleが豊富
デメリット
構成が複雑
課題
StackStormとAnsibleの使い分け
冗長化
16
Host#3
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
Host#2
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
冗長構成概要
Host#1
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
LB
HTTPS VIP AMQP VIP MySQL VIP
st2api
MongoDB MongoDBMongoDB
RabbitMQ
MariaDB
RabbitMQ
MariaDB
データ冗長 アクセス冗長
MongoDB Replica set Client
RabbitMQ Mirrored queue LB
MariaDB Galera cluster LB
RabbitMQ
MariaDB
17
Host#3
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
Host#2
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
LBヘルスチェック
Host#1
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
LB
HTTPS VIP AMQP VIP MySQL VIP
st2api
MongoDB MongoDBMongoDB
RabbitMQ
MariaDB
RabbitMQ
MariaDB
RabbitMQ
MariaDB
18
1.認証
Host#3
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
Host#2
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
処理フロー
Host#1
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
LB
HTTPS VIP AMQP VIP MySQL VIP
st2api
MongoDB MongoDB
RabbitMQ
MariaDB
MongoDB
RabbitMQ
MariaDB
RabbitMQ
MariaDB
①Client が REST APIでToken要求
②払いだされたTokenはMongoDBに保存
1
2
19
2.WebHook Trigger
Host#3
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
Host#2
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
処理フロー
Host#1
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
LB
HTTPS VIP AMQP VIP MySQL VIP
st2api
MongoDB MongoDB
RabbitMQ
MariaDB
MongoDB
RabbitMQ
MariaDB
RabbitMQ
MariaDB
①Client が Tokenを指定してREST APIで
WorkflowをTrigger
②MongoDBに保存しているTokenで認証
③st2rulesengineへのRPCリクエストをMQ
にキューイング
1
2
3
20
3.Rule
Host#3
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
Host#2
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
処理フロー
Host#1
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
LB
HTTPS VIP AMQP VIP MySQL VIP
st2api
MongoDB MongoDB
RabbitMQ
MariaDB
MongoDB
RabbitMQ
MariaDB
RabbitMQ
MariaDB
①MQよりRPCリクエストを取得
②MongoDBよりRuleを取得
③Rule判定
④st2actionrunnerへのRPCリクエストをMQ
にキューイング
1
3
4
2
21
4.Action
Host#3
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
Host#2
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
処理フロー
Host#1
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
LB
HTTPS VIP AMQP VIP MySQL VIP
st2api
MongoDB MongoDB
RabbitMQ
MariaDB
MongoDB
RabbitMQ
MariaDB
RabbitMQ
MariaDB
①MQよりRPCリクエストを取得
②MongoDBよりActionを取得
③mistral-serverへのRPCリクエストをMQに
キューイング
1 3
2
22
5.Workflow
Host#3
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
Host#2
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
st2api
処理フロー
Host#1
st2auth
st2rulesengine
st2actionrunner
mistral-server
Nginx
LB
HTTPS VIP AMQP VIP MySQL VIP
st2api
MongoDB MongoDB
RabbitMQ
MariaDB
MongoDB
RabbitMQ
MariaDB
RabbitMQ
MariaDB
①MQよりRPCリクエストを取得
②MariaDBよりWorkflowを取得
③Workflow実行
1
3
2
23
冗長時の考慮事項
StackStormのMongoDB設定
Workflowでの注意点
同一WorkflowのActionでも別々のホストで実行される可能性があるので、ローカルに作
成したファイルを次のActionで使う等は動作しない場合がある
(core.localで作成したファイルの再利用等)
[database]
host = mongodb://{{ Host#1 ip }},{{ Host#2 ip }},{{ Host#3 ip }}/?replicaSet={{ replica set name }}
/etc/st2/st2.conf
24
End of File

Weitere ähnliche Inhalte

Was ist angesagt?

Always on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントAlways on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイント
Masayuki Ozawa
 

Was ist angesagt? (20)

EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化Ansibleで始めるインフラ構築自動化
Ansibleで始めるインフラ構築自動化
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門
 
大規模環境のOpenStack アップグレードの考え方と実施のコツ
大規模環境のOpenStackアップグレードの考え方と実施のコツ大規模環境のOpenStackアップグレードの考え方と実施のコツ
大規模環境のOpenStack アップグレードの考え方と実施のコツ
 
AnsibleによるInfrastructure as code入門
AnsibleによるInfrastructure as code入門AnsibleによるInfrastructure as code入門
AnsibleによるInfrastructure as code入門
 
KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(基礎編)配布用
 
Akka actorを何故使うのか?
Akka actorを何故使うのか?Akka actorを何故使うのか?
Akka actorを何故使うのか?
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #1320210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
 
Always on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントAlways on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイント
 
AWS Instance Schedulerは、ぜひ使うべきなのか?
AWS Instance Schedulerは、ぜひ使うべきなのか?AWS Instance Schedulerは、ぜひ使うべきなのか?
AWS Instance Schedulerは、ぜひ使うべきなのか?
 
Kof2017 シラサギ導入
Kof2017 シラサギ導入Kof2017 シラサギ導入
Kof2017 シラサギ導入
 

Ähnlich wie 本気で使うStack storm

クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Daisuke Ikeda
 
Aws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそうAws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそう
Genta Watanabe
 
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
Kohsuke Kawaguchi
 

Ähnlich wie 本気で使うStack storm (20)

Spark Analytics - スケーラブルな分散処理
Spark Analytics - スケーラブルな分散処理Spark Analytics - スケーラブルな分散処理
Spark Analytics - スケーラブルな分散処理
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 
Parse触ってみた
Parse触ってみたParse触ってみた
Parse触ってみた
 
~ Cloud First から Cloud Optimized へ ~ .NET on Cloud が描くモダナイゼーション
~ Cloud First から Cloud Optimized へ ~ .NET on Cloud が描くモダナイゼーション~ Cloud First から Cloud Optimized へ ~ .NET on Cloud が描くモダナイゼーション
~ Cloud First から Cloud Optimized へ ~ .NET on Cloud が描くモダナイゼーション
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
 
現場的!オンプレとAWSの違い
現場的!オンプレとAWSの違い現場的!オンプレとAWSの違い
現場的!オンプレとAWSの違い
 
StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践StackStormを活用した運用自動化の実践
StackStormを活用した運用自動化の実践
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
Aws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそうAws tools for power shellをつかいこなそう
Aws tools for power shellをつかいこなそう
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
BPStudy20121221
BPStudy20121221BPStudy20121221
BPStudy20121221
 
SlackのSlash commandの処理をAWS Lambdaで実装してみました
SlackのSlash commandの処理をAWS Lambdaで実装してみましたSlackのSlash commandの処理をAWS Lambdaで実装してみました
SlackのSlash commandの処理をAWS Lambdaで実装してみました
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
 
Ignite 2021秋 recap - 開発者向け新機能紹介
Ignite 2021秋 recap - 開発者向け新機能紹介Ignite 2021秋 recap - 開発者向け新機能紹介
Ignite 2021秋 recap - 開発者向け新機能紹介
 
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
 
コマンド1発でAzureにDC/OS環境を作る方法
コマンド1発でAzureにDC/OS環境を作る方法コマンド1発でAzureにDC/OS環境を作る方法
コマンド1発でAzureにDC/OS環境を作る方法
 
今からでも間に合う!インフラ自動化超入門 @渋谷
今からでも間に合う!インフラ自動化超入門 @渋谷今からでも間に合う!インフラ自動化超入門 @渋谷
今からでも間に合う!インフラ自動化超入門 @渋谷
 

本気で使うStack storm