ELBのConnection Drainingとは?

SAA勉強中の備忘録。 ELBにある機能の一つであるConnection Drainingがピンとこなかったので。 Connection Drainingとは 登録解除された、もしくは異常のあるターゲットに対するリクエストを切断するまでの待機時間を設定する機能です。 1 - 3600秒(1時間)まで選択でき、デフォルトでは300秒になっています。 既存のリクエストを完了させ、待機時間中は新規リクエストを対象のターゲットには送らないようにすることで、唐突なリクエストの切断といった事象を防ぎます。 また、この機能はCLB特有の機能です。 ALB、NLBの場合は「Deregistration Delay」という機能がこれと同等の機能を有しています。 Application Load Balancer のターゲットグループ - Elastic Load Balancing 参考 ELB Connection Draining – Remove Instances From Service With Care | AWS News Blog

2023年7月24日 · にあえん

【EC2】オンデマンドキャパシティ予約について

SAA勉強の備忘録。 オンデマンドキャパシティ予約とは EC2インスタンスを起動するのに必要な領域を予約する機能です。 キャパシティ予約の作成 - Amazon Elastic Compute Cloud これをしないと、「InsufficientInstanceCapacity」というエラーでインスタンスが起動できないことがあるため、注意が必要です。 EC2 インスタンスで発生する InsufficientInstanceCapacity エラーを解決する | AWS re:Post また、セットで語られるのが多い機能として「リザーブドインスタンス」と「Saving Plans」があります。 ただしこの2つとオンデマンドキャパシティ予約を同様のものとしてはいけません。 「リザーブドインスタンス」「Saving Plans」は、1年もしくは3年という単位でコンピュータリソースを購入する際の割引プランというふうに思ってください。 また、かつてEC2には、スケジュールドリザーブドインスタンスというものがありました。 これは、予め指定した時間に起動できるEC2インスタンスを1年間継続的に使用するための機能です。 1年間インスタンスが使用可能になる分、オンデマンドより柔軟性はなくなりますが、その代わり割引しますよ、というものです。 Amazon EC2 の請求および購入オプション - Amazon Elastic Compute Cloud ただし、現在は使用できなくなっています。 リザーブドインスタンスとは オンデマンドインスタンスと比較して、割引を適用できる機能です。 Amazon EC2 のリザーブドインスタンスの概要 - Amazon Elastic Compute Cloud リザーブドインスタンスの適用範囲として、以下の2種類があります。 リージョンリザーブドインスタンス リージョン内で1年または3年単位のコミットメントが必要で、長いほど割引率が高い キャパシティ予約なし 指定リージョンのすべてのAZで割引が適用される ゾーンリザーブドインスタンス AZ内で1年または3年単位のコミットメントが必要で、長いほど割引率が高い キャパシティ予約あり また、リザーブドインスタンスには「スタンダード」クラスと「コンバーティブル」クラスが存在します。 これらは提供クラスと呼ばれ、コンバーティブルの場合は購入後でも「インスタンスファミリー、インスタンスタイプ、OS、テナンシー」の要素を変更可能になります。 リージョンリザーブドインスタンスの購入画面 ゾーンリザーブドインスタンスの購入画面 購入画面を見るとわかりますが、やはりコンバーティブルのほうが高いです。 Saving Plansとは こちらも同じく、コンピュータリソースの予約をすることで割引してくれる機能です。 クラウドコストの削減 – Savings Plans – Amazon Web Services ...

2023年7月23日 · にあえん

pythonでmarkdownをplain textに変換し、ginzaで文章を文ごとにリスト化する

markdownをplain textにしたうえで、その文章をginzaでリスト化しました。 必要なライブラリをインストールします。 pip install Markdown beautifulsoup4 ginza ja-ginza 以下のような実装を行いました。 from bs4 import BeautifulSoup from markdown import markdown import re import spacy def markdown_to_text(markdown_string): """マークダウンを平文に変換します""" # md -> html -> text since BeautifulSoup can extract text cleanly html = markdown(markdown_string) # remove code snippets html = re.sub(r'<pre>(.*?)</pre>', ' ', html) html = re.sub(r'<code>(.*?)</code >', ' ', html) # extract text soup = BeautifulSoup(html, "html.parser") text = ''.join(soup.find_all(string=True)).replace("\n", " ") return text def split_sentences(text): nlp = spacy.load('ja_ginza') doc = nlp(text) sentences = [sent.text for sent in doc.sents] return sentences if __name__ == "__main__": markdown_string = """# タイトル ## サブタイトル これは段落です。 これは別の段落です。 """ text = markdown_to_text(markdown_string) print(text) sentences = split_sentences(text) print(sentences) 出力は以下のとおりです。 ...

2023年7月19日 · にあえん

hugoのショートコードで目次を生成した〜〜〜い

一部の記事がかなりの分量になってしまい、目次が設定したかったので設定したときの備忘録。 どうやるか まず、目次に関するテンプレートは公式で既に用意されていました。 TableOfContents なるほど、{{ .TableOfContents }}で参照すればいいみたいです。 なので、めちゃくちゃシンプルに目次を表示したいだけだった僕は以下のようなショートコードを実装しました。 {{ .TableOfContents }} この実装をtoc.htmlとして保存し、マークダウンからショートコードで参照してみましたが、hugo serveするとエラーが発生しました。 Rebuild failed: executing "shortcodes/toc.html" at <.TableOfContents>: can't evaluate field TableOfContents in type *hugolib.ShortcodeWithPage 調べてみたら、どうやらショートコードからは{{ .Page.TableOfContents }}と参照するのが正しい模様。 Hugoでドキュメント作るときに手っ取り早く痒いところに手が届くようになるTips #Hugo - Qiita 修正したら使用できるようになりました。 .Pageをつけなければいけない理由がいまいちよくわからないまま終わってしまったので、もし分かる人がいればコメントお願いします。。

2023年7月15日 · にあえん

hugoのショートコード(shortcode)でリンク先のタイトルを自動取得する

このブログはhugoを使って作成しています。 Hugoの何がいいかと言われれば、一番は静的なので軽いってところです。 ReactやVueでちょっとSPA作ろうとすると、すぐもっさりした動作になっちゃう&コンポーネント管理が大変なので、僕にはHugoが結構刺さっています。 (まぁコンポーネント管理に関してはアトミックデザインで作ろうとした僕の自業自得なんですが。。) Hugoをいろいろいじりつつ、最近の記事でも早速Hugoを活用してSEO対策などを行っていました。 その中で、ShortCodeという機能がプログラマーの僕としてはワクワクが止まらない機能だったので、ちょっと作りたいものもあったのでついでに使いつつここで紹介します。 ShortCodeとは markdownファイルから、関数などを組み込んだテンプレートHTMLを呼び出せる機能です。 デフォルトでは以下のようなshortcodeが用意されています。(詳細はこちら) figure gist highlight param ref (relref) instagram tweet vimeo youtube youtubeを表示したい場合、shortcodeを使って動画のIDを引数として渡してあげれば簡単に実装できます。 {{< youtube w7Ft2ymGmfc >}} これ以外にも自分でshortcodeを作成して、組み込むことも可能です。 shortcodeで使われる構文はGo Templateというみたいです。 参考: Go Template、最高のプログラミング言語 #go-template - Qiita URLからタイトルを取得したaタグを生成するshortcode では本題です。 (前提として、Hugoのサイトはすでに用意してあるものとします。) まずはshortcodeの実装のためのディレクトリとHTMLファイルを準備します。 mkdir layouts/shortcodes touch layouts/shortcodes/url_title.html ファイルの準備ができたら、以下のようなコードを実装します。 resources.GetRemoteを使用してリンク先のコンテンツを取得し、titleタグと組み合わせてaタグを生成するshortcodeです。 早速使ってみましょう。 ...

2023年7月11日 · にあえん

Direct ConnectをAWS初心者が理解するまで

まだ「完全に理解した」みたいな状態で書いていないので悪しからず。。 (理解したとは言っていない) もし間違っている部分あればコメントして頂けると嬉しいです。 とは Direct Connect - AWS Direct Connect 目次 目次 構築手順 1. Direct Connectを使用するためのConnectionを作成する 2. 仮想プライベートゲートウェイを作成する ASN(自律システム番号)とは BGP(ボーダーゲートウェイプロトコル)とは 3. 仮想インターフェースを作成する VLAN(仮想ローカルエリア・ネットワーク)とは オンプレミスサーバーのASN 仮想インターフェース作成時のその他入力項目 4. ルートテーブルに作成した仮想プライベートゲートウェイを設定する 5. セキュリティグループにDirect Connectで使用するIPを設定する 感想 参考 構築手順 なにはともあれ、実際にどうやって構築するのか見てみます。 このブログに丁寧にまとめられていました。 やさしいDirect Connect の構築 | Oji-Cloud この手順をまとめると、以下のようになります。 Direct Connectを使用するためのConnectionを作成する 仮想プライベートゲートウェイを作成する 仮想インターフェースを作成する ルートテーブルに作成した仮想プライベートゲートウェイを設定する セキュリティグループにDirect Connectで使用するIPを設定する 公式に乗っているフローはこんな感じ。 AWS Direct Connectとオンプレネットワークがどのように連結されるかを大まかに表した図 それぞれの手順にポイントがあります。 1. Direct Connectを使用するためのConnectionを作成する コネクションの作成方法として、「専用接続」と「ホスト型接続」の2種類があります。 AWS Direct Connectとは?基本を解説!メリット・デメリットから利用方法まで|ブログ|アイテック阪急阪神ITインフラ・クラウドソリューション それぞれ以下のような特徴があります。 専用接続 専用の物理回線を引く 複数のVPCを使用する場合、料金コストはこちらのほうがよい ホスト型接続 一つの物理回線をシェアする 一つのVPCであればこちらのほうが料金コストはよい また、契約方法も2種類存在します。 ...

2023年7月11日 · にあえん

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を仕込んでみました。 https://gohugo.io/about/hugo-and-gdpr/#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日 · にあえん