底辺

ゑ?

英語なら無料で読める技術書が多い件

今更な話だけど、タイトルの通り。

英語版であれば実は無料で公開されているものがわりとある。

技術書に限らずとも、英語なら学習教材は山ほどネットに無料で転がっている。

例えば↓のようなのとか。

github.comgithub.com

やはり英語が出来るエンジニアとそうでないエンジニアの情報格差が凄いな。。

OSSプロジェクトも基本的に英語で行われているし。

英語は出来た方が良い。(当たり前)

技術書については日本語訳が酷いものも少なくないし、技術書の英語はさほど難しくないものが多く意外とスラスラ読めるので、自分も英語の勉強を兼ねて読んだりしてる

2023年は秋から改めて英語の勉強を始められたので、2024年はより一層英語頑張る所存。

1から始めるJuliaプログラミング 2023/12読了

 

 

Pythonのように書けてC言語のように速い」が売りの言語である、Juliaの解説本。

(主に保守のため)仕事で読み書きする必要が出たがJuliaは他の言語で見られないような記法がそこそこあるため、軽く一読した。

大学の教科書のような雰囲気の本だが、そこまで重くなく読める。

素早くJuliaの文法や機能を見通したいという目的は達せられたように思う。

ただシンボルについてはもう少し詳細な説明とよく使われる具体例とかが欲しかった。

 

とりあえず、軽く一読して自分の既知の言語との違いをさらい、あとは必要に応じて公式doc等を参照する感じでJuliaとは付き合えるようになった。

ガッツリJuliaらしい書き方でコードをがしがし書いていくレベルまでには至っていないけど、まぁ今のところJuliaはそこそこで良いかなーと。。

読書メモをなるべく書いたほうが良い

最近色々な技術書を読むが、読みたいものが多い分少し急ぎ気味になってしまい、ひとつひとつの理解が浅くなっている気がしていた。

しかし、最近は読書メモを書くようにするとやはり記憶に残りやすいことがわかった。

自分のやり方では、読書メモの書き方は主に重要だと思った箇所等を簡単にまとめるのみ。

この作業を行うことで理解が深まり記憶に残りやすいし、思い返したい時はそのメモを見ればその本の要点は思い出せる。必要に応じて、また実際の本の方に立ち戻れば良い。

この作業は読みながらでも良いと思うが、自分の場合はまず本を全部読んでから、振り返りながら読書メモを書いていくスタイルで行うことが多い。

なるべくこれからもやりたいと思う

Linuxのしくみ(著・武内覚) 2023/12/31読了

 

 

なかなか読みきれなかったこの本だったけど、冬休みに入って時間ができたこともありなんとか読み切った。

Linuxのしくみについてちゃんと学んでみたいという思いがあり買った本で、もう少しカジュアルなものをイメージしていたけど蓋を開けてみると思ったよりは読み切るのが大変だった。

しかしめちゃくちゃ勉強になった。この本を読むことで自分の中でLinuxの解像度はかなり上がったように思う。

著者の武内氏いわくこれでもまだまだ触りの部分のようなのでやはりLinuxオペレーティングシステムの世界は深淵だなぁと思った。。

(やはり大学の時にもっと真面目であれば、、)

しかし、これも武内氏いわく、逆にこれだけソフトウェアの抽象化が進んだ昨今では(この本の内容を身につけたとすると)ここまでカーネルやハードウェアの知識を身につけている人も珍しいだろうとのこと。

どれだけ抽象化が進もうともやはりコンピュータサイエンスの理解は大事

 

 

世界一流エンジニアの思考法(著:牛尾剛) 読了 2023/12/17

 

 

界隈でも話題のMicrosoft 牛尾さんの本。

買おうかなーどうしようかなーと思いつつ本屋で少し立ち読みしたら面白かったので買って読んでみた(読みやすく2日くらいでサクッと読めた)。

Microsoftのイケてる技術者たちの考え方や仕事の仕方を見てみたくて買ったけど、牛尾さんと同僚たちの色々なエピソードが載っており単純に読み物としても面白かった。

具体的なTipsも色々と参考になるものがあり、これを機に普段の自分の働き方も見直してみたいと思う。

ただ自分としては、最後の章の日本特有の批判文化についての牛尾さんの考察のところが一番刺さったかもしれない。具体的なエピソードとして、善意から始まったコロナ下での接触確認アプリCocoaが、リリース後にSNSでボロクソに言われまくったという話が挙がっており、そんなことがあったとは知らなかった…。確かに、自分も今はエンジニアリングの話題もたくさんTwitterでフォローしているから感じるけど、界隈では基本常に何かの批判の話題ばかりのように思える。。アメリカ流の、相手を否定しない、コントリビュートと感謝のループの文化が作れるよう一人一人が意識をしていかなければならないと強く思った。もちろんアメリカにも色々な企業があるし一括りには出来ないと思うけど、そういった文化がある向こうでは皆が楽しく感謝しあいながら働いておりそれが高い生産性に繋がっているのだなぁ、と本全体を読んで感じた。

 

メモ

  • 障害の対処について
    • いきなり手を動かしとにかく試行錯誤して時間を浪費するより、事実(ログ、データ)を確認し仮説を立てる→その仮説を証明するための行動を取る。これは当たり前と言えば当たり前だけど、つい手を動かして「よくわからんがとりあえず怪しいかもしれないところを変えて動かして結果を見る」を繰り返して時間を浪費、とかやりがち。実際仕事でも、解決後に「ちゃんとログを丁寧に読んで考えてればもっと早くわかったかもなー…」ということがあったりした。次にこのような場面に出会ったらまず一度落ち着いて事実を確認することを意識してみたい。
      • 思いつきで色々試しても時間がかかるうえ新しいことを何も学んでいない。
  • どんなに頭が良い人でも何かをちゃんと理解するのには時間がかかる。
    • 結果を出すことを焦るあまり、しっかり理解するのを焦ってはいけないという話。
  • 小さなドキュメントをコードの前に書く
    • これは普段自分もやっているかも

 

  • BeLazy:より少ない時間で価値を最大化する
    • いかにやることを減らすか?
      • 1番重要な1つだけピックアップする
      • 仕事を固定して出来ることを最大化する
        • あれもこれもは、無理
      • 「準備」「持ち帰り」をやめてなるべくその場で解決する
  • 失敗を受け入れる
    • フィードバックを歓迎するムードを作る
    • 「検討」をやめて「検証」する
    • 早く失敗する(Fail Fast)
  • 不確実性を受け入れる
    • ソフトウェア開発は計画通りいかないものであり計画通りいかないことは失敗ではない。スピーディに軌道修正出来る柔軟性のほうが遥かに大切
    • 進捗の実績だけで状況判断し納期を固定したままスコープを出し入れする
    • 計画は「今のところは、こういう予定」くらいの感覚で見た方が良い
    • 絶対にデッドラインを割りたくない案件だったらシンプルに早く始めるしかない

 

  • コードリーディングのコツは極力コードを読まないこと
    • 実装の隅々まで見るより、インターフェースを追う
  • 生産性とはいかに「ググらずに実装できる」を増やすか
    • ここにも「結果を出すことを焦らない」考え方が通ずる
  • マルチタスクは生産性が最低なのでやらない
    • 「WIP=1」を保つ
  • 自分がやったからと言って理解できているとは限らない
    • 説明可能か?の意識が大事
      • 「説明可能」に持っていくための有効な手段:新しいことを学んだらブログに書く。サンプルコードはそのまま使うのではなく、自分なりに変えたものを作る
  • 「作業内容を人にそらで説明できるか」を記憶できたかのチェックポイントにする
    • コーネルメソッド
  • 頭の中のみで整理する:記憶力向上のFA
    • 人の話を聞くときは、他の人に説明することを想定して、頭の中で整理しながら聞く

 

  • 情報量を減らす
    • たくさん情報があっても消化できないだろう?の感覚(脳への負荷が軽い)
    • 最初から全部説明しない。たくさん書いてあったりしても読むのが大変。付加的な情報は聞かれた時でOK
  • 相手が求めている情報への感度を研ぎ澄ます
    • 日頃から人に伝えることを前提とした整理をしておく
  • コードを「読み物」として扱う
    • 「読んだ人がどう感じるか?」を意識してコードを書く
  • クイックコール(予定されていない通話)の活用
    • 自分にその分野のコンテキストがなければまずエキスパートに聞いた方が良い→かなりショートカットできる
    • 相手が忙しいかは考える必要は無い、メッセージがスルーされたらたぶん忙しい
    • クイックコールがすぐに無理なら、ミーティングの設定を依頼する
    • 一つ配慮すべきポイントは、「相手が労力を要せず回答できるものか」
  • 気軽に聞ける空気の大切さ
    • 「そんなん聞くの?」ってことでも聞いて良い。Microsoftでは優秀な人もそういう質問をしている
    • 皆が気軽に聞くことを実践すると組織全体の効率は上がる
    • 気軽に聞ける仕組みは気軽に断れる空気とセット
      • 自分では助けになれないものは気軽に他の人に聞くことを促したりできる
  • ディスカッションは自分の考えを自分なりに深めるための行為であり初心者こそやった方が良い
    • 間違えたら恥ずかしいという感覚は一切捨てること
  • 「相手を否定しない」「相手のアイデアを否定しない」「自分の考えとして意見を言う」
    • 「In my opinion」:あくまで自分の意見であるという配慮

 

  • チームの上下関係を無くす
    • スキルや経験に関係なく、全員が同じ責任を持っているフラットな仲間としてふるまう
  • 失敗に寛容な雰囲気がチャレンジ精神を生む

 

  • 生産性を上げたければ定時上がりが効率が良い

 

  • 日本にとって致命的な足枷になりかねない独特の批判文化をやめる
    • アプリケーションはどんなに優秀なチームが開発しようが、必ず何かしらの不具合は存在する
    • 批判の文化が開発者の心を砕く
    • 良いところが9あっても、問題が1であっても、1をクローズアップし批判される
    • アメリカの文化:コントリビュートと感謝のループ

 

 

Ansibleでdocker, docker-composeをOracleLinuxにインストールする

 

概要

  • サーバにdocker, docker-composeを入れる必要がある場合に、Ansible化してプロビジョニングするための検証例を記載
  • 検証手順のまとめなのでAnsibleコード自体は載ってない(別記事で書くかもしれない)

手順

1. 入れたいサーバのOSを特定する

Ansible化するにあたり、どんな手順でインストール出来るかを知る必要があるため、OSを特定する必要がある。
対象サーバに入りOSを確認する。
$ cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="7.6"
ID="ol"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.6"
PRETTY_NAME="Oracle Linux Server 7.6"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:7:6:server"
 
ORACLE_BUGZILLA_PRODUCT="Oracle Linux 7"
ORACLE_BUGZILLA_PRODUCT_VERSION=7.6
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=7.6
 
 

2. 検証環境を用意する

Virtualboxなどで検証環境を用意する。
IntelMacであればローカルでVirtualboxを使えるのでそれで良いが、AppleSiliconのMacでは使えないためEC2で代用する。
2.1 EC2を用意する
EC2インスタンスを起動する。今回はUbuntuのAMIから起動した。
注意点としてまず、EC2上でVirtualboxを使うには、ベアメタル系のインスタンスタイプを選ぶ必要がある。
本日より、5 つの新しい Amazon EC2 ベアメタルインスタンスが利用可能になります。Amazon EC2 ベアメタルインスタンスでは、アプリケーションは基盤となるサーバーの Intel® Xeon® スケーラブルプロセッサとメモリリソースに直接アクセスできます。これらのインスタンスは、ライセンス付与やサポート要件のため、あるいは自前のハイパーバイザーを使用したいと考えているお客様のために非仮想環境で実行する必要のあるアプリケーション、Intel® VT-x などのハードウェアの機能セットへのアクセスが必要なワークロードに最適です。
 
今回はこの中でもなるべく安価なm5.metal(USD 5.952/h)を利用した。
また、容量がデフォルトの8GBのままにすると、VMを入れていっぱいになってしまうので、EBSボリュームは無料枠MAXの30GBにする。
 
2.2 EC2(Ubuntu)内で、プロビ対象サーバのOSのVM環境を用意
今回の例では、Oracle Linux 7のVMを用意する。
 
VirtualboxVagrantをインストールする
$ sudo apt -y update
...
$ sudo apt install -y virtualbox
...
$ vboxmanage --version
6.1.38_Ubuntur153438
 
$ sudo apt install -y vagrant
...
$ vagrant --version
Vagrant 2.2.19
 
VagrantからVMを起動するためVagrantfileを用意する
user@ip-172-31-4-208:~$ mkdir ol7
user@ip-172-31-4-208:~$ cd ol7
user@ip-172-31-4-208:~/ol7$ vim Vagrantfile
 
(以下のような中身にする)
 
Vagrant.configure("2") do |config|
config.vm.box = "generic/oracle7"
config.vm.hostname = "ol7"
config.vm.network "private_network", ip: "192.168.56.115"
config.vm.provider "virtualbox" do |v|
v.name = "ol7"
end
if Vagrant.has_plugin?("vagrant-vbguest")
config.vbguest.auto_update = false
end
config.vm.provision "shell" do |s|
ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
s.inline = <<-SHELL
adduser ansible -m -s /bin/bash
mkdir /home/ansible/.ssh
chmod 700 /home/ansible/.ssh
echo #{ssh_pub_key} >> /home/ansible/.ssh/authorized_keys
chown -R ansible.ansible /home/ansible/.ssh
echo "%ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible
chmod 440 /etc/sudoers.d/ansible
SHELL
end
end
 
ホスト名を登録しておく
$ vim /etc/hosts
 
(例えば以下のように追記)
 
192.168.56.115 ol7
 
VMに入るためにSSHキー作成しておく
// 途中聞いてくるやつは全部そのままEnterで
user@ip-172-31-30-86:~$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
 
...
 
user@ip-172-31-4-208:~/ol7$ ll ~/.ssh
total 20
drwx------ 2 user user 4096 Nov 22 08:35 ./
drwxr-x--- 5 user user 4096 Nov 22 08:34 ../
-rw------- 1 user user 783 Jan 18 2023 authorized_keys
-rw------- 1 user user 3389 Nov 22 08:35 id_rsa
-rw-r--r-- 1 user user 747 Nov 22 08:35 id_rsa.pub
 
 
VM起動
user@ip-172-31-30-86:~/ol7$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'generic/oracle7' version '4.3.6' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection reset. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 5.2.44
default: VirtualBox Version: 6.1
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Running provisioner: shell...
default: Running: inline script
 
user@ip-172-31-30-86:~/ol7$ vagrant status
Current machine states:
 
default running (virtualbox)
 
The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
 

3. VM上でインストール手順を試し実際に入れられることを確認する

VMに入って、以下VMでインストールのお試し作業
user@ip-172-31-4-208:~/ol7$ ssh ansible@ol7
The authenticity of host 'ol7 (192.168.56.115)' can't be established.
ED25519 key fingerprint is SHA256:
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ol7' (ED25519) to the list of known hosts.
[ansible@ol7 ~]$
 
3.1 dockerインストール
Oracle公式の手順ページでは以下のようにol7_UEKR5をenableにするとある
sudo yum-config-manager --disable ol7_UEKR3 ol7_UEKR4
sudo yum-config-manager --enable ol7_UEKR5
 
対象サーバでyum repolistを確認
$ yum repolist
読み込んだプラグイン:langpacks, ulninfo
リポジトリー ID リポジトリー名 状態
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,786
ius/x86_64 IUS for Enterprise Linux 7 - x86_64 159
nodesource/x86_64 Node.js Packages for Enterprise Linux 7 - x86_64 64
ol7_UEKR4/x86_64 Latest Unbreakable Enterprise Kernel Release 4 for Oracle Linux 7Server (x86_64) 63+440
ol7_latest/x86_64 Oracle Linux 7Server Latest (x86_64) 20,679+5,722
ol7_optional_latest/x86_64 Oracle Linux 7Server Optional Latest (x86_64) 15,040+3,176
ol7_u6_base/x86_64 Oracle Linux 7Server Update 6 installation media copy (x86_64) 5,170+2,174
public_ol7_UEKR4_archive/x86_64 Archived Unbreakable Enterprise Kernel Release 4 for Oracle Linux 7Server (x86_64) 67+1,192
repolist: 55,423
UEKR4になっている。
一方で、VMの方を確認
[ansible@ol7 ~]$ yum repolist
Loaded plugins: ulninfo
ol7_UEKR6 | 3.0 kB 00:00:00
ol7_latest | 3.6 kB 00:00:00
(1/5): ol7_latest/x86_64/group_gz | 136 kB 00:00:00
(2/5): ol7_UEKR6/x86_64/updateinfo | 1.0 MB 00:00:00
(3/5): ol7_latest/x86_64/updateinfo | 3.6 MB 00:00:00
(4/5): ol7_latest/x86_64/primary_db | 48 MB 00:00:00
(5/5): ol7_UEKR6/x86_64/primary_db | 66 MB 00:00:01
repo id repo name status
!ol7_UEKR6/x86_64 Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linux 7Server (x86_64) 1082
!ol7_latest/x86_64 Oracle Linux 7Server Latest (x86_64) 26325
repolist: 27407
VMではUEKR6になっているので、対象サーバと同じ状況にするためUEKR6をdisable、UEKR4をenableにしておく
[ansible@ol7 ~]$ sudo yum-config-manager --disable ol7_UEKR6
...
[ansible@ol7 ~]$ sudo yum-config-manager --enable ol7_UEKR4
...
 
手順によるとol7_addonsをenableにするとあるので実行
$ sudo yum-config-manager --enable ol7_addons
...
 
その後インストールコマンドを実行し、サービススタート & マシン起動時にもスタートするようにしておく
[ansible@ol7 ~]$ sudo yum install docker-engine docker-cli
...
 
[ansible@ol7 ~]$ sudo systemctl enable --now docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[ansible@ol7 ~]$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2023-11-22 08:52:23 UTC; 3s ago
Main PID: 9296 (dockerd)
Tasks: 8
Memory: 27.2M
CGroup: /system.slice/docker.service
└─9296 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
 
...
 
3.2 ユーザをグループに追加
rootユーザ以外でもdockerを使えるようにユーザをグループに追加する
[ansible@ol7 ~]$ sudo groupadd docker
groupadd: group 'docker' already exists
[ansible@ol7 ~]$ sudo usermod -aG docker $USER
 
// 新しいセッションにしないと反映されないのでそうする
[ansible@ol7 ~]$ logout
Connection to ol7 closed.
user@ip-172-31-4-208:~/ol7$ ssh ansible@ol7
Last login: Wed Nov 22 08:49:41 2023 from ip-192-168-56-1.ap-northeast-1.compute.internal
[ansible@ol7 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 
3.3 docker-composeインストール
 
インストールするバージョンはリリースページから選んでおきOSやCPUアーキに合わせたURLにする
[ansible@ol7 ~]$ sudo -i
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 56.8M 100 56.8M 0 0 59.6M 0 --:--:-- --:--:-- --:--:-- 165M
 
[root@ol7 ~]# chmod +x /usr/local/bin/docker-compose
[root@ol7 ~]# logout
[ansible@ol7 ~]$ docker-compose --version
Docker Compose version v2.23.1
 

4. 手順をAnsible化する

4.1 AnsibleをEC2にインストール
実際のansible実行サーバで使っているバージョン確認。
$ ansible --version
ansible 2.8.2
config file = None
configured module search path = ['/home/jen/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/jen/.pyenv/versions/3.8.5/lib/python3.8/site-packages/ansible
executable location = /home/jen/.pyenv/versions/3.8.5/bin/ansible
python version = 3.8.5 (default, Aug 19 2021, 11:23:03) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
 
EC2上でpipを入れてAnsibleインストール
$ sudo apt install python3-pip
$ sudo pip3 install --user ansible\==2.8.2
 
4.2 手動で検証したインストール手順を元にAnsibleコード作成する
 
Ansibleコードについては別記事で書くかも。
Ansibleの公式ドキュメントを見てモジュールの使い方を調べながら行う
 

5. EC2からVMに向けて、実際にAnsibleでdocker, docker-composeをインストール出来るか試す

手動でインストール出来るか試したVMとは別にまっさらのOracleLinuxのVMを改めて用意し、それに対して実行する。
以下のようにVMにプロビする用のインベントリファイル(hosts.dev)を用意. (ol7はVMのhostname)
[server01]
ol7 ansible_user=ansible
 
プロビ先でroot以外で実行できることを確認するためにansibleユーザをグループに入れるようにしておく
docker_users:
- ansible
 
playbook実行
// とりあえずdry run(-C)
user@ip-172-31-5-222:~/ol7/ansible$ ansible-playbook -i hosts.dev -C worker.yml
 
...
 
// 実際にVMに向けてプロビしてみる
user@ip-172-31-5-222:~/ol7/ansible$ ansible-playbook -i hosts.dev -t docker worker.yml
[DEPRECATION WARNING]: "include" is deprecated, use include_tasks/import_tasks instead. See https://docs.ansible.com/ansible-
core/2.15/user_guide/playbooks_reuse_includes.html for details. This feature will be removed in version 2.16. Deprecation
warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
 
PLAY [all] ***********************************************************************************************************************
 
TASK [Gathering Facts] ***********************************************************************************************************
[WARNING]: Platform linux on host ol7 is using the discovered Python interpreter at /usr/libexec/platform-python, but future
installation of another Python interpreter could change the meaning of that path. See https://docs.ansible.com/ansible-
core/2.15/reference_appendices/interpreter_discovery.html for more information.
ok: [ol7]
[WARNING]: Could not match supplied host pattern, ignoring: worker_for_lgbm
 
PLAY [server01] ********************************************************************************************************************
 
TASK [Gathering Facts] ***********************************************************************************************************
ok: [ol7]
 
TASK [self/docker : install docker engine] ***************************************************************************************
changed: [ol7]
 
TASK [self/docker : Start Services] **********************************************************************************************
changed: [ol7]
 
TASK [self/docker : add users to docker group] ***********************************************************************************
changed: [ol7] => (item=user)
 
TASK [self/docker : setup docker-compose] ****************************************************************************************
changed: [ol7]
 
PLAY RECAP ***********************************************************************************************************************
ol7 : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
 
VMに入ってdocker, docker-composeが入れられていることを確認
user@ip-172-31-5-222:~/ol7$ ssh ansible@ol7
Last login: Fri Nov 24 02:59:37 2023 from ip-192-168-56-1.ap-northeast-1.compute.internal
[ansible@ol7 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[ansible@ol7 ~]$ docker-compose --version
Docker Compose version v2.23.1
 

6. 実際の対象サーバにプロビする

 
とりあえずdryrunで問題なさそうなことを確認し、その後dryrun無しで実行。
ジョブが問題なく成功し対象サーバ上で実際にdockerが使えることを確認して完了
$ docker --version
Docker version 19.03.11-ol, build 9bb540d
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ ps aux | grep docker
root 98796 0.0 0.0 1805992 70504 ? Ssl 14:59 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
user 111588 0.0 0.0 112740 2296 pts/3 S+ 15:03 0:00 grep --color=auto docker
 
$ docker-compose --version
Docker Compose version v2.23.1
 

(おまけ)

Ansibleの内容は問題なさそうなのに実際のプロビが失敗する場合

間違えてCentOS用に入れたdockerのyumレポジトリがプロビ対象サーバに残っており、そちらを参照してしまうことがあった(Docker CE Stable - x86_64 )
$ yum repolist
読み込んだプラグイン:langpacks, ulninfo
リポジトリー ID リポジトリー名 状態
docker-ce-stable/7Server/x86_64 Docker CE Stable - x86_64 268
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,786
ius/x86_64 IUS for Enterprise Linux 7 - x86_64 159
nodesource/x86_64 Node.js Packages for Enterprise Linux 7 - x86_64 64
ol7_UEKR4/x86_64 Latest Unbreakable Enterprise Kernel Release 4 for Oracle Linux 7Server (x86_64) 63+440
ol7_latest/x86_64 Oracle Linux 7Server Latest (x86_64) 20,679+5,722
ol7_optional_latest/x86_64 Oracle Linux 7Server Optional Latest (x86_64) 15,040+3,176
ol7_u6_base/x86_64 Oracle Linux 7Server Update 6 installation media copy (x86_64) 5,170+2,174
public_ol7_UEKR4_archive/x86_64 Archived Unbreakable Enterprise Kernel Release 4 for Oracle Linux 7Server (x86_64) 67+1,192
repolist: 55,691
 
そのため、キャッシュとrepoファイルを削除する
[usr@server01 /var/cache/yum/x86_64/7Server]$ sudo rm -rf docker-ce-stable/
[usr@server01 /etc/yum.repos.d]$ sudo rm docker-ce.repo
 
その後再度プロビ実行で、上手く行った。
 

VMからインターネットに接続できていなさそうな場合

yum updateなどでHTTPエラー出る場合、インターネットに接続できていない可能性がある
[Errno 14] HTTP Error 404 - Not Found

VM上でping google.com など適当にpingを打つと疎通しない場合

→EC2の方でそもそも疎通しているか確認。していない場合はDNS設定を追加
// 8.8.8.8 = Google public DNS
$ vim /etc/resolv.conf
nameserver 8.8.8.8