fluid_27’s blog

勉強した内容をアウトプットするためのブログ

AWS Cognitoとは

SAAに向けた勉強で、ザックリと概念や機能を知りたかったので、まとめてみました。

 

 

Cognito (コグニート)とは

ウェブアプリケーションやモバイルアプリケーションの認証、許可、ユーザー管理に対応しています。ユーザーは、ユーザー名とパスワードを使用して直接サインインするか、FacebookAmazonGoogleApple などのサードパーティーを通じてサインインできます。                        

Amazon Cognito とは - Amazon Cognito

 

つまり、ウェブアプリケーションおよびモバイルアプリに素早く簡単にユーザーのサインアップ/サインイン、アクセスコントロールの機能を追加できるサービスということみたいです。

 

Cognitoの2つのコンポーネント 

  • ユーザープール
  • IDプール

 

ユーザープール

アプリユーザーのサインアップとサインインオプションを提供するユーザーディレクトリです。

 

ID プール

AWS の他のサービスに対するアクセスをユーザーに許可します。ID プールとユーザープールは別々に使用することも、一緒に使用することもできます。

 

基本的に上記2つのコンポーネントで構成されているみたいです。

 

 

ユースシナリオ

パターンA: ユーザーを認証し、AWS の他のサービスに対するアクセスをユーザーに許可する。という場合

  1. ユーザーはユーザープールを介してサインインする。認証が成功するとユーザープールトークンを受け取る。

  2. ID プールを使用して AWS 認証情報のユーザープールトークンを交換する。

  3. ユーザーはこれらの AWS 認証情報を使用して Amazon S3 や DynamoDB などの他の AWS サービスにアクセスできるようになる。

f:id:fluid_27:20210623015607p:plain

こうして、流れをみてみると結構シンプルですね。

サインインして、ユーザープールトークンを受け取り→ IDプールでユーザートークンと交換する。そのユーザートークンでAWSリソースにアクセスできるようになる。

という流れですね。

 

他のユースシナリオに関しても公式ドキュメントで説明されてます。

docs.aws.amazon.com

 

 

それぞれのコンポーネントの機能

また、それぞれの機能・サポートするプロバイターは以下の通りです。

 

ユーザープール
  • サインアップおよびサインインサービス。

  • ユーザーがサインインするための組み込みのカスタマイズ可能なウェブ UI。

  • FacebookGoogle でのソーシャルサインイン、Login with AmazonSign in with Apple、ユーザープールからの SAML および OIDC ID プロバイダー経由のサインイン。

  • ユーザーディレクトリとユーザープロファイルの管理。

  • 多要素認証 (MFA) などのセキュリティ機能、漏洩した認証情報のチェック、アカウントの乗っ取り保護、電話と E メールによる検証。

  • カスタマイズされたワークフローと AWS Lambda トリガーによるユーザー移行

 

IDプール
  • Amazon Cognito ユーザープール

  • FacebookGoogle でのソーシャルサインイン、Login with AmazonSign in with Apple

  • OpenID Connect (OIDC) プロバイダ

  • SAML ID プロバイダー

  • 開発者が認証した ID

 

 

Cognitoの特徴

世界中のリージョンで利用可能であり、各リージョンで複数AZに分散されています。

また、低レイテンシーで高スループットの冗長性に優れたプライベートネットワーク接続で統合されています。

使用できるリージョンについては下記で参照してください。

docs.aws.amazon.com

 

 

用語

SAMLとは

SAMLとは、Security Assertion Markup Languageの略称であり、OASISによって策定された異なるインターネットドメイン間でユーザー認証を行うための XML をベースにした標準規格です。AWS STSはSAML2.0などのオープンスタンダードをサポートしています。シングルサインオンを実現という要件からはSAML2.0を利用することが求められる

OPNE IDもサポートしていますが、これはSNSを利用したソーシャルログインを実現するための規格です。

  

シングルサインオンとは

シングルサインオン(SSO)とは、1組のID・パスワードによる認証を1度行うだけで、複数のWebサービスクラウドサービス・アプリケーションにログインできるようにする仕組み。

 

参考記事 

https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/what-is-amazon-cognito.html

https://www.acrovision.jp/service/aws/?p=2568

Route53のレコードの種類をザックリまとめる

AWSのroute53ついてまとめていこうと思います。

詳細な機能などは割愛し、あくまでSAA対策として代表的なレコードのまとめです。

 

 

route53とは

AWS Route 53 は、ドメイン名を数値の IP アドレスに変換する、信頼性とコスト効率の高いマネージド型クラウドベースのドメインネームシステム (DNS) ウェブサービスです。

 

DNSとは Domain Name System の略で、ドメイン名(www.yahoo.co.jpとか)をIPアドレス(192.168.0.1 とか)に変換してくれるシステムのこと。

 

 

Aレコード(Adressレコード)

ドメイン名からIPアドレスに変換するレコード。

 

 

MXレコード(Mail Exchange)

メールサーバーのホスト名を記載するレコード。

 

 

CNAMEレコード(Canonical NAMEレコード)

ドメインを別のドメインに置き換えるレコード。ドメインを別のドメインに転送する場合に使用する。

 

何のために使うんだ?と思いますが、主にwwwのありなしで同じIPアドレスに繋ぎたい時などに使用するみたいです。(例えばyahoo.co.jpとwww.yahoo.co.jpを同じIPアドレスに繋ぐ。みたいに )

 

 

TXTレコード(テキストレコード)

テキスト情報を記載するレコード。

よく使われる要素としては送信ドメイン認証の認証情報(SPFレコード)などに使われる。

それ以外にもドメインの所有者であることを明示するために特定の文字列を記載するといった使い方もある。

 

 

 

Aliasレコードについて

上記のレコードと並列で紹介するのは違うかもしれませんが、個人的に「?」と思うことがあったので、載せておこうと思います。

Aliasレコードとは

Amazon Route 53 エイリアスレコードは、DNS 機能のRoute 53–特定の拡張機能を提供します。エイリアスレコードを使用すると、選択した AWS リソース (CloudFront ディストリビューションAmazon S3 バケットなど) にトラフィックをルーティングできます。また、エイリアスレコードにより、ホストゾーン内のあるレコードから別のレコードにトラフィックをルーティングできます。

 

ホストゾーンとは

ホストゾーンはレコードのコンテナであり、レコードには example.com やそのサブドメイン (acme.example.com や zenith.example.com) の特定のドメイントラフィックをどのようにルーティングするかに関する情報を保持します。ホストゾーンの名前と対応するドメインの名前は同じです。

 

ザックリ言うと、Aliasレコードとは「CloudFrontやロードバランサーなどAWSのリソースとIPアドレスを紐づけてくれるもの。」と言えるみたいです。

 

 

参考サイト

https://hp-shizuoka.jp/column/2016/10/7515/

https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html

https://www.acrovision.jp/service/aws/?p=2298

ステートレスとステートフル

「ステートレス」と「ステートフル」、IT関係の勉強で必ず、一度は調べたり勉強することがあると思います。

自分自身の知識の定着のため、改めてまとめてみたいと思います。

 

 

ステートレス

状況によらず、あるリクエストをしたら必ず同じ結果になるもの。

システムが現在の状態を表すデータなどを保持せず、入力の内容によってのみ出力が決定される方式。同じ入力に対する出力は常に同じになる。

 

 

ステートフル

状況によって、あるリクエストをしたらレスポンスが変わるもの。

システムが現在の状態を表すデータなどを保持しており、その内容を処理に反映させる方式。同じ入力に対する出力が常に同じとは限らず、内部の状態次第で変わることがある。

 

 

参考サイト

ステートフル(stateful)とは - IT用語辞典 e-Words

【初心者向け】ステートフル(Stateful)とステートレス(Stateless)の違い,IPv6やAWSでの考え方 | SEの道標

クラウドにおけるサービスモデルSaaS、PaaS、IaaSの違い

AWSなどを勉強する過程でサラッと「PaaS」や「SaaS」なども勉強したのですが、改めてPaaSとIaaSってどう違うんだっけ?となったので、調べてみました。

 

 

そもそもクラウドコンピューティングとは?

サーバー、ストレージ、アプリケーション、サービス等を全てクラウドに置くことで、サービスとして迅速・柔軟な提供を実現し、必要な時に必要なだけ利用することを可能とした形態のコンピューティング環境。

 

ザックリとそれぞれのサービスの違いの図解

f:id:fluid_27:20210620184744p:plain

https://ping-t.com/

 

SaaS  (Software as a Service)

ソフトウェアをサービスとして提供する。

ユーザーはインフラも開発環境も意識することなく、単純にソフトウェアを利用する、というサービスを受けることができる。

例えば、DropboxGmailなど。

 

PaaS  (Platform as a Service)

ソフトウェアの開発、実行環境をサービスとして提供する。

ユーザーは環境構築や保守に気を遣わずに、開発に専念できる。また、仮想化により、規模をあらかじめ把握できなくても柔軟に増減できるメリットがある。

例えば、HerokuやGoogle App EngineMicrosoft Azureなど。

 

IaaS  (Infrastructure as a Service)

サーバー、ストレージ、ネットワーク等、仮想化されたインフラ環境をサービスとして提供するサービスモデル。

HaaS(Hardware as a Service)と呼ばれることもある。

企業においては、例えば利用ユーザーの増加に合わせてサーバーを物理的に購入する必要なく、利用率に合わせたシステムの拡張が容易に行える。また、サーバーの負荷に合わせて回線やサーバーを増やしたりすることもできるなど、非常に柔軟な対応が可能。

例えば、Google Compute EngineやAmazon EC2など。

 

 

それぞれの使い方

ユーザーは「インスタンス」と呼ばれる仮想マシンを作成(プロビジョニング)する。インスタンスを作成する際は、スペック(メモリやCPUなど)やOSの種類などをブラウザなどの管理画面から設定するか、テンプレートを利用することができる。

 

OSやミドルウェアクラウドサービス側で提供されているものを利用し、ユーザーはその上で動作する環境を使用する。

 

 

つまり、SaaSとPaaSとIaaSの違いは

それぞれの大きな違いは提供されているサービスの内容。

サービスぼソフトウェアが提供されているのか(SaaS)、システム構築のための基盤を提供するのか(PaaS)、はたまた開発のためのインフラを提供するのか(Iaas)が異なる。

 

 

それぞれのサービスのちょっと細かい図解

f:id:fluid_27:20210620184811p:plain

 

参考サイト

このようなサービスモデルの違いについてまとめているサイトは多いので、ググればどこかしら分かりやすいサイトにヒットすると思います。
https://boxil.jp/mag/a852/?utm_source=google&utm_medium=cpc&utm_campaign=dsa-all&gclid=CjwKCAjwzruGBhBAEiwAUqMR8FrHXPuAkqNgpFYAWSA5zna5Gzac2QN081xXUCvUYl8iMJGEDUs_NxoCk-sQAvD_BwE

https://ping-t.com/

railsで日時のフォーマットにlメソッドを使ってみた

 

ポートフォリオのアプリでカレンダータイプの予約機能を実装していたのですが

、その際に日時を表すために

 

<%= user.created_at.strftime("%Y / %m / %d  %H : %M") %>

 

というように、strftimeを使って成形していました。

が、@jnchitoさんのqiitaでもっと便利な方法が紹介されていました。

https://qiita.com/jnchito/items/831654253fb8a958ec25

 

lメソッド

<%= l user.created_at %>

とするだけで、

config/locales/ja.yml に書かれているフォーマットを適用してくれるとのことです!便利!

 

逆にいうと、

lメソッドを使うためには

1. config.application.rb に

config.i18n.default_locale = :ja

 

と、

2. config/locales/ja.yml に

ja:

  time:

    formats:

      default: "%Y / %m / %d  %H: %M"

などと記述しておかないいけないみたいです。

 

上記のように設定しておくと、

<%= l user.created_at %>

2021/ 06/ 13  12:41

という感じで表示されます。

 

他のフォーマットも使えるように

ちなみに、config/locales/ja.yml に

ja:

  time:

    formats:

      default: "%Y / %m / %d  %H: %M"

      short: "%m/ %d  %H: %M"

などとしておけば、

 

<%= l user.created_at, format: :short %>

とすると

config/locales/ja.yml で設定した :shortの形式。

つまり、上記でいうと

2021/ 06  12:41

 というように表示されます。

 

めっちゃ便利!

 

詳しくは @jnchitoさんのqiitaをご参考ください。

https://qiita.com/jnchito/items/831654253fb8a958ec25

スループットとIOPSの違いって??

AWSを勉強していて

スループット」やら「IOPS」やらって、何がどう違うの?

と、気になったので調べてみました。

 

 

スループット

機器や通信路などの性能を表す特性の一つで、単位時間あたりに処理できる量のこと。 ITの分野では、コンピュータシステムが単位時間に実行できる処理の件数や、通信回線の単位時間あたりの実効伝送量などを意味することが多い。

 

 

IOPS

1秒当たりにディスクが処理できるI/Oアクセスの数のこと

1回のI/O処理にかかる時間は、データ転送時間と平均アクセス時間とを足した数値となる。 このI/O処理が1秒当たり何回実行できるかの数値がIOPS。

 

 

I/O処理

I/Oとは、Input/Outputの略で「入出力」を意味する。
コンピューターは情報を入力(input)し、計算結果を出力(output)するという処理を行なっているので、これらの処理を総称してI/Oと呼ぶ。 

 

 

つまり、スループットとIOPSの違いは?

それぞれの違い。というところにフォーカスすると、

IOPSとは「コンピュータの性能そのもの」をダイレクトに指している。

それに対し、スループットとは「コンピュータの性能やシステムから実現することができる能力」を示している。

と言えると思います(たぶん)。

 

 

調べた感想

それぞれの違いについては、直感的に理解できるサイトが見つからなかったので、自分なりに整理して、理解しました。

解釈に間違いがあったら修正していこうと思います。

 

「可用性」やら「信頼性」やら「耐久性」やらの違い

中々、SAA試験を受ける勇気が出ないプログラミング初学者です。

 

今回はSAAを勉強していて、「可用性」やら「信頼性」やら「耐久性」やらがAWSの説明に出てきて、結局それらってどう違うの?って思ったので、調べてみました。

 

 

信頼性(Reliability)

「障害の発生しにくさ」のこと。

1度故障が起きてから、次の故障が起きるまでの間隔、平均故障間隔(Mean Time Between Failures)」で表す

システムやサービスが使えなくなる頻度やその間隔を示す指標。

100時間稼働した後に故障し、1時間で復旧するシステムより

 1000時間稼働した後に故障し、100時間で復旧するシステムのが信頼性が高いと言える。(後者のが平均故障間隔が長いので)

 

 

可用性(Availability)

「システムやサービスが利用できる時間」のこと。

稼働率で表す。

100時間稼働した後に故障し、1時間後に復旧するシステムより、

 1000時間稼働した後に故障し、2時間後に復旧するシステムのが可溶性が高いと言える。(後者のが稼働率が高いので)

 

 

冗長性(Redundancy)

そもそも、

冗長化とは、システムの一部に何らかの障害が発生した場合に備えて、障害発生後でもシステム全体の機能を維持し続けられるように、予備装置を平常時からバックアップとして配置し運用しておくこと。

冗長化によって得られる安全性は冗長性と呼ばれる。

 

 

耐障害性(Fault Tolerance)

 AWSでは「障害発生時に機能制限なしで動き続けるための仕組み」のことらしい。

問題が起こったとしても自動で復旧し、100%のサービスを維持する仕組み。

問題が起こる前提で考え、単一障害店を排除する。

 

 

耐久性(Durability)

「データの失わない度合い」のこと。

トランザクションが完了したら、その結果は記録され、システム障害などが生じても失われることがないという性質。

(データ操作の時系列の記録(ログ)をストレージなどに保存しておき、データ記録中に障害などで中断したら記録を元に更新を反映させるといった処理が行われる。)

 

 調べてみた感想

調べてみると、けっこう似たようなことをまとめてくれているブログありました。

「可用性」などはAWSの勉強で度々出てくる単語ですが、馴染みのない単語でもあり、フワッと理解していたのですが、「可用性 = Availability」というように英語とセットで認識すると、その言葉の意味するものを理解しやすくなり、他の「信頼性」とかと区別つきやすいなぁ。と思いました。

また、気になったら都度調べていこうと思います。 

 

 参考サイト

https://sonnaka.com/210223-2/ 

https://xtech.nikkei.com/it/atcl/column/17/011900625/011900007/