[Ansible] YAMLの基本

AnsibleといえばYAMLなので、参考サイトからYAMLの基本を頭に入れる。

基本ルール

  • — から書き始める = 1 行目は — だけにする
  • … で書き終える = 最終行は … だけにする
  • # から行末までがコメントになる
  • インデントは半角空白 × 2 個で記述する(タブ文字は使用できない)
  • インデントでデータ構造のネストを表現する

データの基本的な表現

リスト

シーケンスとも呼ばれる。

マッピング

“キー:値”。ハッシュ、ディクショナリーとも呼ばれる。

複雑なデータの表現

マッピングの中にマッピングをネスト

シーケンスの中にマッピングをネスト

マッピングの中にシーケンスをネスト

複雑なネスト

参考サイト

YAML|Ansible の使い方
https://zenn.dev/y_mrok/books/ansible-no-tsukaikata/viewer/chapter3
↑Ansibleの基本理解に役立つ無料で読める本。著者に感謝。

[Ansible] -eオプションでansible_python_interpreterを指定する

EC2(Amazon Linux 2)にAnsibleをインストールしてアドホックコマンドを実行したら、Python絡みの警告が表示された。

Ansibleのバージョンを表示すると、Python 2.7.18が連携している模様。

公式サイトの Python 3 サポート ページを見ると以下の記述がある。

  • Ansible は Python バージョン 3.5 以降でのみ動作します。
  • Ansible は、多数のプラットフォームに同梱されている Python 3 を自動的に検出して使用します。

Amazonのリポジトリからインストールしたのだけど、Python 3の自動検知が上手くいかずにPython 2が使われているのかなあ。

-eオプションを使って明示的にPythonモジュールを指定したら警告は消えたけど、

根本的な原因究明は後回し。

参考サイト

Python 3 サポート — Ansible Documentation
https://docs.ansible.com/ansible/2.9_ja/reference_appendices/python_3_support.html

ansible — Ansible Documentation
https://docs.ansible.com/ansible/2.9_ja/cli/ansible.html#ansible

[Ansible] Amazon Linux 2にAnsibleをインストールする

環境確認。

amazon-linux-extraがインストールされていることを確認。

amazon-linux-extraでansibleが使用可能であることを確認。

Ansibleを有効にする。

Ansibleをインストールする。

これで完了。

参考サイト

Amazon Linux2にAnisbleをインストールする方法 – Qiita
https://qiita.com/1_ta/items/92dcfa6fa2a33cb11442

[Ansible] -oオプションで出力を1行にまとめる

-oオプションを指定すると、出力を1行にまとめることができる。

とりわけ複数マシンをターゲットに操作する場合には重宝する。

見やすい。

[Ansible] ざっくり入門

Ansibleを使う必要が出てきたので、参考書を読んでざっくり入門する。

Ansibleの概要

  • オープンソースの自動化のためのソフトウェア
  • 2012年に初版リリース
  • 2015年にAnsible Inc.がRed Hat Inc.に買収された
  • コミュニティ版とエンタープライズ版がある

Ansibleの特徴

  • 指示をプレイブックと呼ばれるテキストファイルに記述
  • 様々な対象をコントロール可能
  • エージェントが不要

Ansibleのインストール

環境はWSL上のCentOS 7。

Ansibleを構成するもの

  • プレイブック: 指示を記述したファイル
  • インベントリ: プレイブックを実行する対象
  • クレデンシャル: 実行対象へログインするための認証情報
  • 変数: プレイブック内で変数化された項目に値を与える
  • モジュール: 作業を部品化したもの

アドホックコマンドを試す

モジュールを単体で呼び出して使用するコマンドをアドホック(AdHoc)コマンドと呼ぶ。

インベントリを定義する

webグループのマシンに対して実行する場合

appグループのマシンに対して実行する場合

dbグループのマシンに対して実行する場合

クレデンシャルを指定する

ターゲットマシンにSSH接続する場合

参考書

Software Design – Dec. 2018
第1特集 [超速]入門 Ansible

[ハード] NVIDIA GeForce RTX 3050(8GB) と RTX 2060(12GB) を比較する

深層学習を使った画像認識アプリを開発しているのだけど、顧客向けにデモシステムを作ることになった。処理速度を短縮するために高性能のGPUが必要だ。というわけでGPUの物色を始めたのだけど、昨今のGPU価格高騰の煽りを受けて調達は非常に難しくなっている。アメリカ中を探し回れば高くても入手できないことはなさそうだけど、聞いたことが無いオンラインショップから買うのはちょっと怖いな。

ローカルにも店舗があるMicro Centerなら値段も品揃えも上々なので、購入予算を$500として、しばらくオンラインショップの在庫状況をウォッチしたところ、以下のGPUが候補となった。

  • NVIDIA GeForce RTX 3050 (8GB)
  • NVIDIA GeForce RTX 2060 (12GB)

スペック比較

メーカーサイトから情報を拾い読みして比較する。

ASUS Dual GeForce RTX 3050 8GB GDDR6
https://www.asus.com/Motherboards-Components/Graphics-Cards/Dual/DUAL-RTX3050-8G/

GeForce RTX™ 2060 VENTUS 12G OC
https://www.msi.com/Graphics-Card/GeForce-RTX-2060-VENTUS-12G-OC/Overview

RTX 3050 (8GB)

  • インターフェース: PCI Express 4.0
  • クロック: OCモード: 1807 MHz (Boost Clock), ゲーミングモード: 1777 MHz (Boost Clock)
  • CUDAコア数: 2560

RTX 2060 (12GB)

  • インターフェース: PCI Express 3.0
  • クロック: Boost 1680 MHz
  • CUDAコア数: 2176

数字を比べる限りは、3050のほうに分がある。

ベンチマーク比較

ベンチマーク結果を公開してくれているサイトから情報収集。

GPU(グラフィックボード)性能比較表【2022年最新版】 | PC自由帳
https://pcfreebook.com/article/459993300.html

3DMark Time Spy Graphcs

  • GeForce RTX 3050: 6278
  • GeForce RTX 2060 12GB: 7996

2060のほうが格段に数値が高い。2000シリーズより3000シリーズのほうが高性能だと思っていたので意外。ゲーム用途ではなくてCUDAのベンチーマーク結果を探したら以下のサイトがヒット。

CUDA Benchmarks – Geekbench Browser
https://browser.geekbench.com/cuda-benchmarks

  • NVIDIA GeForce RTX 3050: 73493
  • NVIDIA GeForce RTX 2060: 77964

こちらのサイトでも2060のほうが数値が高い。

結論

RTX 2060のほうが高性能(たぶん)と判断して、これを購入することに決める。

あと、いろいろ調べていて、後発でラインナップに追加されたRTX 2060の12GB版は、オリジナルのRTX 2060よりもCUDAコア数が多いことが分かった。オリジナルのCUDAコア数1920に対して12GB版は2176。

参考サイト

NVIDIA GeForce RTX 2060 12GB Has CUDA Core Count Rivaling RTX 2060 SUPER | TechPowerUp
https://www.techpowerup.com/289528/nvidia-geforce-rtx-2060-12gb-has-cuda-core-count-rivaling-rtx-2060-super

NVIDIA GeForce RTX 2060 12GB to feature 2176 CUDA cores, 184W TDP – VideoCardz.com
https://videocardz.com/newz/nvidia-geforce-rtx-2060-12gb-to-feature-2176-cuda-cores-184w-tdp

[Apache] Apacheの再起動の違い

Apacheの設定変更をした後、新しい設定を適用したいけど動いているサービスは止めたくない。そういう場合はどうすべきか。

Apacheの停止と再起動

以下、公式サイトの説明より。

急な停止

  • 即座に子プロセス全てをkillしようとする。
  • 子プロセスを完全にkillし終わったら親プロセス自身が終了する。
  • 処理中のリクエストはすべて停止され、もはやリクエストに対する応答はされない。

急な再起動

  • 子プロセスをkillするが、親プロセスは終了しない。
  • 設定ファイルを再読込して、ログファイルを全て開きなおす。
  • その後、新しい子プロセスを起動して応答を続ける。

緩やかな停止

  • 親プロセスは子プロセスに現在処理中のリクエストの後に終了するようにアドバイスする。
  • その後親プロセスはPidFileを削除し、ポートでのListenを全て停止する。
  • 親プロセスはどの子プロセスがリクエスト処理中かを監視し続ける。
  • 全ての子プロセスが終了するかGracefulShutdownTimeoutで設定した時間が過ぎると、親プロセスも終了する。

穏やかな再起動

  • 子プロセスに現在のリクエストの処理の後に終了するようにアドバイスする。
  • 親プロセスは設定ファイルを再読込して、ログファイルを開き直す。
  • 子プロセスが徐々になくなるに従って、 新しい世代の設定による子プロセスに置き換えていく。
  • そして、これらが新たなリクエストに即座に応答し始める

冒頭に書いたようなシチュエーションの場合、「穏やかな再起動」が適当だな。

参考サイト

Apache HTTP Server の停止と再起動 – Apache HTTP サーバ バージョン 2.4
https://httpd.apache.org/docs/2.4/ja/stopping.html

restartとreloadの違いを調べてみた – Qiita
https://qiita.com/miyuki_samitani/items/79ddc6bf645f51aab03d

[C#] 名前空間の指定 (C# 10)

名前空間の宣言はnamespaceキーワードを使って以下のように行う。

それが、C# 10以降では以下のように指定できるようになった。コードの可読性が上がったか。

参考ページ

名前空間で型を整理する | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/fundamentals/types/namespaces

[C#] 最上位レベルのステートメント (C# 9)

自分のC#の知識が古いバージョンで止まっているので、新しい仕様をキャッチアップしていく。

C# 9以前では、C#プログラムのエントリポイントを以下のように記述する必要があった。

C# 9以降では、以下のようにMainメソッドを省略し、Mainメソッド内にあるかのようにC#ステートメントを記述することができる。これを最上位のステートメントと呼ぶらしい。

以下、留意点。

最上位レベルのファイルは1つだけ

アプリケーションに含めるエントリポイントは1つだけなので、プロジェクト内には最上位のステートメントを含むファイルは1つだけにすること。複数存在するとコンパイルエラーになる。

エントリポイントは他に用意しない

最上位レベルのステートメントとMainメソッドを混在させないこと。混在させるとコンパイルエラーになる。

usingディレクティブ

以下のようにファイルの先頭に指定する。

グローバル名前空間

最上位レベルのステートメントは暗黙的にグローバル名前空間に属する。

コマンドライン引数 (args)

コマンドライン引数が入力された場合、args 変数を参照してそれにアクセスできる。

await

await を使用して非同期メソッドを呼び出すことができる。

プロセスの終了コード

アプリケーションの終了時に int 値を返すには、int を返す Main メソッドの場合と同じように、return ステートメントを使用する。

参考ページ

最上位レベルのステートメント – Main メソッドを使用しないプログラム | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/fundamentals/program-structure/top-level-statements

[Docker] チュートリアルのインストール

Dockerデスクトップを初回起動したときにはチュートリアルへ案内されるので、[Start]ボタンを押してチュートリアルをインストールする。

OPEN IN BROWSER アイコンをクリックすると、ブラウザが開いてチュートリアルのページが表示される。
http://localhost/tutorial/

チュートリアルをなぞって知識を入れていこう。