ELBのクロスゾーン負荷分散とは

SAAの問題で、ELB(Elastic Load Balancer)についての問題に躓いた。 そのため備忘録として残しておきます。 クロスゾーン負荷分散とは 複数のAZにまたがってサーバーが存在する場合に、すべてのサーバーに均等にリクエストを振り分ける機能です。 以下の図はクロスゾーン負荷分散が無効の場合のアーキテクチャです。 「Availability Zone A」には2つのサーバーがあり、それぞれに25%ずつリクエストの振り分けが行われます。 一方で「Availability Zone B」のサーバーは8つもあり、各サーバーは6.25%しかリクエストが振り分けられていません。 サーバーは合計して10個ありますが、均等にリクエストが振り分けられていないような状態になっています。 ここで、クロスゾーン負荷分散を有効にしてみます。 すると、AZ関係なくすべてのサーバーに10%ずつリクエストが振り分けられるようになりました。 これがクロスゾーン負荷分散の仕組みです。 どういう問題だった? 複数のAZにまたがって複数のEC2インスタンスを起動していて、ELBを使用してどうやって均等にリクエストを割り振るかといった問題でした。 クロスゾーン負荷分散という機能を知らず、選択肢の中にRoute53の加重ルーティングを使用するというものがあり、それを選択してしまいました。。悔しい〜 参考 Elastic Load Balancing の仕組み

2023年7月11日 · にあえん

HugoでGoogleAnalyticsを実装してもユーザーとしてカウントされなかった原因がBraveのせいだった

当ブログにもGoogleAnalyticsを仕込んでみたんですが、その際に「設定したのに反映されていない!なんで!?」みたいなことがあったので。 公式に参考ページがあったので、これをもとにGoogleAnalyticsを仕込んでみました。 ただ、設定したうえでこのブログにアクセスしてみても、閲覧数がカウントされませんでした。 まじかーと思っていろいろ調べてみたんですが、ふとブラウザのDevToolから開いてみると… GoogleAnalyticsのコードが別のものに差し替わっている 謎の「uBlock Origin」というブラウザ拡張機能が実装したコードになっています。 更に調べていくと、私の使用しているブラウザが関係していることがわかりました。 使用しているブラウザがBraveなのですが、デフォルトでコードを置き換えるようになっていたようです。 サイト機能に影響を与えずトラッキングコードを置換 試しにFireFoxでアクセスしたら、ちゃんとユーザー数が反映されるようになりました。 GoogleAnalyticsから見たユーザー数 ブラウザのセキュリティが高いがゆえに起きた事象ですが、勉強になりました。 参考 Brave connects to googletagmanager.com · Issue #14027 · brave/brave-browser · GitHub このブログでは、GoogleAnalyticsに自分のアクセスを反映させない方法として紹介されています。なるほど。。 Googleアナリティクスで自分のアクセスを除外する方法 | sinpe-Blog

2023年7月11日 · にあえん

EBSボリュームの種類が多すぎる

まずは以下の表をご覧ください。 このIOPSの値とかが結構SAAで問題として出題されるんですが、これが難しい。。 Amazon EBS ボリュームの種類 どうしたもんかと思ったんですが、問題で出されるときはIOPSとスループットが最適なストレージはどれかというものが多いので、その2点に絞ってまとめていきます。 IOPSだけで考える IOPSだけで考えると、その性能は以下のような順番に並べ変えられます。 io2 Block Express(256,000) »» io2 == io1 (64,000) »» gp3 == gp2 (16,000) »» st1 (500) »» sc1 (250) なんかどんどんインフレしていますね。 (ドラゴンボールの戦闘力?) スループットだけで考える 同じように、スループットも並べ替えてみます。 io2 Block Express(4,000 MiB/秒) »» gp3 == io2 == io1 (1,000 MiB/秒) »» st1 (500 MiB/秒) »» gp2 == sc1 (250 MiB/秒) 面白いことに、gp2(旧世代の汎用SSD)とsc1(コールドストレージ)のスループットが同じという結果になりました。 そもそもIOPSとスループットってなんだっけ? ここまでやっていて、そもそもの言葉の定義を忘れてしまったので再度まとめておきます。 IOPS(Input/Output Per Second):1秒あたりにディスクが処理できるI/Oアクセス数のこと スループット:単位時間(上記の場合は秒)あたりに処理できるデータ量のこと スループット とは ストレージのIOPS性能がアプリケーションに与える重要性 まとめ 基本的な概念のはずなんですが、ちょっと離れるとすぐ忘れちゃいますね。。 気をつけねば。。

2023年7月11日 · にあえん

EC2やECSでDNS名を取得できない場合の対処法

SAAの問題で間違えたため備忘録。 EC2でインスタンス生成をした際、DNS名が割り振られないことがあります。 その場合、マネジメントコンソールのVPCの設定から、以下の設定がされているか確認してください。 DNS解決を有効化が「true」 DNSホスト名を有効化が「true」 ただこの値、基本的にはどちらもtrueがデフォルトなので、何らかの意図があって編集していないと変更されません。 もしも変更されている場合は確認したほうが良いかもしれません。

2023年7月11日 · にあえん

Hugoでかんたんpermalinks作成

SEO対策として、一応このブログにもパーマリンクを仕込むか〜〜〜となったときの備忘録。 ただ僕はそもそもパーマリンク自体あんまり良くわかってなかったので、そこから調べました。 そもそもパーマリンクって? SEO対策の一環として、ページに振られるURLを固有のものにすることです。 パーマリンクとは?SEOへの影響や注意点について解説 hugoの場合、デフォルト設定のままだと、タイトルとかディレクトリ構造をリファクタリングするとページURLも変わっちゃうので、せっかく検索して上位に来てもURLが変わっちゃったら全部台無しになっちゃいます。 それを防ぐためのパーマリンクです。 Hugoでパーマリンクは設定できる? 結論から言えば、公式でパーマリンクを生成する方法はありません。 前述の通り、Hugoが生成するページリンクは記事タイトルやディレクトリ構成に影響するため、後にタイトルを変えるといったケースがある場合にはそれに対応できません。 逆に言えば、そういった変更を今後一切行わないのであれば別にデフォルト設定のままでも十分ということになります。 なので、ここではhugoのテンプレート構文を利用してIDを生成する関数を実装します。 単純にランダムに英数字を並べかるだけでは味気ないので、せっかくなので現在時刻を元にしたmd5ハッシュを使ってID生成します。 archetypes/default.mdを開いて、以下のような実装を追記します。 --- title: "{{ replace .Name "-" " " }}" slug: "{{ template "permanentId" }}" date: {{ .Date }} draft: true --- {{ define "permanentId" -}} {{ md5 now.Unix }} {{- end -}} ハッシュ値はslugに設定しました。 次に、config.tomlからブログのパスにslugを参照するように設定します。 [permalinks] posts = "/:slug/" (postsの部分はcontentの名前によって変えてください) これであとはhugo newで記事を作ると、slugにハッシュ値が設定されるようになり、結果としてURLが時刻を元にしたmd5ハッシュ値になっています。 感想 Hugoおもしろい 参考 Hugoのテンプレート構文「template」「partial」「block」「define」のわかりやすい解説 Hugo でサイト構造を変えてもページの URL が変わらないようにする (Permalink) Hugo テンプレート内で define による部分テンプレート定義を行う(関数もどき) Hugo の URL をカスタマイズする

2023年7月9日 · にあえん

【Ubuntu】スクリーンショットのファイル名フォーマットを変更する方法

ブログの中でスクショを乗せることがあるんですが、Ubuntuの標準アプリで撮ったスクリーンショットのファイル名が、デフォルトだと空白文字を含んだ状態で保存されてしまいます。 これをブログに載せようと思ったら、空白文字をいちいちURLエンコードしないといけないことに気づいてしまいました。 そこで、あれこれやって空白文字をアンダースコアに置き換えて保存する方法を見つけたので共有します。 どうやったか まず標準アプリでフォーマットを指定できるか調べてみましたが、これはどうやらできないみたいです。 (設定項目に名前のフォーマットを指定するプロパティがありませんでした。) dconfエディターで確認した様子 そこで、しょうがないのでスクリーンショットが保存されるディレクトリを監視して、ファイルが作成されたらファイル名を空白文字からアンダースコアに書き換えるshを実装しました。 (ちなみに、shの実装は全部ChatGPTにおまかせしちゃいました。) 監視のためのサービスはsystemdに登録し、再起動してもちゃんと動いてくれるようにしました。 実装手順 まずはディレクトリ監視に必要なライブラリをインストールしておきます。 sudo apt install inotify-tools インストールできたら、スクリーンショットの保存先ディレクトリを監視してファイル名を置き換えるshを実装します。 以下が作成したshファイルです。 #!/bin/bash ### BEGIN INIT INFO # Provides: screenshot_monitor # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Screenshot Monitor # Description: Monitors directory for new screenshots and performs actions ### END INIT INFO # スクリーンショットの保存先ディレクトリ screenshot_dir="/home/[username]/Pictures/スクリーンショット" # 監視対象のイベントを指定してinotifywaitを実行し、新しいファイルが追加された場合にスクリプトを実行する inotifywait -m -e create -e moved_to "$screenshot_dir" | while read -r directory event filename; do # スペースをアンダースコアに置換 new_filename=${filename// /_} new_filepath="$screenshot_dir/$new_filename" # ファイル名の変更 mv "$directory$filename" "$new_filepath" done ([username]の部分は自身のユーザー名に置き換えてください) ...

2023年7月8日 · にあえん

(AWSの)SCP Is 何?

SAAの試験勉強で間違えた問題がSCPについての問題だったので少しまとめました。 SCPとは SCP(サービスコントロールポリシー)は、AWS Organizationsにおける組織のアクセス制御に関する設定のことです。 一人のIAMユーザーがある組織に属していたとした場合で考えてみます。 そのIAMユーザーにはIAMポリシーとして「EC2」「RDS」「S3」へのフルアクセス権限が振られていたとします。 しかし、このIAMユーザーの所属する組織のSCPでは「EC2」「ECS」「CloudWatch」のフルアクセス権限が振られています。 この場合どうなるかというと、「EC2」へのフルアクセスのみ可能になります。 ベン図にするとわかりやすいです。 このような形で権限の制御は行われるので、アクセス制御の設計を行う際は気をつけねば。。

2023年7月8日 · にあえん

NATゲートウェイの置き方とプライベートサブネットへの適用方法について

NATゲートウェイってどこに設置するんだっけ…?となったので。 NAT ゲートウェイを設定してみる - EC2 NATゲートウェイとは プライベートサブネットに配置されたリソースがインターネットに安全にアクセスするための方法です。 NATゲートウェイを設置することで、リソースは直接インターネットに晒されることなく安全に更新データなどのリクエストが可能になります。 使い方 まずNATゲートウェイはパブリックサブネットに設置します。 次に、プライベートサブネットのルートテーブルに、設置されたNATゲートウェイへのルートを追加します。 これでプライベートサブネットはNATゲートウェイを通じてインターネットにリクエストすることができるようになります。 NATゲートウェイだけでインターネットアクセスができる? 踏み台となるサーバーがなければできません。 インターネットにアクセスするまでのフローはこんな感じです。

2023年7月8日 · にあえん

aptからVSCodeを更新する

普通にやってればsudo apt install codeで更新できるみたいなんですが、僕の環境ではうまくできなかったので更新した際の備忘録として書いときます。 結論として、以下のコマンドで公式からダウンロードしてaptでインストールできます。 wget --trust-server-names=on "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64" && \ ls -d ./* | grep "code_" | xargs sudo apt install ダウンロード先のURLは、debianに対応したバージョンのVSCodeになっています。 (もしも違うOSを使用している場合はこのURLの部分を変えてください。) wgetの--trust-server-namesオプションを使用してあげると、リダイレクト先のファイル名を使用してダウンロードしてくれます。 ダウンロードしたファイル名はcode_から始まっているため、その名前でgrepしてapt installに渡してあげています。 これでインストールできます。 参考 VSCodeの公式ページ LinuxにVisual Studio Codeをインストールする SourceForgeからwgetする時正しいファイル名で保存する

2023年7月8日 · にあえん

apt updateが「以下の署名が無効です」で失敗した

aptでVSCodeをアップデートしようとしたら以下のようなエラーが出力されました。 % sudo apt update ヒット:1 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy InRelease ヒット:2 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy-updates InRelease ヒット:3 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy-backports InRelease ヒット:4 https://cli.github.com/packages stable InRelease ヒット:5 http://ftp.jaist.ac.jp/pub/Linux/ubuntu jammy-security InRelease 取得:6 https://apt.releases.hashicorp.com jammy InRelease [12.9 kB] ヒット:7 https://brave-browser-apt-release.s3.brave.com stable InRelease 取得:8 https://dl.k6.io/deb stable InRelease [4,149 B] エラー:6 https://apt.releases.hashicorp.com jammy InRelease 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY AA16FCBCA621E701 エラー:8 https://dl.k6.io/deb stable InRelease 以下の署名が無効です: EXPKEYSIG C780D0BDB1A69C86 k6.io (key for signing binaries) <security@k6.io> ヒット:9 https://ppa.launchpadcontent.net/cartes/drawing/ubuntu jammy InRelease ヒット:10 https://ppa.launchpadcontent.net/jonmagon/kdiskmark/ubuntu jammy InRelease 17.0 kB を 3秒 で取得しました (6,203 B/s) パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています... 完了 状態情報を読み取っています... 完了 アップグレードできるパッケージが 4 個あります。表示するには 'apt list --upgradable' を実行してください。 W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://apt.releases.hashicorp.com jammy InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY AA16FCBCA621E701 W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://dl.k6.io/deb stable InRelease: 以下の署名が無効です: EXPKEYSIG C780D0BDB1A69C86 k6.io (key for signing binaries) <security@k6.io> W: https://apt.releases.hashicorp.com/dists/jammy/InRelease の取得に失敗しました 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY AA16FCBCA621E701 W: https://dl.k6.io/deb/dists/stable/InRelease の取得に失敗しました 以下の署名が無効です: EXPKEYSIG C780D0BDB1A69C86 k6.io (key for signing binaries) <security@k6.io> W: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。 インストールしているK6とTerraformに関連したリポジトリの更新に失敗しています。 ...

2023年7月8日 · にあえん