かべぎわブログ

ブログです

20220517

仕事

いろいろ兼務になるとどちらのチームからも部外者感をだされたりだされなかったりするので大変

私生活

おさかながいっぱいとどく。さばく。しんどい。

コンテンツ

ウィッチャーの小説版の3巻を呼んでいる。
いま半分くらい。
地名と人名とがいっぱい出てきてしんどい。

お勉強

引き続きPHP
{$var}とか$blog->nameとかの書き方がいまだにきもちわるい。

食べたもの

  • イカの一夜干し
  • ドライカレー
  • ヒラマサの刺し身
  • ホタルイカのチャーハン
  • リアルゴールドX
  • リアルゴールドY
  • タイの兜焼き

クラスプロパティとクラスメソッド

クラスプロパティ

インスタンスがもつデータ(プロパティ)ではなく、クラスが持つデータのこと。

static をつかって定義する。

アクセスする場合は クラス名::$クラスプロパティ名をつかう。

<?php
class Blog {
  public static $name = 'kabegiwablog';  //これがクラスプロパティ
}

echo Blog::$name;  //アクセス

クラスメソッド

クラスから直接呼び出すことができるメソッドのこと。

ここのインスタンスのデータに関係ない処理を行いたい場合に利用する。

static をつかって定義し、 クラス名::クラスメソッド名 のように呼び出す。

<?php
class Blog {
  private static $name = 'kabegiwablog';
  
  // 以下がクラスメソッド
  public static function getName() {
    return self::$name;  
  }
}

echo Blog::getName();  // 呼び出し

20220516

仕事

いろいろと引き継ぎ。

私生活

意識の高い人のYoutubeのVlogみたいなのを見てちょっとだけ頑張ろうと思ったけれど夜中にはお酒を飲んで腹を出して寝る。

コンテンツ

気狂いピエロ
おしゃれ映画

お勉強

PHP
HTML知識が中学時代でとまっているのでアップデートしなければならない。

食べたもの

  • チカとホタルイカのパスタ
  • カレーうどん
  • ミルキーウェイ3つくらい
  • レッドブルルビーエディション
  • スズキのムニエル
  • ホッピー

クラスとインスタンスとプロパティとメソッドとコンストラクタ

クラス

オブジェクトの設計図

クラス名は大文字で

<?php
class Blog {
  // クラスの内容
}
?>

インスタンス

クラスをもとに生成された実体をインスタンスとよぶ。インスタンスとオブジェクトは同じ意味で使われる。
new クラス名で生成する。

<?php
class Blog {
}
$blog1 = new Blog();
$blog2 = new Blog();

プロパティ

インスタンスがもつデータ
public $nameのところがプロパティ

<?php
class Blog {
  public $name;
}
$kabegiwaBlog = new Blog();
$kabegiwaBlog->name = 'かべぎわブログ'; //プロパティに値をセット
echo $kabegiwaBlog->name;
?>

メソッド

それぞれのインスタンスが持つ関数のこと
public function メソッド名() みたいなかんじで定義する。

<?php
class Blog {
  public function hello() {
    echo 'かべぎわブログです';
  }
}
$kabegiwaBlog = new Blog();
$kabegiwaBlog->hello();
?>

コンストラクタ

newを用いてインスタンスを生成するときに自動的に呼ばれるメソッド。
インスタンス生成時に呼ばれるメソッドのこと。
__constructで定義できる。

<?php
class Blog {
  public $name;
  public function __construct($name) {
    $this->name = $name;
    echo "{$this->name}です";
  }
}
$kabegiwaBlog = new Blog('かべぎわブログ');
?>

20220515

仕事

おやすみ。

私生活

冷蔵庫の中身をがんばって消費する。
お魚の残りを適当にオリーブオイルに突っ込む。
牛すじを煮込む。

コンテンツ

失われた週末
お酒怖いですねみたいな映画。よい。

お勉強

怠惰。

食べたもの

  • さばふぐの干物
  • ミニカレー
  • フォカッチャ
  • チカとホタルイカのアヒージョ
  • 白ワイン
  • 赤ワイン
  • ステーキ

20220514

仕事

おやすみ

私生活

消防博物館に行く。
よかった。

コンテンツ

孤独のグルメシーズン8(Netflixにて)

お勉強

PHP

おしごとでつかいそう

食べたもの

  • アジの干物と卵焼き
  • ミラノ風ドリア
  • 牛ヒレカレー
  • ササミ梅フライ
  • ホッピー
  • 焼酎水割り

20220513

仕事

いろいろと。

私生活

雨。除湿機が活躍するシーズンになってくる。

干物作成にハマっているのでアウェーです。

コンテンツ

地獄の黙示録ファイナルカット

ながい。

でも特別完全版よりはみじかい。

お勉強

Cognitoユーザプールつくったり。

食べたもの

  • アジの干物
  • 焼き牡蠣
  • 生牡蠣
  • イカ一夜干し
  • 白ワイン
  • アジとトマトのパスタ
  • アイスクリーム
  • コーラ
  • アメリカのあんまりおいしくないスナック菓子

Ansible skipの場合 registerに格納しないようにする

まず事象として

タスクがskipされたときでもregisterにはその旨が格納されてしまう。

- hosts: localhost
  tasks:
    - debug:
        msg: "TRUE"
      register: true_register
      when: true
    - debug:
        var: true_register

    - debug:
        msg: "FALSE"
      register: false_register
      when: false
    - debug:
        var: false_register
$ docker compose run ansible ansible-playbook playbook.yaml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [localhost] *************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************
ok: [localhost]

TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "TRUE"
}

TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "true_register": {
        "changed": false,
        "failed": false,
        "msg": "TRUE"
    }
}

TASK [debug] *****************************************************************************************************************************************************************
skipping: [localhost]

TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "false_register": {
        "changed": false,
        "skip_reason": "Conditional result was False",
        "skipped": true
    }
}

PLAY RECAP *******************************************************************************************************************************************************************
localhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

対策として

公式ドキュメントにも書いてあるとおり、タグで回避しましょう。

If a task fails or is skipped, Ansible still registers a variable with a failure or skipped status, unless the task is skipped based on tags. See Tags for information on adding and using tags.

https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#registering-variables

- hosts: localhost
  tasks:
    - block:
      - debug:
          msg: "TRUE"
        register: true_register
      - debug:
          var: true_register
      tags:
      - true_flag

    - block:
      - debug:
          msg: "FALSE"
        register: false_register
      - debug:
          var: false_register
      tags:
      - false_flag
$ docker compose run ansible ansible-playbook playbook.yaml --tags=true_flag
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [localhost] *************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************
ok: [localhost]

TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "TRUE"
}

TASK [debug] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "true_register": {
        "changed": false,
        "failed": false,
        "msg": "TRUE"
    }
}

PLAY RECAP *******************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

VagrantでAnsibleプロビジョニングする

以下のようなVagrantfileを利用する。
config.vm.provisionでansibleをえらんであげればOK
この場合はVagrantfileと同一ディレクトリにあるplaybook.ymlを実行してくれる。

Vagrant.configure("2") do |config|
  config.vm.network "private_network", type: "dhcp"

  config.vm.define "test-php" do |php|
    php.vm.box = "ubuntu/focal64"
    php.vm.define "test-php"
    php.vm.hostname = "test-php"
  end

  config.vm.provision "ansible" do |ansible|
    ansible.version = "latest"
    ansible.playbook = "playbook.yml"
    ansible.verbose = "v"
  end
end

AnsibleのインベントリファイルはVagrantが自動生成してくれて、ローカルの.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventoryに格納される。

自動生成されるインベントリファイルの例は以下のとおり。

# Generated by Vagrant

test-php ansible_host=127.0.0.1 ansible_port=2200 ansible_user='vagrant' ansible_ssh_private_key_file='/Users/kabegiwa/vagrant/test_php/.vagrant/machines/php-test/virtualbox/private_key'

config.vm.defineで定義した名前でインベントリには登録されます。
なので以下のようなかんじでplaybookはつくってあげます。

---
- name: setup virtual machine
  hosts: test-php
  roles:
    - role: php

そしてvagrant upなりvagrant provisionなりしてあげればAnsibleでのプロビジョニングが実行されます。

参考にしたページ

https://www.vagrantup.com/docs/provisioning/ansible

20220512

仕事

あんまりいそがしくない。

私生活

吉池に牡蠣がいっぱいある。旬なんですね。 あと魚の値段って乱高下しますね。

コンテンツ

ベター・コール・ソウルシーズン6の最新話
前回シーズンから間が空きすぎてところどころ忘れている。

お勉強

Vagrant上でKubernetesをうごかそうとしている。でもなんかむずかしい。

食べたもの

  • アジの干物(自家製)と納豆
  • レッドブル473ml
  • ヤゲン軟骨ニンニク塩炒め
  • ホッピー

Memcached vs Redis for AWSSAP

MemcachedとRedisの選定の仕方

Memcachedにしようか、Redisにしようか悩んだ場合の選定の仕方

Memcached

  • 単純なモデルを必要としている
    • 比較的小さく静的なデータを保存するとか
  • 複数のコアまたはスレッドで大規模なノードを実行する
  • スケールイン/アウト、ノードの追加/削除を行いたい
  • データベースなどのオブジェクトをキャッシュする必要がある

Redis

  • 複雑なデータ型を必要としている
    • 文字列、ハッシュ、リスト、セット、ソート済みのセット、ビットマップとか
  • メモリ内のデータセットを並べ替えたりランク付けしたりする要件がある
  • キーストアの永続性が必要な要件がある
  • 読み取りを多用するアプリケーションでは、データをプライマリからリードレプリカに複製する必要がある
  • プライマリノードに障害が発生した場合は自動フェイルオーバーが必要
  • サーバ上のイベントをクライアントに通知するためにpub/sub機能が必要である
  • バックアップと復元の機能が欲しい
  • 複数のデータベースをサポートする必要がある

20220511

仕事

EKSのアップデートをした。GCPやAzureのほうがここらへんは優れているっぽい。EKSは手動作業が結構多い。マネジメントなのに。

私生活

冷凍庫がパンパン

コンテンツ

なにもみてない。

お勉強

VSCodeでの一括コメントまわり。個人的に覚えづらい。

コメント化: Ctrl+k → Ctrl+c
コメント解除: Ctrl+k → Ctrl+u

Macの場合はCtrlをCommandにかえる。

食べたもの

  • オイルサーディンのパスタ
  • レッドブル473ml
  • カロリーメイトフルーツ味
  • 牛スジカレー
  • 麻婆春雨
  • ホッピー
  • 白ワイン

Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 11910 (unattended-upgr)...が発生する

VagrantでUbuntu20を動かしていて、apt upgrade時、以下のエラーが発生した。

Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 11910 (unattended-upgr)...

どうやら自動アップデートが裏でうごいていたっぽい。

$ ps aux | grep upgrade
root         755  0.0  0.2 108104 20700 ?        Ssl  May08   0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
root       12332 13.6  1.9 316808 156352 ?       Rl   07:58   0:05 /usr/bin/python3 /usr/bin/unattended-upgrade
root       23469 15.0  1.2 316808 99780 ?        S    07:58   0:00 /usr/bin/python3 /usr/bin/unattended-upgrade
root       23705  0.0  0.6 316808 56220 ?        S    07:58   0:00 /usr/bin/python3 /usr/bin/unattended-upgrade
vagrant    23734  0.0  0.0   8160   724 pts/0    R+   07:58   0:00 grep --color=auto upgrade

自動アップデートを切りたい場合は以下を0にしてあげましょう。

$  cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

20220510

仕事

やはり設計系はにがてなのである。

私生活

朝5時に目覚めてしまったのでそこから起きていた。
LINEの引き継ぎってどうしてこんなにアレなんだ。なんで端末にすべてがひもづいているのかわからん。紛失時に全部だめになるやんけ。

コンテンツ

ワンダヴィジョンみた。よかった。
そしてよるにドクター・ストレンジのあたらしいやつをみにいった。サム・ライミだったんですね。

お勉強

CloudFormationのDeletionPolicyでおもいのほかハマる。 やっぱりTerraformのほうが書きやすかったりする気がする。

食べたもの

  • 納豆ご飯と目玉焼き
  • フライドチキン鶏もも一枚分
  • レッドブル473ml
  • ステーキ(ふるさと納税で送られてきたいいやつ)