Furyu
[フリュー公式]

Tech Blog

フリュー株式会社の技術ブログです

2018年10月16日

awata

ansible で become_user が失敗した時の対応

はじめまして。こんにちは。
ピクトリンク事業部インフラ課の粟田です。

今回の内容を書くに至った経緯

ansibleを社内で利用している事は他の記事を参照してもらえればわかると思いますが、今回そんな運用の中で発生した問題とその解決方をメモとして残しておこうという次第です。

ついでに周りからのなんか書いて投稿しろ、という感じだったりします。

 

発生した問題

ユーザ管理とsudoの権限設定にはldapを使用している環境になります。

実際にログインした状態で

などは実行できます。

また、ansibleを実行する際に、ansible_ssh_userにrootを基本的には使用しないのが運用ルールとしてあります。

どのサーバにもrootでログインしようとする人が居るので、これは禁止すべきでしょ、普通。

この状態で、以下の様なplaybookを実行するとエラーになりました。

エラー内容はこう(あまりにも見難かったのでjqで整形してあります)

become_userを記載しない場合には問題なく実行完了するので、油断してたんですが、実際にログインして、コマンドを実行してみました。

ようは、

  • ansibleでログインする際のユーザは一般ユーザ
  • 一般ユーザでもsudoできる
  • sudo -u 別ユーザ コマンド が実行できない

という部分がポイントです。

そんな環境そうそうないでしょうけど…

解決方法

  • 今更ldapの設定を変更して失敗したら影響範囲が大きいのでとっても億劫
  • 一部バッチ処理でもsudoしてるのがあるのでldapいじりたくないな
  • とりあえず、運用としてansibleユーザだけなんとかできれば良い

という事で、ansibleユーザのsudoの権限を単純に解決することにしました。

としてローカルで作成したファイルをansibleのcopyモジュールでリモートの/etc/sudoers.d以下に配置するという最も単純な手法で解決としました。

あとがき

ldapサーバ作った時にもうちょっと検証しておけば…

内輪ネタは削除された…


2018年09月20日

Kayo

sshfsを使ってみました!

みなさん、こんにちは。ピクトリンク事業部インフラ課の藤本佳世です。
今回は、使ってみてとても便利だった「sshfs」をご紹介したいと思います。

sshfsとは

SSHを経由して、他のサーバのディレクトリをマウントすることができるコマンドです。

なぜ便利なのか?

私は日々の業務でよくAnsibleを使ってサーバのミドルウェアのインストールや設定などを行います。
※Ansibleについては、以前ブログを書いているのでこちらをご覧ください。

 

今までは自分のローカルUbuntu環境からAnsibleを実行していたのですが、Macから実行すると環境違いでエラーになる事などがありました。
この状況を解消すべく、インフラ課のメンバー全員が同じ環境でAnsibleを実行できるよう専用サーバを構築しました。しかし、ローカルとリモートのコードを2重で管理という面倒な仕様になってしまい、何か解消する方法はないかと悩んでいました。

blog1

そんな時見つけたのが「sshfs」です。
これを使ってリモートで直接コードを修正しつつ、ローカルでのデバッグ実行も可能となり、とても便利になりました。

NFSと比較した場合、リモートサーバでコマンドを実行する(=SSHでログインして実行する)環境が既にできあがっているので、ローカル側にプログラムをインストールするだけで実現可能というお手軽さもあります。

使い方は簡単

  • sshfsのインストール(Ubuntuの場合)

  • マウント方法

例として、私のローカルマシーンの/testというディレクトリを作成し、サーバserver1の/home/fujimoto.kayoディレクトリをマウントします。

あとは、sshfsコマンドをローカルマシーンから実行するだけです。

これでマウントができた状態です。実際にサーバserver1の/home/fujimoto.kayo配下には、example-ansibleディレクトリが存在しますが、
ローカルマシーンの/test配下にも同じexample-ansibleが存在します。

  • アンマウント方法も簡単

最後に

コードの2重管理がなくなったり、コードの修正をローカルで使い慣れている環境のエディタで編集できたり、ちょっとした工夫で日々の業務がスムーズに行えるようになりました。

是非、皆さんもこの「sshfs」を使ってみて下さい!


2016年06月27日

Kayo

Ansible Meetup in Tokyo 2016.06に行ってきました!

みなさん、こんにちは。コンテンツ・メディア第1事業部インフラ担当の藤本佳世です。前回のブログの続き、「OpenStack構築手順」などご紹介する予定ですが、その前に2016年6月1日(水)に開催された「Ansible Meetup in Tokyo 2016.06」に参加したお話しをしたいと思います。自称「Ansible女子」の私。3年前にも参加したことがあり、今回は3回目の参加でした。

詳細URL http://ansible-users.connpass.com/event/31222/

Ansible

Ansibleとは、今回Meetupの会場でもあるレッドハットが開発するオープンソースの構成管理自動化ツールです。
ssh通信を利用して、クライアントサーバに直接命令を送り込むことができます。
フリューでは約3年前にAnsibleを導入し、ミドルウェアのインストールなどサーバ構築・管理には欠かせないツールとして利用しています。Ansibleを使うメリットはとても大きく、導入したことで、今まで手動で3時間もかかっていたサーバ構築作業を、1時間以内まで時間短縮を実現することができました。
使い始めた頃は、参考書も少なく、公式HPの英語ドキュメントを参考にしていましたが、今年の4月にO’Reillyから本も発売され、ますます注目されています。

公式ホームページ https://www.ansible.com/

発表内容

  • 「Ansible Core 2.0 Overview and future releases」 by Dylan Siliva
  • 「Jupyter+AnsibleによるLiterate Computing(手順書 as a Code)への挑戦」 @ enakai00
  • 「共通言語Ansible」 @seri_wb
<LT詳細>
  • 「ansible-vaultについて何か」 (ynn)
  • 「Ansibleの教育トレーニングはじめました」 (spchildren)
  • 「Ansible2.0とOpenStackの関係」 (saito_hideki)
  • 「Playbookからのドキュメント自動生成やってみてる」 (h-hirokawa)
  • 「Ansibleとterraformで実現するタグベース複数環境プロビジョニング実例」 (takuya_onda_3)

内容まとめ

Ansible2.0新機能と今後のリリース関連

  1. 200以上の新しいモジュールが追加された
  2. エラーメッセージの改善:よりわかりやすくエラーメッセージ内容を記載するようになった
  3. アーキテクチャが変更され、より簡単に開発できるようになった
  4. ansible-vaultと呼ばれる機密情報が書かれたファイルを暗号化するツールがリリースされた
  5. 36個の OpenStackモジュール追加され、バージョン1と比べて、とても使いやすく親和性が高い
  6. sudo機能が使えなくなる予定。ansible_ssh_hostnameを ansible_hostname, ansible_userに変更する必要がある
  7. 約400以上のモジュールをリリース予定(Dockerモジュールも追加予定)
  8. python3対応予定
  9. クラウド技術にも力を入れる予定 (AWS, OpenStackなど)

運用について

  1. 開発とインフラの作業ラグをなくす取り組みについて、ミドルウェアバージョンアップなどインフラではなく、開発メンバーにAnsibleを実行してもらっている
  2. ansible-vaultと呼ばれる機密情報が書かれたファイルを暗号化するツールの利用
  3. Ansibleは自動化だが、やはりメンテナンスする必要がある。複雑なplaybookを書いてしまい、結果ブラックボックス化してしまう。手順書を用いることで、だれが見ても分かるようにする
  4. Ansibleコードをシンプルに保つことが大切

感想

Ansibleバージョン2.0の新機能や今後リリース予定のモジュールなどの紹介がありました。
個人的には、【Jupyter+AnsibleによるLiterate Computing(手順書 as a Code)への挑戦 @ enakai00 】の発表が非常に興味深かったです。手順書作成の必要性について、いかにAnsible(コード)だけに頼らず、うまく手順書にAnsibleを載せるかについて紹介されていました。

私が所属するインフラチームは、Ansibleを導入して約3年ほど経ちます。新規サーバ構築以外に、ミドルウェアのアップデート、脆弱性対応など、様々なケースで利用しています。しかし、Ansibleの構成が複雑化してしまい、他のメンバーが使いこなす事が非常に難しい状態です。そんな時、やはり手順書があればと思っていました。発表で「Jupyter」を使った手順書作成についてのお話しを聞くことができました。Jupyterの知識はゼロですが、是非検証してみたいなと思いました。

その他にもOpenStackについて、Ansibleバージョン2以降、とても使いやすくなったとの発表もありました。
前回のブログで紹介したOpenStackは、Ansibleを使って構築しました。今後のブログで、その手順をご紹介するので、是非読んでいただければ嬉しいです。


2014年11月4日

kunihira

Vagrantで簡単Ansible実行環境を配布する

こんにちは。 最近、英語の勉強にハマっている国平です。

少し前の話になりますが、Bashに脆弱性が見つかった際にみなさまどのように対応されたでしょうか? 私の部署ではサーバのBashのバージョンアップを1台ずつログインして手動で実行していました。

このバージョンアップ作業自体は1コマンドで完了するのですが、サーバ台数が多く1台ずつに順にsshでログインしコマンドを実行するのは結構な手間が掛かりました。

そこでAnsibleを使って複数のサーバの状態をまとめて変更できるようにしました。

Ansibleによるサーバの管理自体は資料も多くすぐに実行出来ました。 以前、このブログでAnsibleを取り上げたときには参考にできる情報が少なかったのですが、 現在では非常に多くの優れた資料が公開されていますので、Ansibleを利用する事自体はそれほど難しくないかと思います。

しかし、次の課題としてチーム全員がAnsibleを利用できるようにしなくてはいけません。 Ansibleの利用に集中できるように簡単にAnsibleの実行環境を構築できるような仕組みづくりを目指して、 Vagrantを利用して実行環境も含めてGitで管理し、配布できるようにしました。

今回のポイント

今回の課題は、チーム全員が簡単にAnsible実行環境を使えるようにするということです。 AnsibleのPlaybook自体はGitでバージョン管理出来ているので、同様にGitで実行環境も管理できると、 便利で配布がしやすくなりそうです。

そのため、今回はVagrantの設定ファイルをPlaybookとセットでGit管理し、Vagrantを実行するだけで、 Ansibleがインストール済みで、Playbookも利用できる仮想マシンにアクセスできるような仕組みづくりを行いました。

Ansibleとは

Ansibleはリモートマシンのあるべき状態をPlaybookというファイルに記述し、実行する事で、リモートマシンの環境を整えるツールです。 以前にもこのブログの記事でも取り上げました。

最近では急速に普及が進んで、利用するための情報も多く公開されていますし、電子書籍ですが入門Ansibleという本も公開されています。

Vagrantとは

Vagrantは仮想環境をコマンドラインから利用するツールです。 VirtualBoxをコマンドラインから利用する事ができる他、ネット上で公開されているBoxを取得して実行したり、 仮想マシンの起動時にShellスクリプトやChef、Puppetなどを利用してプロビジョニングを行う事も出来ます。

こういった設定を全てVagrantfileにRubyのDSLとして記述する事ができるので、Vagrantfileとプロビジョニングに使うファイルをGitにコミットしておけば、どこからでも同一状態の仮想マシンを利用する事が出来ます。

今回の方針

今回は、PlaybookとVagrantfile、そして仮想マシンのプロビジョニングファイルを1つのGitリポジトリにまとめてコミットしておきます。 プロビジョニングには、チームメンバーが誰でも読み書きできる前提で、Shellスクリプトを利用することにしました。

今回作成したGitリポジトリのサンプルはこちらです。

仮想環境構築のポイント

Vagrantで仮想環境を複数人で利用するためのポイントは下記の3点です。

  • Boxを自動的に取得するようにする
  • 仮想マシンを起動したら自動でPlaybookを実行できるようにする

Boxを自動的に取得するようにする

Vagrantでは仮想マシンの起動の際にベースとなるイメージファイルをBoxと呼びます。 最初にVagrantを利用する際にはBoxを取得して利用するのですが、 チームメンバーが個々にBoxを取得するのも面倒です。

なので、全員がおなじBoxを利用できるようにVagrantfile内で config.vm.box_url を設定しておきます。 これにより、Vagrantを実行するホストマシンに config.vm.box で指定したBoxが存在しなければ、指定したURLからBoxを取得して起動するようになります。 サンプルではCentOS6のBoxを取得して、furyu_blog_sample という名前で利用できるように設定しています。

仮想マシンを起動したら自動でPlaybookを実行できるようにする

この処理には2つのポイントがあります。

ホストのディレクトリを同期

まずは、仮想マシンとホストマシンのディレクトリを同期する設定をします。 Vagrantfileで config.vm.synced_folder "<HOST_DIR>", "<VM_PATH>" を設定すると、ホストマシンの指定したディレクトリを、仮想マシンから参照できるようになります。

サンプルで公開しているリポジトリの場合ですと、下記のように設定する事でサンプルリポジトリ全体を仮想マシン上では /playbook ディレクトリとして扱う事が出来ます。

仮想マシンをShellプロビジョニング

もう一つのポイントは、Vagrantのプロビジョニング機能を利用して仮想マシンにAnsibleやその実行のために必要なツールをインストールすることです。

Vagrantでは前述の通り仮想マシンの新規起動時にシェルスクリプトなどの実行をさせる事ができます。 なので、先ほど同期したリポジトリ内に、Ansibleのインストールなどを行う処理をまとめたシェルスクリプトを用意しておいて、実行するようにします。

今回は、リポジトリ内のvagrantディレクトリに置いてある、bootstrap.shを実行するようにします。

bootstrap.shは下記のような内容になっています。

Ansibleを実行する

サンプルリポジトリを使ってAnsibleを実行してみます。 なお、今回仮想マシンに利用しているCentOS6では、Ansibleが実行時にsshを自動的には利用してくれないので、-c オプションをつけて明示的にsshを利用するようにしています。 このサンプルは、Vagrantが利用できる事が前提となっています。

上記のコマンドを順に実行すると仮想マシンが立ち上がり、接続し、そしてplaybookが実行出来ます。

まとめ

今回の記事ではAnsibleの実行環境をVagrantを利用して配布しました。 これによって、チームメンバー全員が簡単にAnsibleを利用する事ができます。 簡易ながらVagrantを用いてプロビジョニングする事で、 サーバ環境だけでなく、実行環境にもべき等性を持たせる事が出来ました。 これでチームメンバーのローカルマシンの設定の差に影響を受けずに作業する事ができます。

関連記事