5.8K Views
May 29, 23
スライド概要
2020年7月8日 ビヨンド勉強会 #25
株式会社ビヨンド システムソリューション部
宮崎 健太
Ansible初心者に向けた基礎的説明とSSL照明書更新の流れについて説明します。
日本・中国・カナダを拠点に、AWS や GCP・Azure などのマルチクラウドに対応した、クラウド / サーバーの構築・移行、24時間365日の運用保守 / 監視、負荷テスト、Webシステム開発、サーバーサイド / API 開発 など、クラウド / サーバーに特化したサービスをご提供いたします。 ● コーポレートサイト https://beyondjapan.com ● YouTube https://www.youtube.com/c/beyomaruch ● X(Twitter) https://twitter.com/beyondjapaninfo ● Instagram https://www.instagram.com/beyondjapan_24365
Ansible でSSL証明書 を自動更新してみた 株式会社ビヨンド 宮崎健太
自己紹介 宮崎健太 株式会社ビヨンド2017年入社 システムソリューション部4年目 AWSソリューションアーキテクト GCPプロフェッショナルクラウドアーキテクト Linuc- 1 普段の業務内容: AWS,GCP,Azur e,IDCF,IIJ,Or acle・・・等マルチクラウドでの構築業務 SSL証明書の更新や脆弱性対応等の運用業務
今日のアジェンダ ● ● ● ● ● Ansibleとは? Ansibleの特徴 Ansibleの基本操作 Ansibleが何故便利なのか AnsibleでSSL証明書を更新 - - 環境の説明 - - Ansibleディレクトリ構成の説明 - - インベントリ、プレイブックの説明 ● おわりに
Ansible とは? ● ● ● ● AnsibleとはPython製の構成管理自動化ツール YAML形式で設定ファイルを書く システムの構成管理が主であるが、マルチレイヤにも活用できる ChefやPuppetと異なる点として、導入が容易
Ansible の特徴① ● 設定ファイルの可読性が高い ⇒設定ファイルはYAMLで記述 ⇒YAMLは可読性が高く、学習コストが低い、わかりやすい ● エージェントがいらない ⇒Ansibleはエージェントソフトをインストールする必要がない ⇒Ansibleの設定を行うコントローラーサーバーと処理が実行されるノード間 でSSH接続ができればOK ● マルチレイヤ対応 ⇒管理対象のレイヤ(OS,ミドルウェア、アプリケーションまで)が幅広い
Ansible の特徴② ● モジュールが豊富 ⇒Ansibleで自動化する処理は、一から記述する必要はなく、あらかじめ用意 されているモジュールを用いて実行できる module 一覧:https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html ● 冪等性(べきとうせい)の担保 ⇒冪等性とは ⇒ある操作や同一の設定を、何度実行しても一度実行した操作の結果が変わ らないこと
Ansible の基本操作 ● Ansibleは指示を出すコントロールノードから、処理の対象になるターゲットノー ドにSSHでタスク(実行する処理内容)を送信して、その処理を実行する ● tar get- n odeにはPython 2 (バージョン 2.6 以降) または Python 3 (バージョン 3.5 以降)が必要 ● コントロールノードにAnsibleをインストールして、インベントリとプレイブック の2つのファイルを用意する インベントリ(inventory) ⇒ターゲットノードをリストして記載するファイル プレイブック(Playbook) ⇒ターゲットノードで実行したい処理を記載するファイル
Ansible が何故便利なのか 弊社でAnsibleを活用している場面としましては ● SSL証明書の更新 ● サーバーの構築 ● 大規模環境でのサーバーの設定変更 などなど An sibleを利用すると、複数台のサーバーに対して設定変更が可能なので、人 為的なミスがおこらず、効率的に作業を進めることができる 後の案件や同じような対応の時に、応用が効くのが一番推せるポイント
今日のアジェンダ ● ● ● ● ● Ansibleとは? Ansibleの特徴 Ansibleの基本操作 Ansibleが何故便利なのか AnsibleでSSL証明書を更新 - - 環境の説明 - - Ansibleディレクトリ構成の説明 - - インベントリ、プレイブックの説明 ● おわりに
Ansible でSSL証明書を更新 更新の流れの説明の前に・・・ ● 環境の説明 ● Ansibleディレクトリ構成の説明 ● インベントリ、プレイブックの説明
環境の説明 AWSでEC2インスタンスをAm azonlinux2で2台構築 1台目:Ansibleコントローラーサーバー Ansibleをyum でインストール 2台目:An sibleノードサーバー Python2.7がAm azon lin ux2に 元々インストール済み Apacheをインストール
今日のアジェンダ ● ● ● ● ● Ansibleとは? Ansibleの特徴 Ansibleの基本操作 Ansibleが何故便利なのか AnsibleでSSL証明書を更新 - - 環境の説明 - - Ansibleディレクトリ構成の説明 - - インベントリ、プレイブックの説明 ● おわりに
Ansible ディレクトリ構成の説明① host ⇒インベントリ(inventory) ⇒ターゲットノードをリストして記載するファイル main.yml ⇒プレイブック(Playbook) ⇒ターゲットノードで実行したい処理を記載するフ ァイル roles ⇒サーバーの役割ごとにPlaybookを独立させたもの ⇒他にもhttpd(Apacheのインストールと設定)、 php(PHPのインストールと設定)のように名づけて役 割でわけることで、再利用性を高める
Ansible ディレクトリ構成の説明② roles について ansible - galaxyというコマンドにより自動 でsslというrolesが作成される ansible- galaxyとは、他の人が作成した Ansibleのロールがシェアされるところで、 誰でも簡単に再利用することができる 実行したコマンド [root@ip - 10- 0- 1- 16 ansible]# ansiblegalaxy init ssl
Ansible ディレクトリ構成の説明③ sslのr oles配下に ①files ⇒証明書ファイルを配置 ②tasks - - m ain .ym l ⇒メインに実行する処理を記載する ③var s - - m ain .ym l ⇒変数を記載する
今日のアジェンダ ● ● ● ● ● Ansibleとは? Ansibleの特徴 Ansibleの基本操作 Ansibleが何故便利なのか AnsibleでSSL証明書を更新 - - 環境の説明 - - Ansibleディレクトリ構成の説明 - - インベントリ、プレイブックの説明 ● おわりに
インベントリ、プレイブックの説明① nam e: 任意で名づけ hosts: hostで指定したグループ名 r em ote_user : SSH接続するユーザー becom e: r oot権限で実行する r oles: どのr olesを使うか ①host(インベントリ) ⇒実行対象のサーバーを記載するファイル ①m ain .ym l(プレイブック) ⇒どのユーザーでSSHを行い、どのhostを対象に実行するか等を記載するファイ ル
インベントリ、プレイブックの説明② ②files ⇒証明書ファイルを配置
インベントリ、プレイブックの説明③ ④vars - - m ain.ym l 変数を記載したファイル
インベントリ、プレイブックの説明④ ①証明書を配置するディレクトリを作成 name: 任意の名づけ file: ⇐fileモジュール ②①で作成したディレクトリに証明書ファイル をアップロード nam e: 任意の名づけ copy: ⇐copyモジュール with_items ループ処理を行う タスク内でitemという名前の変数を使う https://docs.an sible.com /an sible/2.4/playbooks_loops. htm l# stan dar d- loops
インベントリ、プレイブックの説明⑤ ③①で作成したディレクトリにシンボリック リンクを貼る (元々Apacheのconfigで証明書の向き先のパ スをシンボリックリンクにしているため、シ ンボリックリンクが切り替われば証明書の更 新が完了)
Ansible を実行する前に・・・チェック ● 現在いる場所 [root@ip - 10- 0- 1- 16 ansible]# pwd /opt/ansible ● ansible- playbookコマンドの書式 [root@ip - 10- 0- 1- 16 ansible]# ansible - playbook 実行するプレイブック - i インベントリファイル -- private - key=秘密鍵 ● シンタックスチェック ansible- playbook m ain .ym l - i host - - pr ivate- key=/hom e/ec2- user /.ssh/id_r sa -- syntax - check ● ドライラン ansible- playbook m ain .ym l - i host - - pr ivate- key=/hom e/ec2- user /.ssh/id_r sa - C
ドライランを実行 -C ok サーバの状態が変更されなかった時 changed サーバの状態が変更された時 failed 失敗した時 failed が出た場合、後続にtaskがあると実行されなくなってしまうので注意です
ドライランでfailed が出た場合 まず、failed の理由を確認します。 間違いがある場合修正しますが、ドラ イランの段階では、どうしても出てし まう場合 ⇒when: not ansible_check_mode whenは、条件評価を行なって「真」と なったらそのタスクを実行するという ステートメント ansibleがcheck_m ode(ドライラン)では ない(not)場合は実行する意味
ドライランを再実行 シンボリックリンク作成のタスクがskipされ、failedはなく正常に完了しました。
ansible -playbookコマンドを実行 [root@ip - 10- 0- 1- 16 ansible]# pwd /opt/ansible [root@ip - 10- 0- 1- 16 ansible]# ansible - playbook main.yml - i host -- private - key=/home/ec2 - user/.ssh/id_rsa (ansible- playbook 実行するプレイブック - i インベントリファイル - - pr ivate- key=秘密鍵)
ansible -playbookコマンドを実行 ok=4 changed=3 failed=0 ①実行前にディレクトリの確認 ②ansibleの実行 ③実行後ディレクトリの確認
もう一度Ansible コマンドを実行 もう一度実行すると・・全てok 全てokが返ってくる=サーバーに変化がない 何度実行しても同じ結果となるので、冪等性を保っている
おわりに 簡単なplaybookを作って実行まですることができました。 YAMLファイルはプログラム言語と違って、なんとなくでも理解しやすく、取っ かかりやすく感じました!(ここ重要) 今回は簡単な設定だけ行いましたが、Ansibleはマルチレイヤー(OSのインスト ールからアプリケーションのデプロイ)に活用することが可能なとこも魅力です ね。 本当に簡単にできましたので 是非、試したことない方は試してみて下さい!!