Empowered by expect

希望は体力

Docusaurus v2のコンテンツをCloudflare Pagesで公開する

タイトルの通りです。

参考にしたのはこちら。ほぼこの手順のままですがアップデートされた点もあったので残しておきます。
dev.to

重要なアップデート

一番書きたかったのはここです。

Cloudflare Pagesのフレームワーク選択画面でDocusaurusを認識するようになっているっ...

大まかな流れ

(1)GitHubに空リポジトリを作っておく

(2)手元にDocusaurusをセットアップ

(3)DocusaurusのコンテンツをGitHubにpush

(4)CloudflareでPagesのプロジェクトを作成

(5)build!

(6)サイトのできあがり

成果物はこちらです。
docusaurus-cfpages.pages.dev

(テストとしてDocusaurus初期状態でデプロイしてるのでそのうち消します)

今回の作業ではlocalの作業用ディレクトリ、GitHubリポジトリ名、Cloudflare PagesのURLをすべて docusaurus-cfpages で作成しました。

(1)GitHubに空リポジトリを作っておく

GitHubでPublicリポジトリを作成しておきます。
READMEも無くてよいでしょう。

(2)手元にDocusaurusをセットアップ

以下はLinux環境での手順です。
DocusaurusはNode.jsのLTS版を動作確認対象としています。今回は16.15.0をpyenv(anyenv)環境で使用しました。

nodejsのインストール

anyenv install nodenv
~/.anyenv/bin/anyenv install --init
eval "$(anyenv init -)"
anyenv install nodenv
exec #SHELL -l
nodenv init
eval "$(nodenv init -)"
nodenv install 16.15.0
nodenv global 16.15.0

Docusaurusのインストール

npx create-docusaurus@latest docusaurus-cfpages classic
cd docusaurus-cfpages

vi docusaurus.config.js (urlを設定します)
  url: 'https://docusaurus-cfpages.pages.dev',

(3)DocusaurusのコンテンツをGitHbにpush

git init
git remote add origin git@github.com:w4yh/docusaurus-cfpages.git
git add .
git commit -m "Initial commit"
git branch -M main
git push -u origin main

(4)CloudflareでPagesのプロジェクトを作成

Cloudflare管理画面にログインします。
Pagesはドメイン選択前のトップ階層のサイドバーメニューにあります。

[プロジェクトを作成] をクリックしてウィザードを開始します

リポジトリの選択 の画面でGitHubまたはGitLabのアカウントとリポジトリを指定します
[セットアップの開始] をクリックします

②ビルドとデプロイのセットアップ 画面で以下を指定します。

フレームワークプリセット: Docusaurus
 プルダウンの選択肢の中にDocusaurusがあります。素晴らしい
・ビルドコマンド: npm runbuild
・ビルド出力ディレクトリ: build
環境変数: NODE_VERSION = 16.15.0

[保存してデプロイする] をクリックします

(5)build!

③サイトをデプロイ 画面に進行状況が表示されます。

成功すると"成功しました!"のメッセージとともにデプロイ先のURLが表示されます。
(今回はhttps://docusaurus-cfpages.pages.dev)

(6)サイトのできあがり

デプロイ先URLをクリックして出来栄えを確認します。

一度デプロイに成功すれば、次回以降のpush(merge)の際は自動的に再デプロイされます。


感想

自前サーバーのGitLab Pagesは使ってきましたが、Cloudflare Pagesもとてもお手軽で良いです。
Docusaurus以外にも多様なプリセットが指定可能なので一部のスクショを載せておきます。


GLPI Agent 1.2をAmazon Linux2にインストール

資産管理というか運用管理ツールというか機能豊富なツールであるGLPIがバージョン10に到達しました。
(途中0.9xから9.xへの変更で飛び番しています)

glpi-project.org

これまでもOCS-Inventory NGなどと連携するディスカバリ機能がありましたが10ではNative inventoryが追加されました。
FusionInventoryをforkしたそうで、GLPI10本体のfinal releaseに先駆けてAgentはバージョン1.2まで公開されています。

glpi-project.org

このGLPI Agent 1.2をAmazon Linux 2のインスタンスに導入してみたので手順を残しておきます。

標準インストーラーではNG

perlスクリプトインストーラーが用意されています。まずはこちらを試してみます。

# wget https://github.com/glpi-project/glpi-agent/releases/download/1.2/glpi-agent-1.2-linux-installer.pl

# perl glpi-agent-1.2-linux-installer.pl --install
Not supported linux distribution

...ディストリビューション判定でひっかかりますね...Alma Linuxは行けたのですが。
次の手としてRPMパッケージからのインストールを試みます。

RPMパッケージからインストール

まずは準備として、Perl modulesの依存が多いのでEPELを有効にしてyumからインストール出来るようにしておきます。

# amazon-linux-extras install epel
# yum repolist
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
209 packages excluded due to repository priority protections
repo id                                              repo name                                                           status
amzn2-core/2/x86_64                                  Amazon Linux 2 core repository                                          27,693
amzn2extra-docker/2/x86_64                           Amazon Extras repo for docker                                               56
amzn2extra-epel/2/x86_64                             Amazon Extras repo for epel                                                  1
amzn2extra-kernel-5.10/2/x86_64                      Amazon Extras repo for kernel-5.10                                         143
epel/x86_64                                          Extra Packages for Enterprise Linux 7 - x86_64                      13,542+209
repolist: 41,435

ではRPMをダウンロードしてインストールしていきましょう。

# wget https://github.com/glpi-project/glpi-agent/releases/download/1.2/glpi-agent-1.2-1.noarch.rpm
# yum install glpi-agent-1.2-1.noarch.rpm

Perl modulesが大量にインストールされますが正常にインストールできました。
他のパッケージも同様にインストールしていきます。

# yum install glpi-agent-task-collect-1.2-1.noarch.rpm
# yum install glpi-agent-task-deploy-1.2-1.noarch.rpm
# yum install glpi-agent-cron-1.2-1.noarch.rpm
# yum install glpi-agent-task-network-1.2-1.noarch.rpm

設定

通信先サーバーなどの設定を行います。
tagのところにagentをインストールした機器自身のFQDNを設定します。
ここで設定しているuser, passwordはGLPIサーバー側でbasic認証を設定している場合に必要です。GLPIのログインアカウントではありません。

# diff /etc/glpi-agent/agent.cfg /etc/glpi-agent/agent.cfg.20220422
12c12
< server = http://glpi-server.example.com/
---
> #server = http://server.domain.com/front/inventory.php
16c16
< local = /tmp
---
> #local = /tmp
72c72
< user = glpi
---
> user =
74c74
< password = foobar
---
> password =
95c95
< httpd-trust = 127.0.0.1/32,GLPIサーバーのIPアドレス/32
---
> httpd-trust =
117c117
< tag = amzn2.example.com
---
> tag =

ではAgentを起動してします。

# systemctl enable glpi-agent
# systemctl start glpi-agent
# systemctl status glpi-agent
● glpi-agent.service - GLPI agent
   Loaded: loaded (/usr/lib/systemd/system/glpi-agent.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-04-22 07:05:17 UTC; 45min ago
     Docs: man:glpi-agent
 Main PID: 4184 (glpi-agent (tag)
   CGroup: /system.slice/glpi-agent.service
           └─4184 glpi-agent (tag amzn2.example.com): waiting

Apr 22 07:17:15 amzn2.example.com glpi-agent[4207]: running task Inventory
Apr 22 07:17:15 amzn2.example.com glpi-agent[4207]: New inventory from amzn2.example.com-2022-04-22-05-38-59 ....com)
Apr 22 07:17:16 amzn2.example.com glpi-agent[4207]: Inventory saved in /tmp/amzn2.example.com-2022-04-22-05-38-59.xml
Apr 22 07:17:17 amzn2.example.com glpi-agent[4252]: running task RemoteInventory
Apr 22 07:17:17 amzn2.example.com glpi-agent[4184]: target local0: next run: Fri Apr 22 08:11:07 2022 - /tmp
Apr 22 07:35:55 amzn2.example.com glpi-agent[4184]: target server0: server http://glpi-server.example.com/glpi/
Apr 22 07:35:55 amzn2.example.com glpi-agent[4184]: sending contact request to server0
Apr 22 07:35:55 amzn2.example.com glpi-agent[4336]: running task Inventory
Apr 22 07:35:55 amzn2.example.com glpi-agent[4336]: New inventory from amzn2.example.com-2022-04-22-05-38-59 ....com)
Apr 22 07:35:58 amzn2.example.com glpi-agent[4184]: target server0: next run: Sat Apr 23 07:23:46 2022 - http://mgmt...glpi/
Hint: Some lines were ellipsized, use -l to show in full.

動作確認

しばらくするとtarget local0の処理が行われ、インベントリ情報が/tmp以下のファイルに出力されます。

# ls -l /tmp
total 276
-rw-r--r-- 1 root     root     264870 Apr 22 10:01 amzn2.example.com-2022-04-22-05-38-59.xml

さらにtarget server0の処理が行われ、GLPIサーバーに登録が行われます。
GLPIサーバーの画面はこのような内容になります。

GLPI10-Inventory

ソフトウェアとしてRPMパッケージも登録されます。
今回のAmazon Linux 2インスタンスは起動直後のVanilla状態ですが、DBサービスを起動した場合は作成したデータベースの情報も登録されます。

Next


今後はリモートコマンドの活用や登録情報のメンテナンスをやってみようと思います。

2021年振り返り

アドベントカレンダーも書き終えたので今年の振り返りエントリーです。

転職

初めての転職を実績解除しました。
オンプレベースなデータセンター運用事業からAWSを中心としたクラウドCIerになりました。AWSの知識が何年何周も遅れているので今年はインプットに注力した1年でした。それでもまだまだ学ぶことが多くて大変です。
大きめのSIerからベンチャーな会社に移ったのでいろいろと違いもあり面白楽しいです。

帯状疱疹

夏の終わりから長いことのど風邪をひいてました。体力落ちた状態で流れが良くなかったのか秋に帯状疱疹を発症してしまいました。
皮膚の発疹はほとんどなかったのですが、胸痛がひどく寝付けない感じで一ヶ月くらい足をバタバタさせる生活でした。ほぼ2ヶ月棒に振ってしまいもったいなかったです。50歳以上になるとワクチン受けられるらしいですが、心身の調子を落としすぎずに過ごすことの大事さをあらためて感じました。

今年読んで良かった本

転職してAWSを学び直しているのでいろいろと読み直していますが即戦力で役に立ったものを挙げておきます。

AWSではじめるインフラ構築入門 安全で堅牢な本番環境のつくり方

www.shoeisha.co.jp

まずはこの本に沿って手を動かすのが分かりやすかったです。
自分の感覚で作業してしまうと「先にセキュリティグループ作っておかないとここで選択肢に出てこないのかー」といったちょっとしたことで引っかかってしまうので、全体の流れを見通した手順をなぞるのは理解がスムーズでとても良く何度も見返している一冊です。
自分の場合はこの本でやった内容をCloudShell上のaws cliでの手順に落とし込むことでかなり理解が深まりました。

Amazon Web Servicesインフラサービス活用大全 システム構築/自動化、データストア、高信頼化

book.impress.co.jp

自動化しないとやる気がしない病なので読みました。オンプレの時代に使っていたitamaeやStackStormとはまた異なるAWSで使える自動化手段をいろいろと学ぶのにとても良いと思います。CloudFormationはもちろんカバーする範囲がとても広いので、自分が使っているサービスの部分から読んでいくと良いかと思います。目の前のちっさい作業を自動化するのではなく最終的に目指す設計を示してゴールを目指すという各章の流れも分かりやすくて良いと思います。

AWSの薄い本 IAMのマニアックな話

AWSの薄い本Ⅱ アカウントセキュリティのベーシックセオリー

takuros.booth.pm
takuros.booth.pm

IAM自体は知っていましたがイマドキの機能範囲やベストプラクティスのようなものは全く分かっていなかったので2冊続けて読みました。このテーマでここまで詳しくたっぷりとまとまった本として読めるのはとてもありがたかったです。長くAWSを遣い続けている方は何年もかけて差分更新で知識を得て貯めてこられたと思いますが、一気に追いつきたいという時にまとまっている情報って意外と無いんですよ。

Infrastructure Monitoring with Amazon CloudWatch: Effectively monitor your AWS infrastructure to optimize resource allocation, detect anomalies, and set automated actions

www.kinokuniya.co.jp

上で挙げたのIAMもですがこうした縁の下の力持ち的サービスはなかなかまとまった情報を得るのが難しい気がします。こちらはCloudWatchの本ですがAWSの他のサービスを監視対象とする場合や連携させる場合についてマネジメントコンソールのスクショを豊富に挟みながら丁寧に解説してくれます。コンソールは頻繁にデザイン変わりますしスクショは英語なのでそのまま使えるわけでもないですが、CloudWatchでどこまでできるのか、を知ることのできるかなり良い本だと思います。

あとはSSMの本が欲しいです。公式の1578ページある英語PDFを読む気がするかと言うとちょっと私の力では...

直近の学びのテーマ

レジリエンスエンジニアリングについては引き続き調べ学びを続けています。そこから派生して、直近ではポストモーテムの実施方法について学んでいます。

今になって Tugboat.GTD のMeeting機能がよかったんじゃないかと思ったり。Etsyさんの morgue (https://github.com/etsy/morgue) はめっちゃ良さそうですがアーカイブされてて開発終了のようだったり....

やはり Jeli\.io に注目ですかね。予算欲しいです..
www.jeli.io

Jeliさんは先日Post Incidentの振り返り実施ガイドとして61ページの資料"Howie"を公開されました。"気構え"のような事にも多々触れていて、憂鬱になりがちなインシデント対応~振り返りを的確に行うための留意事項がまとまっています。こうしてまとまった形にしていただけるとチームでの共有もしやすくてありがたいですね。
www.jeli.io

結び

リモート登壇が苦手、というか設備的に弱めなのもありついに今年は登壇無しでおわってしまいました。インプット重視の一年だったからとも言えますが。
来年は発信していけるように頑張ります。まずはo11ycon2022のCFPに出そうかな...40分は無理ですが...

あと帯状疱疹に懲りたので運動と食事に留意した状態を継続的に維持していくことも頑張ります。

Talisman

gitで機微情報をアップしてしまって大変、という話は数多ありますがそういった事故を防いでくれるツールがTalismanです。
githookとして動作し、認証情報などが含まれる場合に警告を表示して中断します。開発元はあのThoughtworksです。

https://thoughtworks.github.io/talisman/

2019/10/02にバージョン 1.0.0に到達しました。
自分は個別のローカルレポジトリごとに導入しています。

curl https://thoughtworks.github.io/talisman/install.sh > ~/install-talisman.sh
chmod +x ~/install-talisman.sh
cd my-git-project
~/install-talisman.sh

以上でgit hookとしてTalismanが導入されます。グローバルに共通して導入する場合はGitHubのREADMEを参照してください。
検知ルールをカスタマイズする場合は、 https://github.com/thoughtworks/talisman/blob/master/detector/ 以下を編集してください。例えばファイル名や拡張子に関するルールは filename_detector.go に記述があります。

動作を見てみましょう。
ここでは拡張子 .pem の(空)ファイルを追加してpushを行ってみます。

$ git commit -m "add hoge.pem"
[master d1e81ab] add hoge.pem
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hoge.pem
$ git push -u foo
The following errors were detected in hoge.pem
         The file name "hoge.pem" failed checks against the pattern ^.+\.pem$

error: failed to push some refs to 'git@some:where/far.git'

検知されてpushはfailしました。
拡張子だけでなく、鍵ファイルの内容など様々なdetectorが用意されています。
githookで手前で防ぐことができ便利ですので、興味のある方はお試しください。

2020年の振り返り

2019年以上に低入力低出力な一年でした。
コロナの影響もありましたが、前年の異動以来もろもろうまく行ってない感が拭えません。厳しいですな...
そんな中ですが、2020年の振り返りと良かった本をまとめます。

ssmjpでレジリエンスの勉強成果を発表した

w4yh.hatenablog.com
コロナ前ギリギリのオンサイト回で登壇しました。理論?寄りの話なので話す機会を探っていましたが懐の深いssmjpさんでできました。20分もいただきましてありがとうございました。
勉強の進捗報告みたいな内容でしたが、長いこと学びながら悩んだことを一つ形にできたので良かったです。またその後の学びをアウトプットしていきたいです。

レジリエンスエンジニアリング関連の読み物

レジリエンスエンジニアリング関係では芳賀先生の本をよく読んでいますが、今年も2冊読みました。そのうち一冊をご紹介します。
www.amazon.co.jp
2009年に出た本ですがエラーパターンについては非常に"あるある"な事例を、対策については構造的で体系立ったお話が見開き2ページに1トピックでテンポ良く展開されます。自動化やシステム化の齋の注意と対策にそのままあてはまる内容も多く学びの多い一冊です。

ちなみに芳賀先生のもう一冊、2020年7月に出たこちらも学びが深く、現在読み込み中です。
www.amazon.co.jp


レジリエンスエンジニアリング関係ではもうお一人、ホルナゲル先生の本もよく読むのですが、そのうちETTO本と言われる一冊について2020年11月にttkzwさんによる秀逸なブログエントリがありました。
heartbeats.jp
レジリエンスエンジニアリング関連の理論を実際のIT業務に紐付けて考えるのはなかなか頭を使い大変なのですが、こちらのブログではETTO理論に絞って現実に迫られる選択、もしくは気付かないうちにしてしまっている選択にスコープを当てて見事に解説されています。ご興味のあるかたはぜひご一読を。

念願の一冊

一年前に書いた2019年のまとめブログの中で、読んだ本の中から BUID TRAP(英語版)を挙げて「日本語化されて欲しいな~」と書いていました。
w4yh.hatenablog.com

嬉しいことに2020年10月に日本語版が出ました。やったね!図が白黒になったりはしていますが内容は原著の明確でテンポの良い語りっぷりを踏まえた小気味良いものに仕上がっています。
www.oreilly.co.jp

まとめ

低入力低出力な中、なんとかレジリエンスエンジニアリング関連は興味を持って触れ続けることができた、という感じでしょうか。この学びをインフラ自動化の実践
に結びつけていきたい、というのが学びのきっかけでもあるので引き続き頑張って行こうと思います。ssmjpさんとか吉祥寺.pmさんとかでの発表を目指したいと思います。

ssmjp 202003回でレジリエンスの勉強報告をしました

2019年は低インプット低アウトプットだったなあ..と反省していた年末年始、正月の勢いでssmjpさんへ発表を申し込んでみました。ありがたいことに今回機会いただけて発表してきました。理屈っぽい話なのでどこで話すべきかなあ..と悩んでいたネタだったのでssmjpさんの懐の深さはありがたいです。

ssmjp.connpass.com

レジリエンスエンジニアリングおよびSafety-IIについてはここ何年か勉強続けています。きっかけは、スライドの中でも引用元として記載したNHKの"視点・論点"という番組でした。朝4時20分からの10分番組ですが、たまたま見ていて内容に刺激されて一気に目が覚めました。NHKオンデマンドにまた出ないかな..

www.nhk.or.jp

学ぶ中で私が引っかかった点から、以下の二つについて触れました。
・ITインフラ運用の自動化の文脈ではSafety-Iの固定的な世界が前提とされていないか
Kubernetesって自立的で柔軟でということになっているけどそうなのか。設定次第とか分散トレーシングの活用次第とか(暗黙の)条件があるのではないか

今回の発表では、自動化/Auto-remediationとか自立的という意味でクラスタリングソフトを引き合いに出して"クラスタリングソフトを導入すればレジリエントなのか"という仮説を検証してみる流れでお話してみました。私が長いこと引っかかっていた議論を独白->反省するという若干照れもある内容でした。初めて聞く方にはおまぬけっぽく感じられないか不安でしたが、どうでしたかね... ssmjpのSlackでは好意的なリアクションいただけていて心安まりました。

speakerdeck.com

(時間調整で直前にスライドを何枚か削りました。参考資料にあるkumagiさんの分散システムのスライドが本文中で参照されていませんが、スプリットブレインあたりの文脈で参照させていただきました。)

こういった話にお詳しい方にどういう場でお会いできるのかがイマイチ掴めていないのですが、ご教示くださる方や一緒に学んでくださる方がいらしたらぜひ知りたいです。もしくはご興味持ってくださる方が現れるきっかけとなればとても嬉しいです。さらにはこういった視点での運用改善のおしごとの場があればぜひお声がけいただきたいです。

発表直後なので達成感というかちょっとテンションが高くなっています。同じ流れの話題でssmjpさんとか吉祥寺pmさんとかの懐の広い場での発表をまた申し込んじゃおうかなー

Speakerdeckではリンクがクリックできないので、参考資料へのリンクを以下に並べておきます。

書籍)
www.amazon.co.jp

www.amazon.co.jp

www.amazon.co.jp

www.amazon.co.jp

Web)

www.slideshare.net

www.slideshare.net

cfgmgmtcamp2020の資料リンク集(随時追加)

さっそくですがcfgmgmtcampの発表資料をまとめていきます。
12トラックもあるのでまだかなり抜けもありますが。
公式サイト: https://cfgmgmtcamp.eu/ghent2020/


20200203

09:40-

untitled config game
speakerdeck.com

11:40-12:30

Cloud Native Configuration Management
speakerdeck.com

12:45-12:50(LT)

YAML Magic

www.slideshare.net

12:50-12:55(LT)

Devops is dead, Servers are dying, and I don't feel so great myself.
(201808)
noti.st

12:55–13:00(LT)

Rethinking Open Source in the Age of Cloud
(201911)

www.slideshare.net

14:25–

To Foreman 2.0 and beyond: an architecture perspective
https://cfp.cfgmgmtcamp.be/media/foreman-architecture-to-2.0-and-beyond.pdf

14:50-

YANG and NETCONF
https://blog.lieter.nl/presentations/cfgmgmtcamp-YANG-NETCONF.pdf

Terraform Without The Mess
jen20.dev

Ansible Collaboration within your Organization
https://cfp.cfgmgmtcamp.be/media/PulpAnsible_ConfigMgmtCamp2020.pdf

Achieving fully hands-off deployment of an Icinga 2 cluster using Puppet
https://landervdb.github.io/cfgmgmtcamp2020/

16:50-

Config management for_kubernetes: GitOps + Helm

www.slideshare.net

Rollout all your Prometheus exporters with Puppet!
github.com

20200204

09:30-

I got 99 problems and a bash DSL ain't one of them
( http://scribes.tweetscriber.com/tdpauw/707 )

10:20–

How Convenience Is Killing Open Standards

www.slideshare.net

12:20-

Web Application Firewall - Friend of your DevOps pipeline?
(201805)

www.slideshare.net

12:30–12:35(LT)

Bare Metal Provisioning with Ansible and Cobbler
https://ffrank.github.io/presentations/2020-02-ansible-bare-metal/ansible-bare-metal.pdf

12:45–12:50(LT)

Terraform, Pulumi... but what do we really need!?
(202001)
www.dropbox.com

12:45-

seccomp — Your Next Layer of Defense
xeraa.net

14:00-

Lessons learned from testing over 200,000 lines of Infrastructure Code
cloud.mail.ru

A RUDDER walkthrough: manage your configurations through compliance
speakerdeck.com

16:00-

Running Puppet from mgmt on overdrive
ffrank.github.io

Ansible with ARA on RHEL7/CentOS7, welcome to hell!
speakerdeck.com