Open54

AWSを勉強していく

winnie279winnie279

quicksight

BIダッシュボード。

QuickSight使うまでのフロー

Aurora -> Glue -> S3 -> Athena -> QuickSightとか。

winnie279winnie279

クラスター

タスクやサービスを束ねる論理的なグループ(?)
実行環境の境界
実行環境の境界

サービス

複数のタスクやロードバランサを組み合わせた概念。

タスク

稼働しているコンテナを指す。
タスク定義に基づき起動されるコンテナ群(?)
タスク内コンテナは同一ホスト上で実行される(?)

winnie279winnie279

Well-Architected Framework

アーキテクチャのベストプラクティス。
「Design for Failure」として単一障害点のない構成を考える。

Design principles(設計原則)

  • 必要なキャパシティを勘に頼らない
  • 本番規模でのシステムテストを行う。
  • アーキテクチャ試行の回数を増やすために自動化を取り入れる。
  • 発展的なアーキテクチャを受け入れる。
  • データ計測に基づいてアーキテクチャを決定する。
  • 本番で想定されるトラブルをあらかじめテストし、対策する

5本の柱

運用の優秀性

  • コードで運用する。
  • ドキュメントに注釈を付ける。
  • 定期的に、小規模な、元に戻すことができる変更を適用する。
  • 運用手順を定期的に改良する。
  • 障害を予測する。
  • 運用上のすべての失敗から学ぶ。

セキュリティ

  • 強力なアイデンティティ基盤を導入する。
  • 追跡可能性を有効にする。
  • すべてのレイヤーにセキュリティを適用する。
  • セキュリティのベストプラクティスを自動化する。
  • 転送中および保管時のデータを保護する。
  • 人をデータから遠ざける。
  • セキュリティイベントに備える。

信頼性

  • 復旧手順をテストする。
  • 障害からの復旧を自動化する。
  • システム全体の可用性を向上するために水平方向にスケールする。
  • キャパシティの判断を勘に頼らない。
  • オートメーションで変更を管理する。

パフォーマンス効率

  • 最新のテクノロジーを標準化する。
  • 数分で世界中にデプロイする。
  • サーバーレスアーキテクチャを使用する。
  • 実験の頻度を増やす。
  • システムを深く理解する。

コスト最適化

  • 消費モデルを導入する。
  • 全体的な効率を測定する。
  • クラウド財務管理を実装する。
  • 支出を分析し、帰属関係を明らかにする。
  • 総所有コストを低減させるためにマネージドサービスを使用する。

Global Infratructure

リージョンとアベイラビリティゾーン(AZ)

EC2やRDSなどが自動で切り替わる。切り替わりには30分くらいの時間がかかるらしい。

  • リージョンは複数のAZによって構成される。
  • AZは複数のデータセンター(DC)によって構成される。
  • 複数のAZを用いることで、高い耐障害性を提供できる(Multi-AZ構成)。

???
可用性の向上
スケールアップからスケールアウトへ
ステートレス
セッション情報やログをEC2?からRDSやCloudWatchに移す。
好きなときにEC2?を削除できる。

https://www.youtube.com/watch?t=2006&v=Kb7ZEBwqUAI&feature=youtu.be
https://www.youtube.com/watch?v=cD870G8uqhY

winnie279winnie279

Compute Services

ECS

クラウドでコンテナを本番利用するためのオーケストレータ。
EC2だとコンテナの管理が大変らしいからECSでいい感じにできる。
ECSでFargateをオーケストレーションできる。

Fargate

マネージド型のコンテナ実行基盤。

winnie279winnie279

Network Services

Elastic Load Balancing(ELB)

クラウドネットワークのロードバランサー。
見た目は1コンポーネントだが、裏ではMulti-AZ構成である。

Application Load Balancer(ALB)

HTTP・HTTPSを使うときに利用するのが一般的である。

Network Load Balancer(NLB)

TCP・UDPなどを使うときに利用するのが一般的である。

Classic Load Balancer(CLB)

旧世代のロードバランサー。

Route 53

DNSサービス。IPアドレスを返す。

CloudFront

CDNサービス。コンテンツを地理的に分散したサーバにキャッシュする。
配信の高速化・サーバへの負荷軽減が期待できる。

winnie279winnie279

Strage Services

Intelligent-Tiering

アクセス頻度が少ないデータを自動でアーカイブする。

暗号化

  • クライアントサイドで暗号化したデータをS3に保存する(クライアントサイド暗号化)。
  • AWSのサーバ側でデータを暗号化する(サーバーサイド暗号化)。

Elastic Block Store(EBS)

EC2にマウント可能なブロックストレージ(?)。

Elastic File System(EFS)

複数のインスタンスから同時にマウント可能なストレージ(?)。
EFSが1番理解しやすいと思う。
ツリー構造でファイルを管理する(Linuxのディレクトリと一緒)。

オブジェクトのなにがしか

Snowball Family

ハードウェアを配送することで、オンプレミスとクラウド間の大量のデータを移行する。

winnie279winnie279

Database Services

Relational DatabaseService(RDS)

MySQL・PostgreSQL・などが利用できる。
RDSではWriter・Reader を入れ替えることでフェイルオーバー(PrimaryとStandbyを切り替え)できる[1]
障害が起きてもアクセスするべきエンドポイントは変わらない。
自動でRDSが切り替わる。

Aurora

RDSの一部[2]。RDSを使用するときはまずAuroraを検討するのがベストプラクティスらしい。
用途別のエンドポイントを作成可能。
ストレージコストを増やすことなくコピーを作成可能。

Auroraを使うとどう良くなるのかはよく分からなかった。
MySQLやPostgreSQLはRDSで使えるが、AuroraではAWSが再構築した効率の良いMySQLやPostgreSQLを使えるとかそんなイメージ?

Multi-AZにおけるレプリカを使える?

リードレプリカ
読み込み専用のインスタンスを作成できる。
readによるDBコネクションのボトルネックを解消できる。
リードレプリカとstandbyの違いは?
リードレプリカはstandbyにはなり得らない?read専用?
リードレプリカとは別にstandbyにする必要がある?

DynamoDB

NoSQLサービス。

ECサイトの注文情報などでは、大量のデータが発生する。
書き込みが多いため、Write性能が求められる。

分散方式

  • 水平分散:同一テーブルを別々のDBに格納する。
  • 垂直分散:異なるテーブルを別々のDBに格納する。

ElastiCache

高速なインメモリデータベース。
キャッシュにデータがない場合のみ、RDSに問い合わせる。

脚注
  1. https://dev.classmethod.jp/articles/developers-io-2019-in-osaka-aurora-or-rds/ ↩︎

  2. https://lab.taf-jp.com/rdsのフェイルオーバー時の挙動を理解してみる/ ↩︎

winnie279winnie279

Analytics Services

レイクハウス(?)

Athena

標準SQLでS3のデータ分析を行うサービス。

QuickSight

BIサービス。ダッシュボードをWebサービスに組み込める。
メール配信もできる。

winnie279winnie279

Security Serices

責任共有モデル(?)

クロスアカウントアクセス

分からん。

Key Management Service(KMS)

フルマネージドの暗号鍵管理サービス。

winnie279winnie279

Other Services

SQS

分散メッセージキューのマネージドサービス。

CloudShell

マネジメントコンソールで利用できる、ブラウザベースのシェルを提供するサービス。

Cognito

認証サービス。Firebaseみたいなもの。

CodePipeline

CI/CDのサービス

Personalize

レコメンドサービス。

SageMaker

Personalizeと比較して広範な機械学習に使えそう。自由度が高そう。

EventBridge

cloneのようなもの。

Redshift

データウェアハウス専用のデータベースサービス(?)

winnie279winnie279

知見

  • その他

    • Cognito:認証。

    • CodePipline:CI/CD。

    • Personalize:レコメンド。

    • Athena:S3にSQLを投げれる。

    • Glue:DBからS3などにデータを加工して移行できる。ETL。

    • どのコンポーネントがコスト支配的なのか?

    • ベストプラクティスだとして、なぜそのアーキテクチャを取るのか?

  • AWS関係ないけど

    • アプリケーションに使うDBはそのまま分析には使わない。
    • アプリケーションのパフォーマンスに影響を与える可能性もあるし。

疑問

  • RDSでどのようにStandby・Read Replica・ElastiCacheを使い分けるのか?

    • 特にRead ReplicaとElastiCacheはアクセス数の増加に対しての策に思える。
  • インメモリキャッシュとは?

  • 外部APIを叩くときのsecurity group?

    • private subnetからインターネット経由で外部APIを叩きたい場合は、public subnetに配置したNAT Gateway経由で外部APIを叩くといった経路となります。
    • private subnet -> public subnet(NAT Gateway) -> インターネット経由で外部API
    • api gateとの違い?
    • NAT Gatewayってなんだっけ?
    • Fargateとかからpublic subnetのnat gateway通って(igw)通らずに直接外部API叩けるっぽい…?
  • バックアップ

    • 別リージョンにする必要があるのか?
    • 単一リージョンで運用するのがよくあるパターンではあるらしい
    • DBのバックアップはreplicaやstandbyで良いのか?
  • wafとセキュリティグループの違い?

  • サーバー側のキャッシュ?

  • インメモリデータストア?

  • eventbridge cloneぽいやつ

winnie279winnie279

Glue

概要

複数のソースからデータを検出、準備、移動、統合するためのサービス。

Data Catalog

AWS Glue Data Catalog は、すべてのデータ資産の構造および運用メタデータを保存するためのセントラルリポジトリです(?)

Crawlers

S3からData Catalogを作成する
カラム名とか型とかのスキーマが作成される。すごい。
S3にデータが入ったことをトリガーにもできる

パーティションインデックス?

パーティションってなに -> DB周りの用語
パーティション テーブルを区切る

パーティションインデックスを使ってDataCatalogを作るとパーティションカラムも作られるらしい
パーテションインデックスを使うとsqlとしてのqueryがだいぶ早くなるらしい

テーブル lab1_without_index_syncstreamingdata にパーティションインデックスがない場合、AWS Glue はテーブルのすべてのパーティションを読み込み、読みこんだパーティションを GetPartitions リクエストで指定したクエリー式でフィルタリングします。インデックスがないテーブルでは、パーティション数が増えるほどクエリの実行に時間がかかります。テーブル lab1_with_index_syncstreamingdata にパーティションインデックスが存在する場合、GetPartitions クエリはテーブル内のすべてのパーティションを読み込む代わりに、パーティションのサブセットをフェッチしようと試みます。

ETL

SparkSession?
sparkはpython ライブラリ?orm?分からん

GlueETL -> Jupyterとかでできる
GlueStudio -> GUI ブロック
生成されるコードは汚いからpythonとかで書くのとトレードオフになる

モニタリング

EventBridgeでジョブステータスを通知することができる。

winnie279winnie279

EC2

仮想サーバーのサービス。ほとんどOSを利用できる。

  • スケールアップ・ダウン:サーバー1台あたりのスペックを変える。
  • スケールアウト・イン:サーバーの台数を変化させる

購入オプション

  • オンデマンドインスタンス:従量課金
  • リザーブドインスタンス:通年予約により割引価格で利用可能
  • スポットインスタンス:未使用リソースの利用により割引価格で利用可能

ルートボリューム

インスタンスストア

ホストコンピュータに内蔵された無料のストレージ。

Elastic Block Store(EBS)

ネットワークで接続された有料のストレージ。

Amazon Machine Image(AMI)

EC2インスタンス起動に必要なマシンイメージ。OSのようなもの。

Security Group

インスタンスレベルのファイアウォール。
https://zenn.dev/link/comments/1f46848a24742f

Auto Scaling

ピークとの差が大きかったりスケーラビリティが欲しかったりするなら使うと良い。
Auto Scaling Groupを設定する。
「CPU使用率50%を維持するようにサーバを確保する」など

起動テンプレート

winnie279winnie279

SSH接続するときにpemファイルやcerファイルのパーミッションを400にしないと、権限が開きすぎていると怒られる。

Permissions 0544 for '.ssh/******' are too open.

cofigファイルは600

Bad owner or permissions on /root/.ssh/config

https://qiita.com/muramasa2/items/c58345b3ab6069d02849

あと、ホームディレクトリにある.sshディレクトリでconfigファイルを作成しようとしてはまった。ルートディレクトリにある.ssh/configを見に行ってるらしい。理由は後で調べる。

ssh: Could not resolve hostname ******: Name or service not known

https://daitaisonnamon.hatenablog.jp/entry/2019/10/31/235057#エラー内容

winnie279winnie279

インスタンスは終了後もしばらくコンソールに表示されるが、時間が経つと消えるので問題ない。

winnie279winnie279

Deep LearningなどをするときはElastic GPUを設定するとよい。

winnie279winnie279

Identity Access Management(IAM)

AWSでの認証・認可を担当するサービス。

IAM ユーザー

  • AWS環境に外部からアクセスする主体
  • パスワード・APIキーで認証する。
  • 1 IAMユーザー/人
  • ルート・パワー・一般ユーザーがいる。

IAM グループ

  • 複数ユーザーにまとめて権限を設定できる。

IAM ロール

  • エンティティ(サービスやアカウントなど)ごとに権限を設定する。
  • IAMユーザーのアクセスキーはAWS内では用いない。

IAM ポリシー

何ができるか・できないかの定義
デフォルトはDeniedで、JSONファイルで定義される。

アクセスアナライザー

IAMの権限が適切に付与されているか分析する。

Permissions Boundary

IAMユーザーに対して誤った権限を不要しないよう、付与可能な権限をあらかじめ制限できる。

winnie279winnie279

Simple Storage Service(S3)

画像を保存するならこれがベストプラクティス。ほかにも色々なことに使える。
秒間5,000アクセスまで耐えられるらしいので、スケールに気を使う必要は少ない。

winnie279winnie279

5GBまで無料で使える。5GBを超えそうになったらアラートを出すような運用をすると良い。

winnie279winnie279

S3はVPC内に作成されないため、VPCからS3にアクセスするためのエンドポイントが必要になる。プライベートサブネットからNATゲートウェイを介してインターネット経由でアクセスすることはできるが、推奨されない。

winnie279winnie279

aws s3 lsでS3に対してlsが使える。最初は何も起きなかったように見えるので困惑するが、ファイルが存在しないだけなので問題ない。

winnie279winnie279

CloudWatch

AWSの各種リソースを監視する。グラフ化・アラートなど。

Dashboard

各サービスでメトリクスを見ることもできるが、Dashboardを利用することで一元化できる。

Synthetics

Canary

Metrics

winnie279winnie279

Organizations

複数アカウントの一元管理や一括請求ができる。

winnie279winnie279

Virtual Private Cloud(VPC)

ユーザーによって定義される、論理的に(インターネットと)分離された(プライベートの)仮想ネットワーク。AWS上にプライベートネットワーク空間を構築できる。オンプレミスとの接続も可能(Direct Connect)。1つのVPCは複数のAZ(Multi-AZ)にまたがって構築すると良い。

サブネット

パブリックサブネットとプライベートサブネット(デフォルト)があり、1つのAZ上に構築できる。プライベートサブネットには、パブリックサブネット上に構築した踏み台サーバーからアクセスする。またプライベートサブネットからは、NATゲートウェイを割り当てないとインターネットにアクセスできない。当たり前だが、パブリックサブネットにはパブリックIPアドレスが割り当てられる。

ルートテーブル

プライベートサブネットはルートテーブルを用いてIGWにルーティングすることで、パブリックゲートウェイとなる。

Elastic IP

静的なIPアドレス。利用時は無料だが、開放しないと有料となる。

Internet Gate Way(IGW)

インターネットへの入り口となるゲートウェイ。1つのVPCにつき1つ設定する。

インターネットゲートウェイは、VPC内のリソースがインターネット側のサーバー・ユーザーと通信するために必要なコンポーネントです。インターネットと、VPCのネットワークの橋渡しをしてくれるようなものです。ですので、ALBの前でインターネットゲートウェイを通過しているという表現は正しいです。

NATゲートウェイ

プライベートIPアドレスをグローバルIPアドレスに変換して、IGWに連携させる。
プライベートサブネットにはパブリックIPアドレスが付与されていないため、IGWを通じて直接トラフィックを返すことはできない。そこで、プライベートサブネット内のインスタンスがインターネットに返信を返すためにNATゲートウェイが必要になる。ゲートウェイには通常IPアドレスが必要ないが、NATゲートウェイはプライベートサブネットのトラフィックを返すためにIPアドレス(Elastic IP)を持っている。NATゲートウェイはプライベートサブネットのプライベートIPアドレスをElastic IPに置き換えることで、プライベートサブネットからのトラフィックを返している。NATゲートウェイはパブリックサブネットに置き、プライベートサブネットのルートテーブルと紐付ける。

ネットワークACL

VPCとサブネットのファイアウォールを提供する。通信はインバウンド(VPCやサブネットへのアクセス)とアウトバウンド(VPCやサブネットからのアクセス)をそれぞれ設定する必要がある。

セキュリティグループ

インスタンスのファイアウォールを提供する。ネットワークACLと同様にインバウンドルールとアウトバウンドルールを設定する。インスタンスにアクセスするためには、ネットワークACLとセキュリティグループの両方でアクセスの許可を設定する必要がある。

VPCエンドポイント

インターネットを介さずにVPC内からVPC外のリソースへアクセスできる。

ゲートウェイ型

サブネットに特殊なルーティングを設定して利用する。S3とDynamoDBにのみ対応。

プライベートリンク型

サブネットにプライベートIPアドレスを生成し、DNSが名前解決することでルーティングする。DynamoDBは非対応。

VPCフローログ

VPCへのネットワークトラフィックを取得し、CloudWatchでモニタリングできるようにする機能。

winnie279winnie279

NATゲートウェイを削除した場合は、使用していたElastic IP addressを解放しないと料金が発生してしまう(使用していないElastic IP addressに料金が発生する)。

winnie279winnie279

NACLを利用する際は、クライアントでエフェメラルポートを設定する必要がある。

winnie279winnie279

NATゲートウェイはElastic IPをどこに渡すのか?

  • ルートテーブル?
  • IGW?
winnie279winnie279

CloudFormation

Infrastructure as Code(IaC)のサービス。YAML or JSONからAWSリソースを作成できる。

winnie279winnie279

Cloud Development Kit(CDK)

ただのAWS CDK[1][2]。一般のプログラミング言語でAWSの環境を記述できる。ライブラリ(Construct)によって少ないコードで記述できる。裏側ではCloudFormationを利用しているため、CloudFormationの恩恵とCDKの恩恵を両方受けることができる。環境の削除も簡単にできる。

フロー

  1. cdk init:インフラストラクチャの定義
  2. cdk synth:CloudFormationのテンプレートの"合成"
  3. cdk bootstrap:ブートストラップスタック(?)のデプロイ
  4. cdk diff:差分確認
  5. cdk deploy:デプロイ
脚注
  1. TypeScript の基礎から始める AWS CDK 開発入門 ↩︎

  2. API Reference · AWS CDK ↩︎

winnie279winnie279

以下、歴史的背景によるらしい。

基本的には左側のメニューからリソースのページに直接アクセスできますが、VPC は EC2 のページ内にあるためご注意ください。

winnie279winnie279

AZの数はVPCがあるスタックに依存し、暗黙的にMulti-AZのサブネットを作成する。[1]

更に、上記のコードだけで 2 AZ にまたがり、それぞれパブリックサブネット・プライベートサブネットを 1 つずつ持つ VPC の設定は完了しています!

脚注
  1. aws-cdk-lib.aws_ec2 module · AWS CDK ↩︎

winnie279winnie279

CodeCatalyst

統合ソフトウェア開発サービス。コーディング(Cloud9など)からデプロイまでAWSで完結する。

フロー(仮)

  1. ブループリント(プロジェクトの作成)
  2. Issueの作成
  3. ソースリポジトリの作成
  4. 開発環境の構築
  5. CDKアプリケーションの作成
  6. 環境の作成
  7. ワークフローの作成
winnie279winnie279

データまわり整理

Athena

SQLを利用したデータ分析。

Glue

ETL?よく分からん。

QuickSight

BIツール。(どうやって可視化のためのデータ加工を行う)

winnie279winnie279

Command Line Interface(CLI)

  1. AWS CLIをインストールする。

AWS CLIのインストール
Install or update the latest version of the AWS CLI - AWS Command Line Interface

$ which aws
/usr/local/bin/aws
  1. AWS CLIをセットアップする。
$ aws configure
AWS Access Key ID [None]: ******
AWS Secret Access Key [None]: ******
Default region name [ap-northeast-1]: 
Default output format [None]: json

AWS CLIのセットアップ
Set up the AWS CLI - AWS Command Line Interface

アクセスキーの取得
Authenticate with IAM user credentials - AWS Command Line Interface

winnie279winnie279

スケール

サーバーのScale-up

  1. CloudWatchでリソース不足を監視する。
  2. EC2インスタンスを停止する。
  3. Management Consoleからインスタンスタイプを変更して再起動する。

ディスク容量のスケール

  1. EBSのスナップショットを作成する。
  2. スナップショットを基に新しいEBSを大きなボリュームで作成する。
  3. 新しいEBSをEC2インスタンスにアタッチする。
  4. ファイルシステムのリサイズコマンドで領域を拡張する。

https://amzn.asia/d/2Tcy4rd

winnie279winnie279

Account

アカウント = 環境。アカウント ≠ ユーザー。以下例。

  • ステージング環境(アカウント)
  • テスト環境
  • プロダクション環境
  • 開発環境

Organizations

複数アカウントを管理する。請求情報を1箇所で管理したりできる。

IAM Identity Center

複数アカウントへのアクセスを一元管理する。旧Single Sign-On。

Control Tower

OrganizationsやIAM Identity Centerを自動で設定してくれる。

https://tech.nri-net.com/entry/why_multi_accounts

winnie279winnie279

Amazon Bedrock

基盤モデルを使って生成AIを構築するためのツール。

基盤モデル(Foundation Model, FM)

  • Claude 3(ANTHROPIC)
    • Sonnet, Haikuのみ。
    • Opusはcomming soon。
  • Amazon Titan(Amazon)
    • Titan Text
    • Titan Multimodal Embeddings
  • ほか多数

サンプル

RAGや画像アップロード機能などを含む、ChatGPTのような実装サンプルがある。
AWSのサービスのみでマルチモーダルの実装が完結する(ベクトルDBなども含め)。
Amazon Titanの実装は、OpenAI APIやANTHROPIC APIの実装とほぼ同じ。

https://github.com/aws-samples/generative-ai-use-cases-jp
https://dev.classmethod.jp/articles/introduce-aws-samples-gen-ai-app-repo/

OpenSearch Service

ベクトルDBのフルマネージドサービス。簡単にデプロイ・管理・スケール可能

OpenSearch Serverless

サーバーレスもある。


以下、今回は扱わない。

Amazon Q

基盤モデルを活用したアプリケーション。
与えられたデータからユーザーに適切な回答を行う。ほかのAWSサービスと連携できる。

Amazon Q in Amazon QuickSight

これよさそう。

Amazon Q in Amazon Connect

Amazon CodeWhisper

基盤モデルを活用したアプリケーション。

SageMaker

トレーニングと推論のためのインフラストラクチャ。

GPUs

学習する際は以下のチップもある。

  • Inferentia
  • Inferentia 2
  • Trainium
winnie279winnie279

CR

Amazon CRは、わずかなアクションで素早く安全に喫食可能なフルマネージド統合サービスです。
CRを使用すればホットスタンバイ状態のH2OあるいはRawとして麺、醤油または味噌、また葱、肉などを単一のフローとして提供できます。CRはHot Water Injection(HWI)の開始後に専用のフルマネージドされたタイマあるいは勘によってトリガされるイベントにとってセキュアに喫食開始のタイミングを知ることができます。