AWSを勉強していく
Amazon SageMaker
quicksight
BIダッシュボード。
QuickSight使うまでのフロー
Aurora -> Glue -> S3 -> Athena -> QuickSightとか。
クラスター
タスクやサービスを束ねる論理的なグループ(?)
実行環境の境界
実行環境の境界
サービス
複数のタスクやロードバランサを組み合わせた概念。
タスク
稼働しているコンテナを指す。
タスク定義に基づき起動されるコンテナ群(?)
タスク内コンテナは同一ホスト上で実行される(?)
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?を削除できる。
Compute Services
ECS
クラウドでコンテナを本番利用するためのオーケストレータ。
EC2だとコンテナの管理が大変らしいからECSでいい感じにできる。
ECSでFargateをオーケストレーションできる。
Fargate
マネージド型のコンテナ実行基盤。
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サービス。コンテンツを地理的に分散したサーバにキャッシュする。
配信の高速化・サーバへの負荷軽減が期待できる。
Strage Services
Intelligent-Tiering
アクセス頻度が少ないデータを自動でアーカイブする。
暗号化
- クライアントサイドで暗号化したデータをS3に保存する(クライアントサイド暗号化)。
- AWSのサーバ側でデータを暗号化する(サーバーサイド暗号化)。
Elastic Block Store(EBS)
EC2にマウント可能なブロックストレージ(?)。
Elastic File System(EFS)
複数のインスタンスから同時にマウント可能なストレージ(?)。
EFSが1番理解しやすいと思う。
ツリー構造でファイルを管理する(Linuxのディレクトリと一緒)。
オブジェクトのなにがしか
Snowball Family
ハードウェアを配送することで、オンプレミスとクラウド間の大量のデータを移行する。
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に問い合わせる。
Analytics Services
レイクハウス(?)
Athena
標準SQLでS3のデータ分析を行うサービス。
QuickSight
BIサービス。ダッシュボードをWebサービスに組み込める。
メール配信もできる。
Security Serices
責任共有モデル(?)
クロスアカウントアクセス
分からん。
Key Management Service(KMS)
フルマネージドの暗号鍵管理サービス。
Other Services
SQS
分散メッセージキューのマネージドサービス。
CloudShell
マネジメントコンソールで利用できる、ブラウザベースのシェルを提供するサービス。
Cognito
認証サービス。Firebaseみたいなもの。
CodePipeline
CI/CDのサービス
Personalize
レコメンドサービス。
SageMaker
Personalizeと比較して広範な機械学習に使えそう。自由度が高そう。
EventBridge
clone
のようなもの。
Redshift
データウェアハウス専用のデータベースサービス(?)
知見
-
その他
-
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とセキュリティグループの違い?
- デフォルトだとxssとかdosとか防げない?
- https://aws.amazon.com/jp/shield/
-
サーバー側のキャッシュ?
-
インメモリデータストア?
-
eventbridge cloneぽいやつ
SPA + MVCのときのCDN?
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でジョブステータスを通知することができる。
EC2
仮想サーバーのサービス。ほとんどOSを利用できる。
- スケールアップ・ダウン:サーバー1台あたりのスペックを変える。
- スケールアウト・イン:サーバーの台数を変化させる
購入オプション
- オンデマンドインスタンス:従量課金
- リザーブドインスタンス:通年予約により割引価格で利用可能
- スポットインスタンス:未使用リソースの利用により割引価格で利用可能
ルートボリューム
インスタンスストア
ホストコンピュータに内蔵された無料のストレージ。
Elastic Block Store(EBS)
ネットワークで接続された有料のストレージ。
Amazon Machine Image(AMI)
EC2インスタンス起動に必要なマシンイメージ。OSのようなもの。
Security Group
インスタンスレベルのファイアウォール。
Auto Scaling
ピークとの差が大きかったりスケーラビリティが欲しかったりするなら使うと良い。
Auto Scaling Groupを設定する。
「CPU使用率50%を維持するようにサーバを確保する」など
起動テンプレート
SSH接続するときにpemファイルやcerファイルのパーミッションを400
にしないと、権限が開きすぎていると怒られる。
Permissions 0544 for '.ssh/******' are too open.
cofigファイルは600
。
Bad owner or permissions on /root/.ssh/config
あと、ホームディレクトリにある.ssh
ディレクトリでconfig
ファイルを作成しようとしてはまった。ルートディレクトリにある.ssh/config
を見に行ってるらしい。理由は後で調べる。
ssh: Could not resolve hostname ******: Name or service not known
インスタンスは終了後もしばらくコンソールに表示されるが、時間が経つと消えるので問題ない。
Deep LearningなどをするときはElastic GPUを設定するとよい。
Identity Access Management(IAM)
AWSでの認証・認可を担当するサービス。
IAM ユーザー
- AWS環境に外部からアクセスする主体
- パスワード・APIキーで認証する。
- 1 IAMユーザー/人
- ルート・パワー・一般ユーザーがいる。
IAM グループ
- 複数ユーザーにまとめて権限を設定できる。
IAM ロール
- エンティティ(サービスやアカウントなど)ごとに権限を設定する。
- IAMユーザーのアクセスキーはAWS内では用いない。
IAM ポリシー
何ができるか・できないかの定義
デフォルトはDeniedで、JSONファイルで定義される。
アクセスアナライザー
IAMの権限が適切に付与されているか分析する。
Permissions Boundary
IAMユーザーに対して誤った権限を不要しないよう、付与可能な権限をあらかじめ制限できる。
Simple Storage Service(S3)
画像を保存するならこれがベストプラクティス。ほかにも色々なことに使える。
秒間5,000アクセスまで耐えられるらしいので、スケールに気を使う必要は少ない。
CloudWatch
AWSの各種リソースを監視する。グラフ化・アラートなど。
Dashboard
各サービスでメトリクスを見ることもできるが、Dashboardを利用することで一元化できる。
Synthetics
Canary
Metrics
カナリアの語源が炭鉱の毒ガス検知だった説。
Organizations
複数アカウントの一元管理や一括請求ができる。
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でモニタリングできるようにする機能。
Route 53
CloudFormation
Infrastructure as Code(IaC)のサービス。YAML or JSONからAWSリソースを作成できる。
Cloud Development Kit(CDK)
ただのAWS CDK[1][2]。一般のプログラミング言語でAWSの環境を記述できる。ライブラリ(Construct)によって少ないコードで記述できる。裏側ではCloudFormationを利用しているため、CloudFormationの恩恵とCDKの恩恵を両方受けることができる。環境の削除も簡単にできる。
フロー
-
cdk init
:インフラストラクチャの定義 -
cdk synth
:CloudFormationのテンプレートの"合成" -
cdk bootstrap
:ブートストラップスタック(?)のデプロイ -
cdk diff
:差分確認 -
cdk deploy
:デプロイ
Lambda
サーバのプロビジョニング/管理なしでプログラムを実行できるサービス。コードを書くことに集中できる。イベント駆動型の利用は向かないらしい(ユーザーの行動ベースなど)。
CodeCatalyst
統合ソフトウェア開発サービス。コーディング(Cloud9など)からデプロイまでAWSで完結する。
フロー(仮)
- ブループリント(プロジェクトの作成)
- Issueの作成
- ソースリポジトリの作成
- 開発環境の構築
- CDKアプリケーションの作成
- 環境の作成
- ワークフローの作成
データまわり整理
Athena
SQLを利用したデータ分析。
Glue
ETL?よく分からん。
QuickSight
BIツール。(どうやって可視化のためのデータ加工を行う)
Zero-ETL
AuroraのデータをETLなし( = ニアリアルタイム)にRedshiftで分析できる、みたいな理解…?
よく分からないけどRedshiftからの分析煩雑になったりしないのだろうか。
Command Line Interface(CLI)
- AWS CLIをインストールする。
AWS CLIのインストール
Install or update the latest version of the AWS CLI - AWS Command Line Interface
$ which aws
/usr/local/bin/aws
- 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
スケール
サーバーのScale-up
- CloudWatchでリソース不足を監視する。
- EC2インスタンスを停止する。
- Management Consoleからインスタンスタイプを変更して再起動する。
ディスク容量のスケール
- EBSのスナップショットを作成する。
- スナップショットを基に新しいEBSを大きなボリュームで作成する。
- 新しいEBSをEC2インスタンスにアタッチする。
- ファイルシステムのリサイズコマンドで領域を拡張する。
Account
アカウント = 環境。アカウント ≠ ユーザー。以下例。
- ステージング環境(アカウント)
- テスト環境
- プロダクション環境
- 開発環境
Organizations
複数アカウントを管理する。請求情報を1箇所で管理したりできる。
IAM Identity Center
複数アカウントへのアクセスを一元管理する。旧Single Sign-On。
Control Tower
OrganizationsやIAM Identity Centerを自動で設定してくれる。
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の実装とほぼ同じ。
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
CR
Amazon CRは、わずかなアクションで素早く安全に喫食可能なフルマネージド統合サービスです。
CRを使用すればホットスタンバイ状態のH2OあるいはRawとして麺、醤油または味噌、また葱、肉などを単一のフローとして提供できます。CRはHot Water Injection(HWI)の開始後に専用のフルマネージドされたタイマあるいは勘によってトリガされるイベントにとってセキュアに喫食開始のタイミングを知ることができます。