ITインフラエンジニアの躓き

ITインフラエンジニアの色々試行錯誤した際の躓き備忘をここに記載します。日記もします。

最近ブログさぼっちゃった

ちょっと忙しかったり余裕がなかったりでブログちょっと期間空いちゃった。
週末アウトドアしたんすよ!それでへとへとになってしまい(笑) 楽しかったー。色々アウトドアグッズ買いたくなってしまった。次回は自分用の椅子を購入するのと、寝るときのマットだな。100均で買った安いヨガマットじゃ十分休めなかったよ。。。

で、ちょっとブログ更新さぼっちゃったなーと思い、あとでゆっくり投稿しようと思っていた自分が普段使用しているGASスクリプトをさっき投稿してみました!
もしここの記事を見つけることができた人は使ってみてください~。

チャットツール(Slack等)と連携したGmail整理用GASスクリプト

背景など

  • メインのメールでGmailを使用しており、基本的にInboxは空にして何を読んでいないか把握できるようにしたい
  • 良く届くメールやアラートメールは自動でアーカイブしたい。 ただちゃんと認識もしたい
  • Gmailの機能で自動ラベル付け・自動既読。GASスクリプトを定期的に実行し、ラベル付けしたメールをチャットツール(SlackやMattermost)に通知し、自動でアーカイブさせる

スクリプト内容

function myFunction() {
    //notification
    var pcg1 = "<channelName1>"; //★1
    var pug1 = "<webhookURL1>"; //★1
    var threads1 = GmailApp.search('label:#notification in:inbox'); //★2
    webhook(pcg1, pug1, threads1);
    
    //alert
    var pcg2 = "<channelName2>"; //★1
    var pug2 = "<webhookURL2>"; //★1
    var threads2 = GmailApp.search('label:#alert in:inbox'); //★2
    webhook(pcg2, pug2, threads2);
    
}

function webhook(postChannelGmail, postUrlGmail, threads) {
    var count = threads.length;
    Logger.log(postChannelGmail + "対象件数:" + threads.length); 

    for(var i = 0; i < count; i++) {
        var lastDate = threads[i].getLastMessageDate();
        var message  = threads[i].getMessages()[0]; // Get first message

        var datetime = lastDate.getFullYear() + "/" + (lastDate.getMonth() + 1) + "/" + lastDate.getDate()
        + " " + lastDate.getHours() + ":" + lastDate.getMinutes() + ":" + lastDate.getSeconds();

        Logger.log(datetime + " 件名:[" + threads[i].getFirstMessageSubject() + "]");

        //slackに通知
        sendHttpPost("* _**From**_ :" + message.getFrom() + "\n* _**Title**_ :" + threads[i].getFirstMessageSubject() + " \n* _**Full Text**_ :" + threads[i].getPermalink(), "Gmail",postChannelGmail, postUrlGmail);

        //アーカイブ
        threads[i].moveToArchive();
    }
  }
  
  function sendHttpPost(message, username, postChannel, postUrl)
  {
    var jsonData =
    {
       "channel" : postChannel,
       "username" : username,
       "text" : message
    };
    var payload = JSON.stringify(jsonData);
    var options =
    {
      "method" : "post",
      "contentType" : "application/json",
      "payload" : payload,
      "validateHttpsCertificates" : false
    };
  
    UrlFetchApp.fetch(postUrl, options);
  }

使い方

  • ★1の部分にチャットツールのチャンネル名、webhook設定したチャンネルのURLを入れる
  • ★2のところでチャットツールへ通知したいGmailのフィルターを設定している。自分は通知用(label:#notification in:inbox)、アラート用(label:#alert in:inbox)にチャンネルを分けて設定してる。1つでいい場合は該当の4行を削除すればいいよ。
  • 上記の通り、Gmailのラベルでフィルターしてる。なのでGmailの自動処理設定でラベル付け、自動既読を設定する。
  • 後は当該スクリプトをGASに登録して、定期的に実行している(自分は5分ごとにしている)

所感

  • 一時期メールが何百通も未読になってしまい、余裕があるタイミングで一気に確認してアーカイブしたりしてた。確認が大変なので適当な確認になってたし、ちょっと重要なメールを見逃していたりしてだいぶうんざりしてたんだけど、これができるようになり整理方法が増えたのがだいぶでかい。
  • あと自分でdockerで構築しているMattermost環境があるのでそれを有効活用したいってのもあった
  • ただまずは自分のGmailの分類を決める事が必要なので、どっちかというとそっちの方が大変よ、、、全く決まってないとき自分は二日間くらいかけて管理方法を決めたりしてました。(結局その時と管理方法も変わりましたが。たぶんこれからも変わりそう)
  • これのほかにも定期的に届いて残す必要のないメールを定期的に削除するGAS、未読メールは特定の時間にチャットツールにリマインドするGASもあります。気が向いたらまた投稿します。

ディスプレイ届きました!!!

よっしゃ!届いた!! 画面見やすい!快適!好き!!!

詳しいレビューやらなんやらは少し使用感を確認してから気が向いたらしようと思ってます。
もっと早くから買えばよかったね。まぁ場所が狭いからしょうがなかったが。

今日は業務終わった後に久しぶりにAmazon photosの整理をしてた。 Amazon プライム会員だと写真のストレージ無制限なんですよね。ありがてぇ。
まぁ自分スマホをPixel4使用しているのでGoogle photoもスマホ経由であれば無制限ですが。
ただGoogle photoって少し画面が見にくいんですよね。Amazon photosは見やすい印象。

あと家族で共有できるファミリーフォルダが地味に便利。
嫁と写真を撮ったやつをそこに放り込むだけでいいので。昔はLINEとかで都度送付してたのが、自動バックアップされてる写真を共有するだけでよくなった。

あとはビデオ系をどうするかだよなぁ。ビデオは無制限のクラウドストレージないし。
自宅でNAS構築するか、都度HDDとかに取り込むか。
HDD取り込みは面倒だしNASかなぁ。。。24時間つけっぱなしにしている検証用PCいるし。

AWSのCloudFormationでドラフト検出で少し混乱した

概要

  • CloudFormationでIAMポリシーを更新する機会があったが、ドリフトを検出
  • ドリフト検出内容は、更新するスタックで作成したIAMポリシーをアタッチしているロールが手動で追加されていたため(と思われる)
  • スタックを更新したが当該ロールからIAMポリシーは強制デタッチされることはなかった

背景

会社でIAMポリシーの新規作成の機会があり、自分のチームではCFnテンプレートを作成してスタックの更新で作成する方針となっている。
そのため既存のテンプレートに追記してスタックの更新をしようとしたが、ドリフトの検出があったので確認したが、どうも既存のテンプレート内容と実際のリソース内容で違う場所が見つけられない。
違いがポリシーがアタッチされているロールぐらいしか違いがなかったので、おそらくそこが原因と判断。CFnテンプレートのIAMポリシーの部分でアタッチ先も設定できるしね。そこの違いがドラフト検出されたんだと思う。

本当はもう少しちゃんと細かく確認したかったが業務時間が足らず、スタックの更新を実行(テスト環境)。
スタック更新後、問題と思われるロールからポリシーデタッチはされてなかった。
なんかいい感じに残しておいてくれるのね、とちょっとびっくり。

所感

  • 昔業務で対応した時も同じような躓きをした気がするが久しぶりの対応で忘れてた
  • てかそもそも自分はこの業務から離れているはずなのに、ここまで対応してるのおかしい。まぁ色々訳ありだが。。
  • なるべくブログ更新したいがネタが思いつかず、iPadからの急遽更新。ちゃんと投稿できるかな? →タグの付け方がわからない、、、後でPCからタグ付けか? →アプリからじゃなくて結局ブラウザで更新

wordpressで必要なphp関連パッケージ

概要

  • wordpressをインストールするために必要なphp関連のパッケージはphp7.4だけインストールすればいいと思っていたが足りなかった
  • 下記パッケージを追加でインストール
    • phpからmysqlを操作するためにphp74-php-mysqlnd
    • httpdphpを有効化するためにphp74-phpを追加でインストール

背景

前回の続きwordpressをインストールするために、httpdをインストール、phpのインストールが途中。 phpはそのままインストールすると別バージョンとなってしまうのでリポジトリを追加してから、php7.4のバージョンを指定してインストール。

yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install php74

そこでふとMySQLを使用するのために連携のパッケージが必要なのでは?と思い調べるとやはりちゃんと入れる必要がありそう。
調べてみるとphp-mysql、もしくはphp-mysqlndが必要とのこと。簡単に調査したぐらいなのでまだ確信はないが、php-mysqlの方が古いっぽい?なのでphp-mysqlndをインストール。phpのバージョンもちゃんと7.4を指定。

yum install php74-php-mysqlnd

その後MySQLもインストール。(これも事前にリポジトリをインストール)

yum instal https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum install mysql-server

これでwordpressのサイトも見れるかな?と思い、wordpressの最新版をダウンロードし解凍してhttpdの表示するフォルダはいかに持っていくなりして、じゃあもう見れるのかな?と思いアクセスするが全然見れない。
wordpressの表示する画面がindex.phpなのを確認できたので、「あ、これhttpdの設定ファイルでindex.php読み込む設定になってないな?」と思い、httpd.confに追記するもそれでも見れない。

・・・・・・・・・?

はてなになったのですが、httpd -M | grep phpを実行してみるとどうやらphp関連モジュールが読み込まれてなさそうだった。
phpインストールした時に勝手に設定されると思っていたので、自分でモジュールを指定する必要があるのかな~と思いll /etc/httpd/modules/ | grep phpを実行するもそもそもモジュールが存在していない。
これはさすがにパッケージが足りないんだろうなと思い、yum search php74に表示されるパッケージ説明とか見てみたら気になる点が。

php74.x86_64 : Package that installs PHP 7.4
php74-php.x86_64 : PHP scripting language for creating dynamic web sites

ん?ウェブサイト作成に必要っぽいパッケージがある?もしかしてこれ?と思いインストール。

yum install php74-php

すると/etc/httpd/conf, /etc/httpd/module配下にconfファイルとモジュールが追加されていることを確認。これが必要だったんかーい。
てかconf内容みたらDirectoryIndexにindex.phpがそこで追記もされてた。わざわざhttpd.confを編集しなくてよかったのね。

とこれで無事wordpressにアクセスできるようになりました。 (ちょっと思い出しながらの記載なのでうそが混ざってたらゴメンなさい)

※ちなみに少し気になったのでyum install phpでインストールしたときに入るパッケージを確認したらphp74-phpと同じ説明になっていた。デフォルトではwebサイトでも使えるやつがインストールされるようになってるのね。

所感

  • 色々トラブルシュートしながらの構築だと新しい知見が増えるのが面白い。対応中は少しイライラするが
  • なんとかアクセスできるようになり、サイトを立てられる状況になったので一安心って感じ。でもなんかモジュールがまだ足りてないのか少し不安。
  • httpdのセキュリティ設定とかしないとだよね。したことないからどうすればいいかまだ想定できてないけど、テストページが見れないようにとか、インデックスが表示されないようにとかしないとだよね。httpdのベストプラクティスとかないかしら

テレワークを快適にするためディスプレイ購入(届き待ち)

1年近く在宅勤務を続けており、一応デュアルディスプレイ環境はすでにある状態です。
ただ使用しているディスプレイが下記のASUSのモバイルディスプレイで、接続がType-Cで配線が1本で大変楽かつすっきりしているのですが、業務で使用するには少し心もとないサイズ。

しかも地面直置きなので視線が少し低く、気持ち疲れる。
あと業務以外で使用使用したいときがあるのですが、自分の古いノートPCに接続(付属の変換器でType-A※USB3.0)して使用しているのですが、モニタへの電源供給で充電が間に合わず、普段使いで充電しながらのノートPCが電源不足でシャットダウンする事象も発生。
これは正直ノートPCが少し古いやつでバッテリーがへたり気味なのでそのせいだと思うのですが、地味にストレスでした。
ただ今日部屋の模様替えをして、少し大きいディスプレイを置く余裕も出てきたのでいよいよ購入を決意。

サイズ的に24インチくらいのディスプレイを探したところ、価格ドットコムで1.5万円以下でそこそこ上位の下記ディスプレイを見つけ、Amazonでとうとう購入。 他のサイトだとAmazonより安いんだけど購入サイトのアカウント増えるのが嫌だったので断念。
ついでにモニターアームも購入。がっつり机に設置するタイプだと場所がなく、支柱に取り付けるタイプ。
来週の火曜ー水曜あたりで届くのでとても楽しみ。業務中に開けちゃいそうだな。。。

WordPressの事を調べようとしたら変な記事が乱立していてわかりずらい

今日はただの愚痴。 WordPressのサイト立ててみよう今いろいろ検索していたが、検索して出てくる記事見づらくない?

WordPressWordPressの使い方のブログのようなのを作成しているんだろうけど、無駄に目次を開かせる仕組みにしてたり、対話方式にしてたり、でかい画像貼り付けてブログ全体の視認性下げてたり。
WordPressの講師とかがそういうの推奨してるのか・・・?
そうだとしたらわざと分かりにくいサイトを教えて、講師の価値を上げようとしているようにしか思えん。。。

と、愚痴でした。
記事検索してたらなんかWordPressに悪印象を持ってきたので別の検証に浮気しようかな。。。
メールサーバやDNSサーバ構築をやってみたいと思ってる。
会社の業務的にAWSの資格勉強をした方がいいんだろうけど今いろいろとモチベーションがない。