クラウドエンジニアの記録

ネーミングセンスほしい

【読書録】Webを支える技術 -HTTP、URI、HTML、そしてREST

書籍

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus) | 山本 陽平 |本 | 通販 | Amazon

読んだ動機

AWSソリューションアーキテクト プロフェッショナル の資格勉強をしているときに、「Webについて理解すれば、AWSのことももっと理解できそう」と感じたのがきっかけ。 Webについて学べそうな本をざっと探してみたところ、本書は程よい入門性と内容の充実度のバランスがよさそうだったので購入。

概要

本書では、「Web」というとらえがたい言葉を、発達の歴史・関連用語などを一つずつほぐしながら順を追って解説していく。 HTTP、URI(あるいはURL)、HTMLなどの用語は、多くの人が意味を理解せずになんとなく触れている。 (ある意味すごいことだな。。) これらの用語を、「Web」という概念に対してどういう関係性を持つものなのか理解できる。

いくつか「覚えておこう」と感じた点を以下にまとめる。

RESTとは

ググってみてもイマイチわかったような気になれないREST。 本書の説明を読んで少し輪郭が見えてきた気がする。

RESTとは、以下の特徴を備えたWebの「アーキテクチャスタイル」のことのようだ。 必ずしもすべてを満たす必要はないが、すべてを満たす「RESTらしい」アーキテクチャのことをRESTfulと呼ばれる。

1.クライアント/サーバ型である

システムを、アプリケーション提供者としてのサーバと、受け取る側のクライアントに分けていること。 サーバとクライアントを分割することで、システム全体の柔軟性を保てる。 たとえば、アプリとしてのデータ保持や主な処理はサーバ側で実行するため、クライアント側での実装は最小限で済むことなどがある。 クライアント側での実装負荷が下がることで、クライアントをマルチデバイス化することもできる。

2.サーバがステートレスであること

ステート とはアプリケーションの状態のこと。 「ステートレスである」とは、サーバがクライアントのアプリケーション状態を保持しないことを指す。 ステートレスを保つことにより、サーバの実装はシンプルになる。 ただし、実際のWebサービスではサーバがステートフルになっているケースも多い。

3.キャッシュ機能を持つ

キャッシュとは、サーバから取得したリソースをクライアント側で保存しておくこと。 キャッシュすることで、クライアントとサーバ間の通信を減らし、サーバの負荷を下げられる。 ただし、タイミングによってはクライアントが古い情報を取得してしまう欠点もある。

4.統一インタフェースを実装している

インタフェースとは、2つの要素がお互いやり取りするための接地面のこと。 そして、「統一インタフェース」とは、その接地面でのコミュニケーション方式を統一している状態のことを指す。 たとえば、8つしかメソッドを持たないHTTPを統一インタフェースとすることで、アーキテクチャ全体がシンプルになる。

5.階層化システムである

「統一インタフェース」を実装していることの副産物にもなるのが、「システムを階層化しやすい」こと。 インタフェースが統一されていることで、接地面の実装はシンプルになる。 そこで、役割ごとにサーバを分割、つまり階層化しやすくなる。 システムを改装に分けることで、各階層ごとに拡張性を持たせることができ、無駄のないアーキテクチャとしやすい。

6.コードオンデマンド

サーバ側から提供されたプログラムを、クライアント側で実行すること。 クライアント側での機能拡張が行いやすくなる。 ただし欠点として、サーバからクライアントへの通信におけるプロトコルの可視性が落ちることがある。

WebサービスとWeb API

この2つの用語を分けて認識しておくことは重要。 APIとは、プログラムからアプリケーションを利用するためのインタフェースのこと。

Webサービスとは、私たちが普段利用するWebアプリケーションを指している。つまりWeb利用における「人間用」の利用画面というところ。 Web APIとは、プログラムがWebアプリを利用するためのインタフェースのこと。つまりWeb利用における「プログラム用」の利用画面。

感想

まったくの初学者にはおそらく歯ごたえがありすぎる。 「OSI参照モデルを大まかに理解してる」かつ「L7のHTTPについてもっと掘り下げたい!」という方にはちょうど良い内容かもしれない。 実際にWebサービスを自分で実装する際に参照するのもよさそうだ。

【監視】SNMPとは何か?

はじめに

SNMPとは、サーバやネットワーク、その他デバイスのメトリクスを監視するためのプロトコル

特徴

・アプリケーション層のプロトコル。 ・マネージャとエージェントの2要素からなる。 ・トランスポート層ではUDPを使う。  →負荷を少なくするため ・MIBとOIDを要チェック  →MIBは、監視に使える情報を含んだデータベース。  →OIDという一意な識別子によって値が決まる。

主な監視方法

以下2つが主要な監視方法。 ・SNMPポーリング マネージャが、エージェントから定期的に情報を取得する。 いわゆる「プル」型?

SNMPトラップ エージェントから、必要な時にマネージャに情報送信する。 いわゆる「プッシュ」型?

具体的なツールは?

ZabbixやCacti、NetSNMPなど →無料のOSSがいいね。

参考情報

【図解】SNMPの仕組み~利用ポート,監視方法(マネージャのMIBポーリング/trap受信),tcp/udp,writeの実装例〜 | SEの道標

SNMPによる状態監視 - ネットワークエンジニアを目指して

SNMPとは?基礎知識6つとSNMPを取り入れるメリット3つ | テックマガジン from FEnetインフラ

【書評】運用設計の教科書 現場で困らないITサービスマネジメントの実践ノウハウ

はじめに

以下の本を読んだので簡単にコメントします。

www.amazon.co.jp

クラウドは、これまでのオンプレミスでのシステム運用を大きく変えると思います。 ただ、具体的にどう運用を変えるのか? 私はシステム運用者というロールではないため、実感を持ってこの疑問に答えられないと感じました。 そこで、この機会に「システム運用」について体系的に理解しておこうと思い、本書を手に取りました。

概要

システム運用に関するヒアリング~設計~運用開始~運用改善までの一連の流れが解説される。 「理想は○○だが、実際は△△で凌ぐのも手」といったような実践的(?)なアドバイスもちりばめられている。

発見

・「システムが捨てられるまでが運用」(家に帰るまでが遠足 的な発想かな) ・障害復旧にしても、パッチ適用にしても「どういう状態を正常とするか」や「どこまでを作業範囲とするか」は予め定義しておく。  →でないと、有事の際に「やるべきこと」だけでなく「どこまでやる必要があるのか」というターゲット設定から対応する必要が出てくる。   目の前の事象に対応したい中で、どの関係者にとってもうれしくない状況になる。 ・運用には大きく「業務運用」「基盤運用」「運用設計」の3つがある。

本書の良かった点

・運用者、あるいは設計を行う人がすぐに実践に落とし込めるような内容が盛りだくさん。  →ITILの内容では、実践に落とし込むのむずい と感じてる人に良いかも。 ・各ステップごとに、作成する成果物一覧や検討事項などが豊富に例示されている。  実際に運用設計をするために超有用だと思う。 ・文字通り、「教科書」という機能をしっかり備えている。

AWSでインフラのコード管理に入門しました!

はじめに

CloudFormationのハンズオンをやってみたときのメモ

AWS Hands-on for Beginners - AWS 環境のコード管理 AWS CloudFormationで Web システムを構築する | AWS 

インフラのコード管理

構成がコードで管理されていないと…

→構築に時間がかかる、再現性がない、複製が困難

→ワークロード全体の品質担保が難しい

→人為的なミスが発生しうる 

Well-Aの「運用上の優秀性」に触れる

・運用をコードとして実行する ★今回のハンズオン 

コードを使った運用のポイント

1.コードで全ての構成を定義

2.イベントに対してスクリプトで対処

 →定期イベントか、イベントドリブン

3.アプリケーションと同じ手法でコードを開発

 →インフラでの、CI/CDの考え方で改善のサイクルを回す

ハンズオン時メモ

YAMLの一般的なインデントは2

aws_completerのディレクトリが変わっていた

 $ sudo find / -name aws_completer
  /usr/bin/aws_completer

・CloudFormationの操作方法はマネコン、CLISDK
 同じ操作を繰り返すならCLISDK

・組み込み関数

f:id:lin2734:20210127001219p:plain

VPCの作成
 →これは日常でやってもよさそう。あるいは導入作業の時か。

  事前に準備して、権限もらってあとは実行するだけとする。
  →SCPとかIAMで権限が制限されてたら少し面倒そう?

・ユーザーデータにスクリプトを指定

・スタックはライフサイクルと所有者を基準に分割

VPC用スタックをベースとして、他のスタックからクロススタック参照

・スタック削除の際、残しておきたいものは定義ファイルをローカルに落としておく 

完走感想

★ELBスタックのデプロイまで進んだものの、いざELBのエンドポイントを指定してみると「502 Bad Gateway」が出力され、WordPressが表示されない。つらい。

今日は疲れたので、後日リベンジすることにする。

CloudFormationを使ってみる ことは達成したので、これを起点として上達していきたい。

あと、クロススタックを理解できたのも大きい。

次にやること

WordPressが表示できるまでハンズオン再トライ

・CloudFormationのベストプラクティスを読み解く

・ブログサイト構築に使ってみる

・CodePipelineを利用したデプロイ

 

AWSサーバーレスに入門しました

初めに

サーバーレス関連のサービスを実際に触ったことがなかったので、ついに触ってみる。その時の雑メモ。

以下のAWS公式ハンズオン参照。

AWS Hands-on for Beginners | AWS

AWS Hands-on for Beginnersめちゃおすすめです。

学んだ内容

・サーバーレス関連の基礎サービスを、Web APIを作成することで動作を確認する。
・Lambda, DynamoDB, API Gatewayを使ったアーキテクチャを構成する。

 

なぜサーバーレスが必要か?

開発者がやりたいのは「サーバー管理」ではなく「ビジネスロジックの実行」だが、実際はインフラ管理に時間がかかっている現状がある。

サーバーレスアーキテクチャを用いれば、インフラのプロビジョニングや高可用性の実現などはクラウド側で担保され、ビジネスロジックに集中できる。

 

Lambda概要

サーバーを意識せずにプログラムを実行できるサービス。

Lambda覚え書き

・マネジメントコンソールから設定可能。
・対応言語はJava,Go,Powershell,Python,Ruby,Nodejs等(随時拡充されそうなのでぼやかしときます)
・確保するメモリ量を設定する(CPUはメモリに比例)
・Lambda関数ではIAMロールで許可された権限でしか操作できない
・呼び出しタイプには「非同期呼び出し」と「同期呼び出し」が存在。
 →Lambdaは様々なサービスから呼び出しできるが、サービスごとに呼び出しタイプが異なる。
・Lambdaが呼び出されると、コンテナが起動しプログラムが実行される。
・ライフサイクルとして「コールドスタート」と「ウォームスタート」が存在。
 →基本はコンテナ再利用、利用可能コンテナがなければコンテナ生成から実行

 

Lambdaを使ってみる

実施内容

・Lambdaを単体で使ってみる
・Translateと組み合わせてみる

覚え書き

・デフォルトでCloudWatch Logsに実行時ログを出力するようになっている&必要なロールも与えてある。
・コードの変更内容を反映するため、「デプロイ」を選択してから「テスト」する。

API Gatewayと組み合わせてみる

そもそもAPIとは?

プログラムやソフトウェアが連携するための取り決めや仕様 とのこと。
API Gatewayは、API作成において本来利用者側で意識すべき部分は事前に準備されており、API作成の負荷を軽減してくれる。

API Gateway覚え書き

・順番は以下。

 メソッドリクエスト>統合リクエスト>統合レスポンス>メソッドレスポンス
・メソッドリクエストでは、認証設定や受け付けるクエリパラメータ、必須のHTTPヘッダ 等を設定する。
・統合リクエストでは、バックエンドの種別を選択する(Lambda関数、HTTP、その他AWSサービスなど)
・バージョニング、使用量プラン設定などの機能も存在。
API、ステージごとにデプロイを行う。
・前述したフローごとに設定を行う。

API GatewayとLambdaを組み合わせる

実施の概要

日本語の入力を英語に翻訳するAPIを作成する。

API GatewayとLambdaの組み合わせ覚え書き

・ハードコーディングから、API Gatewayのクエリパラメータのインプットから渡してくるようにする。
API Gatewayからの入力をLambdaに渡すためにqueryStringParametersを編集。

・ステージにデプロイしていないと、「{"message":"Missing Authentication Token"}」が出力された。

詰まったポイント

API呼び出しをするためのURLを指定した際、「Internal server error」が発生。
原因は、「URLクエリ文字列パラメータ」の誤字だった。
詰まったところ大抵誤字。
ただ誤字で詰まると、「どこをミスるとどこで支障がでるか」がわかるので、悪くない。笑

f:id:lin2734:20210124172256p:plain

f:id:lin2734:20210124172238p:plain

f:id:lin2734:20210124172359p:plain

DynamoDBを使ってAPIを進化

DynamoDB覚え書き

・キーバリュー型のNoSQLデータベース
・テーブル毎にスループットキャパシティを設定
・HTTPベースのAPIで操作する
・課金は〇〇ベース

別記事でまとめたいな。DynamoDBの覚え書き。

DynamoDBハンズオン

・キャパシティユニットを利用度合いに応じて増減したいなら、テーブル作成時「読み込み/書き込みキャパシティ-モード」をオンデマンドにする。
・「保管時の暗号化」では、本番利用するならKMS使った方がよい?
Pythonで日時を取るには「import datetime」

API Gatewayエンドポイントから文字入力
 →結果をLambda

 


用語メモ

・2種類のプライマリーキー
 -パーティションキー
 -パーティションキー+ソートキー
・ローカルセカンダリインデックス(LSI)、グローバルセカンダリインデックス(GSI)
・キャパシティユニット

用語

・パススルー
・Lambdaプロキシ統合
 →レスポンスの変換できなくなる

その他

・サービスの一言説明、風情がある。
 →Lambdaは「サーバーのことを考えずにコードを実行する」

感想と今後学んでいくこと

サーバーレス構成を組むための基礎サービスを諸々触れてよかった。
これまでは机上の知識しかなかったので、使用感をつかめたことは大きかった。
今後は、別のアーキテクチャにもチャレンジしてみたい。

JAWS-UG千葉支部イベントに参加しました!

はじめに

JAWS-UG千葉支部オンライン#9 AWS re:Invent 2020 re:Cap&LT大会」に参加しました!

 

内容は以下の通り。

f:id:lin2734:20210122184238p:plain

 

①re:Invent2020振り返り〜はじめてのre:Invent〜

榎本さんの発表。

業務関係で聞き逃しました。(すみません...)

②re:Invent2020と大好きなWorkSpacesについて

北原雅人さんセッション。

好きなAWSサービスはWorkSpacesとのこと。

WorkSpacesのGAされた新機能について

f:id:lin2734:20210122193631p:plain

f:id:lin2734:20210122194142p:plain

f:id:lin2734:20210122194323p:plain

「WSPのリリース」がビックニュースらしいです!

「PC over IP(PCoIP)」が旧来のVDIにおいて利用されていたプロトコル
今回、WSPがPCoIPに代わって登場したプロトコル
現状サポートしているクライアントはWindows10の意。
WSPではカメラが使えるようになったことで、本格的に仕事ができるレベルに。
似たようなことができるVDI製品としては、VMwareの製品とのこと。

AWS Protonをさわってみよう

Proton完全に初耳。
Dev/Opsをまわすための〇〇
概要とメリット説明の後、コンソール画面も見せてくれて非常にわかりやすかった。
が前提知識不足もあり、真に理解できたとは思えない。
CloudFormationやCodeFamilyを組み合わせてCI/CDを自動で回せるサービス、ということらしい。

AWS re:invent 2020 振り返り-AWS Lambdaのアップデートを中心に-

Macインスタンスは、データセンターにMac miniを並べているらしい。笑
ECSとEKS
「コンテナそんなに詳しくない勢」とのこと。私もです。(おそらくもっと)
ラズパイでもEC2のタスクを動かせるとのこと。
あとはみんな話題にするCloudShell。
「ハンズオンとかCloudShell上でできそう」
→確かに。自分でも使い道思いつきたいなー

サーバレスのアップデート多めだったそう。
「サーバレスはまだ自分には早いかな」という考えであまり手を出せてないですが、そんなこといってると一生始まらなそうなので、触ってみようと今日誓いました。
これ読みます。

サーバーレスの勉強方法を聞いてみた。- builders.flash☆ - 変化を求めるデベロッパーを応援するウェブマガジン | AWS


Now Go Build!

⑤その他

当然ですが、みなさんラスベガス行きたがっていた笑
まだ未熟者ですが、自分も来年行けるよう日々を過ごしていきたいところ。。
英語も勉強しないとですね。
2020年から所属企業のAWS担当、2020年11月から千葉県民になったので、2021年はJAWS-UG千葉関わっていきたいと思います!

 

おわりです。

パケットの送受信について

内容

パケットの送受信時に関する覚書

ネットワーク上におけるデータ送受信の動作について知ることが、ネットワーク全体を俯瞰するためには必要だと思う。おそらく。

 

詳細

データの単位

各種プロトコルが処理するデータの単位をPDU(Protcol Data Unit)と呼ぶ。

主なものとして、IPではパケット、TCPではセグメント、イーサネットではフレームという単位を使う。

その他にも、UDP等データの不達を許容するものだと、データグラムという単位が使われたりする。

 

データサイズについて

ネットワークを通してデータのやり取りをする際に、「データを分割するかどうか」が判断される。

その時の判断材料として、MSS/MTUという情報がある。

MSSはMaximum Segment Sizeの略で、TCPが一度に送受信できるデータ(セグメント)のサイズを表す。

MTUはMaximum Transmission Unitの略で、ネットワークハードウェアが一度に送受信できるデータサイズを表す。

MTUはMSS+TCPヘッダ+IPヘッダの合計で、MTU>MSSの大小関係である。

 

接続先コンピュータとお互いの情報を確認して、小さいほうが採用される。

 

参考書籍

ネットワークがよくわかる教科書