たろログ2

実験的運用により、記事品質が乱高下することがあります。予めご了承ください。

2022-07-28 RHEL6 の awk は gawk

前書き

man awk と実行すると gawk というコマンドのマニュアルが出てきて驚いたが、 RHEL6 の awkgawk というコマンドのエイリアスとなっていた。

コマンド出力

# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.10 (Santiago)
# which awk
/bin/awk
# file /bin/awk
/bin/awk: symbolic link to `gawk'
# file /bin/gawk
/bin/gawk: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
# ls -l /bin/awk
lrwxrwxrwx. 1 root root 4 Jul 14  2015 /bin/awk -> gawk
# which gawk
/bin/gawk
# file /bin/gawk
/bin/gawk: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
# ls -l /bin/gawk
-rwxr-xr-x. 1 root root 375360 Jul  4  2012 /bin/gawk

2022-07-27 Google Cloud Skills Boost 実施

今日の実施内容

Logging, Monitoring and Observability in Google Cloud | Google Cloud Skills Boost for Partners のコースを引き続き実施している。

  • Module 3: Alerting Policies
  • Module 4: Monitoring Critical Systems

なお、ドキュメントを読むのに疲れたので、 以前 Cloud Developer の試験勉強を行ったときにそうしたように、 Lab と Quiz だけを実施することにした。

Compute Logging and Monitoring | Google Cloud Skills Boost for Partners まで実施

Lab

Alerting in Google Cloud | Google Cloud Skills Boost for Partners

APP Engine の latency について SLO のようなものを設定し、それを超えるとアラートが発生、設定に従ってアラートメールが送信されることを確認した。

Service Monitoring | Google Cloud Skills Boost for Partners

SLI の設定を行い、SLI やエラーバジェットの状態に応じたアラーティングの設定を行い、しきい値を超えるとアラートが発報されることを確認した。

Monitoring and Dashboarding Multiple Projects from a Single Workspace | Google Cloud Skills Boost for Partners

また、複数プロジェクトの VMインスタンスのメトリクス情報を、別の監視用プロジェクトから一覧できることを確認した。

Compute Logging and Monitoring | Google Cloud Skills Boost for Partners

Nginx のインスタンスを作成して、 Logging でログを確認した。

Monitering でメトリクスを確認した。後にエージェントをインストールして、より多くのメトリクスを表示できるようになることを確認したりした。

余談

ずっと Google Certified Professional Cloud Security Engineer を見据えて学習を進めていたが、ここにきて Google Certified Professional Cloud Network Engineer に目標を変更することにした。

Cloud Security Engineer の前提として Cloud Network Engineer の知識が必要となるため Cloud Network Engineer の試験範囲を勉強しているが、未だに Cloud Network Engineer の試験範囲を学習しており、終わりが見えない。

Cloud Security Engineer を目指すとそれだけで半期が終わってしまいそうなので、とりあえず今期は Cloud Network Engineer を目指すことにする。

すでに受験の予約は行った。 8月上旬に受験予定。落ちる可能性はかなり高いため、一回目の受験で不合格だった場合は 8月末に再受験する。

9月になって Google Cloud 試験に構っている暇はないため、2回目の受験において同様に不合格となった場合は今期の目標を諦める。 9月以降は、データベーススペシャリストの勉強に注力する。

2022-07-26 Google Cloud Skills Boost の実施

Security Engineer 認定狙いから Network Engineer 認定狙いへ変更

今期の業務目標を「Google Certified Professional Cloud Security Engineer の取得」から「Google Certified Professional Cloud Network Engineer の取得」に変更することにした。

まだ上長には話していない。近々報告する。

Cloud Security Engineer の前提知識として Cloud Network Engineer の知識が必要であり、一か月ほど学習を進めてきたが、未だに Cloud Network Engineer の学習内容の域を出ることができていない。

今期は「データベーススペシャリストの取得」も行わねばならず、こちらにあまり時間をかけすぎるわけにもいかない。そのため、狙う資格を切り替えることにした。

来来週、 8/7 にでもまず第一回目の受験を行う。万全の態勢での受験ではないので、半ば博打である。

合格したらそれでよし。不合格の場合は、 8月の末に再受験を行う。

9月からはデータベーススペシャリスト試験に掛かりきりになる予定で、 Google Cloud の試験に構っている暇はないと思われるので、 8月末二回目の受験に落ちた場合は諦める。

今日実施したこと

Cloud Network Engineer を狙うことにしたため、以下コースを順に実施していくことにした。

Professional Cloud Network Engineer | Google Cloud Skills Boost for Partners

本日は、以下を実施した。

Logging, Monitoring and Observability in Google Cloud | Google Cloud Skills Boost for Partners

  • Module 1: Introduction to Google Cloud Monitoring
  • Module 2: Avoiding Customer Pain

Monitoring Dashboard

Google Cloud で可視化を行うことのできるサービスは様々ある。

このサービスでは、VM インスタンスのリソース使用率などをグラフ表示することができる。

また、 Condition に応じたアラートを定義し、通知を受け取ることができる

Uptime checks test

複数リージョンから HTTP, HTTPS, TCP などによる任意の Uptime Check が行える。

Network Inteligence Center

ネットワーク図のようなものが描画され、 GCP に構築したネットワークの可視化 (Visualization) が行える。

Connectivity Test

インスタンスと疎通ができなくなった際など、ネットワークの疎通に問題が発生した際に様々な観点から疎通確認ができる。

通常こういう場合は様々なところに PING を送信して問題を切り分けるが、これを簡単に行えるようにしたのが Connectivity Test である。

アタッチした External の IPアドレスと疎通はとれるのか、 VPC のエンドポイントと疎通はとれるのかなどなどの疎通確認を行うことができる。

Performance Dashboard

ネットワークの遅延やパケットロスの情報について確認ができる。

アプリケーションの速度低下などがこれに起因する場合、一目でわかる。

Firewall Insight

firewall の設定を可視化できる。

また、その設定が適切かを検証 (Insight) したり、過剰な許可設定を入れている場合は提案を行ったりしてくれる。

VPC Flow Log

  • VPC を通過するパケットについて、ロギングを行うことができる。
  • サブネット単位で有効化する。
  • ロギング処理による速度低下などは発生しない。
  • src_ip, src_port, dest_ip, dest_port, protocol の 5種のフィールドを持つエントリとして、パケットの情報がロギングされる。

Packet Mirroring

Cloud NAT Logging

  • NAT を利用したネットワークを作成したイベント
  • ポートが足りなくなってパケットがドロップされたイベント

この機能を有効化すると、上記のふたつのイベントについてロギングを行う。

ログは Cloud Logging に保存される。 Cloud Logging でもログは閲覧できるが、 BigQuery にエクスポートすることが推奨される。

また、図やグラフを作成したい場合は BigQuery では足りないため、 BigQuery と Data Studio を連携させ、 Data Studio で図やグラフを生成して閲覧することが推奨される。

Monitoring

Google Cloud における監視を担当するサービス。

リソース状況をエージェント (Collector) で取得し、 Dashboard や Alert, Metric Explorer で処理する。

Logging

ログに関する全てに加え、ログに関するアラーティングを担当するプロセス。

Error Reporting

Web アプリケーションで 403, 500 などのステータスコードが返された際など、アプリがクラッシュしたイベントについて報告するサービス。

クラッシュの回数を報告したり、分析したり、集計したりするために用意されている。

Service Monitoring

SLO の監視に特化した監視サービス。

App Engine などを利用するにおいて、リクエストの遅延やエラー発生率など、よく計測される SLI (Service Level Indicators) を収集し、また SLO や Error Bucket を定義してアラーティングも行える。

Debugger

本番アプリケーションにおいてデバッグ処理を動かし、変数のスナップショットを取得したりデバッグ用の出力を吐かせたりできる。

一度、 Cloud Developer 取得の勉強をしていた際に Lab で実際に利用した記憶。

便利な機能だが、悲しいことに廃止予定らしい。

Trace

リクエストにかかった時間の観点から、Tracing を行う。

リクエストにかかった時間のうち、アプリケーションのどの処理にどれくらいの時間がかかっていたのかを Trace する。

Profiler

リクエストが消費したリソースの観点から、 Profiling を行う。

アプリケーションの各処理について、それぞれの処理がどの程度のリソース (CPU 時間、メモリなど) を消費したかを Profiling する。

2022-07-25 Google Cloud Skills Boost 実施

前書き

引き続き Course Resources | Google Cloud Skills Boost for Partners の PDF ファイルを読み進めた。

「Module 2: Networking Pricing and Billing」、「Module 3: Network Design and Deployment」の二つを完了。

かなりネットワークには詳しくなったと思う。本来の目的は「Cloud Security Engineer」だったと思うのだが、前提としてネットワークの学習が勧められているのでこんなことになっている。

Cloud Security Engineer を受験してしまうのもありなんじゃないかと少し考えていたりする。

トラフィック量に対する課金

GCE を例に、基本的な考え方を学んだ。

まず、 Ingressトラフィックは無料。 Egress に課金される。

また、内部IPアドレス同士で行われる同一ゾーン内での通信にも課金されない。

Egress のトラフィックについても、Youtube など Google への通信へは課金されない。

同一リージョン内における、 Google Cloud の別サービス (App Engine など) へのリクエストは課金されない。

同一ゾーン内での通信であっても、外部IPアドレスを利用して行う通信については課金される。

また異なるゾーン間の通信、異なるリージョン間の通信は課金される。当然だが、前者が後者よりも高くなることはないと考えられる (同額になることはありうるだろう)。

Static Address に対する課金

使っていない Static Address に対する課金は最も大きくなる。

GCE インスタンスの他、 CLB に用いられる forwarding rules にも Static Address を割り当てることができる。

Premier Tier と Regional Tier の違い

Premier Tier

  • Global で機能するネットワークであり、 CDN 機能が有効になる
  • Global SLA がある (Global SLA というのが何なのかはわからなかった)

Regional Tier

  • Regional に機能するネットワークである
  • Global SLA がない

VM の設置に関する推奨デザイン

ここから、ネットワーク周りに関するデザインについての説明となった。

まずは、 VM の設置は Availality Zone をまたぐように行おうねという話がされた。

Availavility を重視する場合は、同じサブネット内かつ異なるゾーンに VM インスタンスをデプロイし、耐障害性を高める。

サブネットについて同じものとするのは、 firewall ルールなどの付随する要素を一括管理できるためである。

なお、更なる耐障害性を求めるのであれば、リージョンを分けることになる。この場合、サブネットワークは別となる。

このような構成とする場合は、 LB でリージョン間のルーティングを行うのが楽ちんであるため推奨される。

Shared VPC を用いたネットワークのデザイン例

Shared VPC のホストネットワークをトラフィックのエンドポイントとする。

セキュリティアプライアンスをデプロイした GCE インスタンスを経由させ、子のプロジェクトの VPC にルーティングし、コンテンツを提供する。

これにより、セキュリティスキャンや WAF の機能をホストプロジェクトで提供し、またネットワークやプロジェクトについても分割することができる。

Cloud NAT

外部IPアドレスを割り当てることなく、 GCE のインスタンスがインターネットに接続できるようになる。

なお、適用されるのはアウトバウンド方向のみであるため、外部から GCE のインスタンスに接続することはできない。それを行うためには外部IPアドレスを割り当てる必要がある。

Private Google Access

外部IPアドレスの割り当てなしに、 GCE のインスタンスGoogle API の Public IP アドレスと通信できるようになる。

Teraform

かなりページを割いて、 Teraform について解説が行われていた。

Monitoring

ダッシュボードで CPU の使用状況やトラフィックの状況を可視化することができる。

2022-07-22 朝礼 5分スピーチの実施

前書き

私の勤務先では、平日の朝 9時から朝礼が始まり、持ち回りで 5分間のスピーチが行われます。

テーマは何でもいいのですが、技術的な話が望ましいとされています。

今日は私の担当だったため、 Docker の話をしました。

テーマは「Docker のビルド処理について。また、それを用いて php のアプリケーションを配布する方法について」です。

docker について

docker は、アプリケーションを動作させる基盤です。

コンテナという単位でアプリケーションを動作させます。

また、そのコンテナの実行元となるものとして、イメージというものがあり、用意されたものを利用したり、今回お話しするように自分で作成して配布したりできます。

docker の一般的な用途

docker の一般的な用途は開発環境としての利用です。

例えば php のアプリケーションだと、 docker によって提供された php の環境を利用します。

自分で OS を用意して環境を準備する場合は、作成するアプリケーションによって必要になるライブラリが異なるため、その拡張ライブラリを OS にインストールする作業が必要となります。

アプリケーションの実行用に調整した Docker イメージを配布したり、ソースコードに Dockerfile を含めたりすることによって、個々の開発者が適切な php 拡張をインストールして開発環境のセットアップを行う必要性がなくなります。

今回話すのは、ソースコードについてもこの docker イメージに焼いてしまって、単体で動作するアプリケーションとして配布する方法です。

ビルドを用いてイメージを作成し、アプリケーションを配布する方法

Dockerfile という、 docker イメージの作成方法を指示するファイルがあります。

このファイルに、ソースコードを docker イメージにコピーする処理を書き入れます。

さらに、 composer でのライブラリのインストール処理も書き入れます。

この Dockerfile を基に docker イメージをビルドすると、アプリケーションのソースコードも含まれた状態の docker イメージが作成されます。

この docker イメージを配布すると、本番環境にソースコードをダウンロードする必要もなく、セットアップ処理を行う必要もなく、 docker コンテナを動作させるワンコマンドの実行でアプリケーションが実行でき、通常の手法で用意したアプリケーション環境同様に利用 (PHP のアプリケーションであれば、ブラウザでアクセスしての操作など) ができます。

実際に使ってみて

実際に、 discord の Webhook を利用したアプリケーションを構築してみましたが、環境変数として認証情報を受け渡すだけでアプリケーションを動作させることができました。

tarohida/discord-webhook-proxy (github.com)

使ってみて便利だと思ったので、今回この話をさせていただきました。

以上です。

2022-07-22 Windows10 の入力インジゲータが消えた

発生した問題

Windows10 の入力インジゲータが突然消えました。

システムアイコンの表示が有効になっていることは確認済みです。

やったこと

上記設定画面で入力インジゲータの表示を「オフ -> オン」してみましたが、状況に変化はありませんでした。

解決方法

下記サイトの「言語バーを使用することで入力モードを判断する」の手順に従って「言語バー」を表示し、その後再度非表示にしたところ、入力インジゲータが表示されるようになりました。

「A」「あ」←入力インジケーターが消えた!?言語バーはどこ?※Windows10バージョン1909 | もちブログ (mochikunblog.com)

言語バーの設定を有効にし、また無効に戻しただけなので、何の設定が変更されて入力インジゲータが表示されるようになったのかは正直なところ分かりません。

まあ、解決されたのでよしとします。また再発した場合は同じことを試してみるということでとりあえず様子見。

余談

先日以下の Windows Update を適用しました。

July 12, 2022—KB5015807 (OS Builds 19042.1826, 19043.1826, and 19044.1826) (microsoft.com)

その前後で事象が発生したのか、はっきりとは覚えていませんが、これが影響だったのかもしれません。

2日前の 18時ごろに適用し、事象に気づいたのがその翌日でした。

2022-07-22 Google Cloud Skills Boost 実施

今日も引き続き、 Course Resources | Google Cloud Skills Boost for Partners のページを進めていった。

「Module1: Hybrid Connectivity」については今日で完了し、「Module 2: Networking Pricing and Billing」に進んだ。

Network Connectivity Center

hub-and-spoke 構成のネットワークを構築するためのサービス。

hub-and-spoke 構成のネットワークを構築することで、スポークの先にあるネットワーク同士を接続することができる。

Hub

  • GCP プロジェクトにひとつ存在する
  • これに Spoke を接続する
  • 接続された Spoke によって、様々な役割を果たす。

Spoke

Hub に接続される、 Google Cloud のネットワークのリソースのことを Spoke と表現する。

Spoke を作成する際には「backing service」と呼称される以下のようなリソースを指定する必要がある。

  • Router Appliance
  • Cloud VPN
  • Dedicated Interconnect
  • Partner Interconnect

Router Appliance

GCP の Compute Engine のインスタンス上にデプロイされる、 Virtual Appliance である。

Appliance という名称だが、物理機器ではない。

Cloud Router と BGP セッションを張ることで、 GCP のネットワークと外部ネットワークを接続する

Interconnect 系と Peering 系の違い

Interconnect 系は、 RFC1918 の private address でサービスにアクセスする

Direct Peering 系は、 public IP のみでアクセスする。専用回線のイメージ。やはり基本は Google Workspace もしくは Youtube の利用を想定する。

価格関連

ここから 「Module 2: Networking Pricing and Billing」 の内容。

GCP のネットワークの課金については、それぞれのサービスによって料金体系が異なる。

各ドキュメントを参照するに加え、 「Pricing calculator」を利用することが推奨されていた。