DynamoDBについて
awsのデータベースサービスの違いがあんまりわからなかったから今回はDynamoDBについてまとめてみる
DynamoDBの特徴
- SPOFが存在しないらしい🙄
- データは自動的に3箇所のAZに保存される🌻
- ストレージが自動でパーティショニングされる🙄
- 自分でスループットキャパシティをきめられる!
- ストレージの容量制限がない
- 結果整合性だけど、強い整合性がオプションで指定できる
覚えておく機能
Time To Liveのこと
項目の有効期限を決めて自動的に削除することができる
スループットを使用しない!ここが重要☝️
でも即削除できるわけじゃなくて最大48時間かかる
AutoScaling
読み書きのスループットキャパシティとGSIもAutoScalingできる
DynamoDB Accelerator
DynamoDBのインメモリ型キャッシュクラスタ🐙
フルマネージドかつ高可用
暗号化について
暗号化についてまとめてみたよ
🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙
10分でわかる!Key Management Serviceの仕組み #cmdevio | Developers.IO
AWS Black Belt Online Seminar AWS Key Management Service (KMS)
🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙🌙
classmethod大好き🥰
暗号化キー
暗号化には暗号化キーが必要
同じ暗号アルゴリズムでも処理につかうキーが違うと処理の結果が違くなる🙄
暗号化キーが第三者に取られちゃうと暗号した機密情報が復元されて大変なことになるからちゃんと管理しなきゃいけない👶
暗号化の方法
1.共通鍵暗号方式
暗号化と復号化で同じ鍵を使う方法!✊
メリットは処理速度が高速なこと!デメリットは鍵の数がめっちゃ増える👀
2.公開鍵暗号方式
暗号化と復号化で別の鍵を使う方法🔒
暗号化する鍵は公開されてるから誰でも公開できるけど、復号化する鍵は秘密だからできないよ〜!って感じ
デメリットは処理が低速😥
ハイブリッド方式
これら二つの方式が組み合わさったのがハイブリッド方式!
データ自体の暗号、復号化には共通暗号方式が使われて、鍵そのものには公開鍵暗号方式が使われるおことがおおい🧐
3.ハッシュ化
元のデータをハッシュ化する!
AWSの暗号化サービス
AWS KMS
暗号化キーを管理できるよ!ってサービス
自分で管理するのは大変だから😢
複数のAZで管理、イレブンナインの可用性😈
他のAWSサービスがたくさんインテグレーションされてる
(S3,EBS,Redshift,RDS,Snowballとか)
SDKを使うことでクライアントのアプリケーションでもつかえる🧐
カスタマーマスターキー(CMK)とカスタマーデータキー(CDK)を管理する🤟
この二つの鍵をつかって暗号化、復号化する方法はEnvelope Encryptionっていう😃
最大4KBまで暗号化できる🙄
データキー
これはデータを暗号化するための鍵🌻
マスターキー
これーはデータキーを暗号するための鍵🔦
使う流れ
1.まず、マスターキーを作成する💄
APIのCreateKeyで作れるらしい。
作成すると、マスターキーはAWSに保存されて、ユーザーにはマスターキーのキーIDが返される。(ユーザーにマスターキー自体は返されないのがポイント!)
2.データキーを作成する
データキーはAWSのGenerateDataKeyで作れるって😺
さっき返されたマスターキーのIDを指定するよ。
したっけAWSがマスターキーを使って暗号化してくれたデータキーと暗号化されてないデータキーが返される👍
3.データを暗号化する
さっき返された暗号化されてないデータキーを使ってデータを暗号化する!
暗号化できたら暗号化されてないデータキーはすぐ捨ててね☝️
暗号化されたデータキーは大事に守る👀
4.データを復号化する
AWSに暗号化されたデータキーとマスターキーのIDを渡すと暗号化されてないデータキーが返されるから、それを使ってデータを復号化する🙌復号化できたら暗号化されていないデータキーはすぐポイ!🐙
鍵の管理
マスターキーは有効化したり無効化したりするのが自由🧘♀️
マスターキーは1年ごとにローテーションできるか決めれる!
ローテーションしたら新しいマスターキーが使われるようになるけど、古いマスターキーをつかって暗号化したデータキーは古いやつじゃないと復号化できない👀
鍵を管理や使用するIAMユーザー、ロールの定義
あとはキーポリシーも決められるよ🌙
デフォルトはDeny
マスターキーの持ち込みもできる(BYOK)
BYOK
- インポートする鍵は256ビットの対象鍵だけ🔰
- インポートされた鍵は独自のアプリ、AWSのサービスで使用できる
- エクスポートはできないよ🚫
- 手動でローテーションするしかない
- リージョン障害が起きたら自動復旧されない(AWSで作成したやつならOK⭕️)
- 有効期限がすぎたらすぐ削除される😰(AWSで作成したやつなら7-30日猶予あり
- 複数リージョンにインポートできるけど、別リージョンのKMSで暗号化したやつを復号化することはできないよ🙅♀️
EBSの暗号化
- データキーでEBSのボリュームが暗号化される
- EBSのボリュームがマウントされた時にEC2インスタンスが暗号化されたデータキーを受け取ってKMSに送る
- KMSが復号化したデータキーをインスタンスが稼働しているホストに送ってデータを復号化する。
CloudHSM
これはAWSが専用のサーバを用意してくれる🧚♀️
対象鍵暗号、非対称鍵暗号に対応してるよ👀
AWSのBlackBeltを見ながらメモ
これがBlackBeltだけど正直初心者にはまったくわからん。🙄
EC2とは
なんかEC2ってこういうしくみらしい。
ちなみにEC2は1時間または秒単位の従量課金だよ🐹
てかまずHyoervisorってなに。 SuperBeaverみたい😌
Hypervisorとは
ハイパーバイザーとは | クラウド・データセンター用語集/IDCフロンティア
なるほど〜!
ハイパーバイザーは、コンピュータを仮想化するためのソフトウェアのことです。
って書いてあったわ🥺☝️
つまりAWSのHostServerをHyperVisorで仮想化してEC2インスタンスとしてみんなで仲良く分けあってるっぽい。
特殊なEC2 Bare MetalってやつはAWSインフラのハードウェア上で直接OSを起動することができる⭐️(高そう、、、)
あとCPUのバースト性能があるやつもある🌙
タピオカかな???????⬇️
EC2のセキュリティ
キーペア
セキュリティグループ
デフォルトは全部拒否!!!!😡
ステートフルだからインバウンドを定義すれば良い😎
ちなみにネットワークACLはステートレスかつサブネットの通信を制御するよ🖖
ハードウェア専有インスタンスとDedicated Hosts
ハードウェア専有インスタンス
専用のハードウェアを使える。
同じAWSアカウントとはハードウェアを共有する可能性がある。
従量課金😬
Dedicated Hosts
同じAWSアカウントとハードウェアを共有することはない。
ハードウェア単位で課金🤟高そう!
プレイスメントグループ
Custer
これはEC2インスタンスどうしを密な場所におくやつ。
単一のAZにおく🥰
Spread
これは逆に別のハードウェアに分散して障害時のダメージ軽減できる🐹
AZをまたがってできる、1つのAZあたり最大7個👀
たぶんSSAででてくるのはこれくらいかなあ👂
AWSのDBがわかんないめろ〜🐹
SSA🤟
Redshift
redshiftはDWH
列指向。
DWHだから投入するデータを目的のために加工しておく必要がある🥺
データレイクはぶちこむだけ🤪
RDSと違って継続的な書き込みや更新には向いていない。
一括でデータを書き込んで、大量のデータを読み出すことが向いている。
PostgreSQLライクな感じで使える🙏
BIでよく使われる
DynamoDB
結果整合性。NoSQL。
広告やゲームのユーザー行動履歴の記録、モバイルアプリのバックエンド
S3
これはデータレイク
ビックデータに使える、Hadoopのような高速処理するやつと一緒に使ったりする。
ElasicCashe
Key-Valueストア
メモリキャッシュ。mecachedとredisがある。
メモリキャッシュはメモリ上にデータを格納して高速に取得できるようにするやつ🌻
DB負荷を減らしたいときは、リードレプリカを作ったりすることもあるけど、メモリキャッシュだったらコスト削減できる!
DynamoDBとredshiftのユースケースがわからんわ🤪
Hadoopとかデータ処理も復習しなきゃいけないなあ😢
果たして資格以外にこの知識を使う時がくるのか
aws復習
1.Snow ball edge はペタバイト規模のデータを移転できる
2.RDS proxyを使うことでlambdaとRDSの間で呼び出しがあるたびに新しいコネクションを作らなくても大丈夫になる。lambdaはRDSではなくproxyと対話する。
3.CloudFrontの署名付きURLを発行して、オリジンアクセスアイデンティティ(OAI)というuserをcloudfrontが発行して、s3はOAIからのみのアクセスを許可することでIPアドレスとかアクセス制限ができる。あとwebCLIを関連づけれる
4.プレイスメントグループは一つのアベイラビリティーゾーン内のインスタンスの論理的なグループ。このグループの中だとネットワークの待ち時間が短くてスループットが高い
5.日本以外のアクセスを非許可にしたいときはroute53とcloudfrontの地域制限を利用できるよ!
6.SQSのメッセージのデフォルト保存期間は4日、最大で14日
7.EBSボリュームをミラーリングするのが一番良い
8.EFSは強い整合性にできる。最大数千のec2インスタンスからの同時アクセスが可能、インターネットからの直接のアクセスができない。
9,Amazon S3 Transfer Accelerationはクライアントとs3バケットの距離がめっちゃ離れてても早くて安全、簡単に転送できる!!cloudfrontのエッジロケーションを使ってるよ。s3のマルチパートアップロード APIは大容量のオブジェクトを複数回に分けてアップロードできる。
10.なんかオートスケーリングにも2種類あるらしい。静的スケーリングは常に基準値を維持するけど(ヘルスチェックで1つ死んでも基準値を維持する)、動的スケーリングは増えたり減ったりする(CPU使用率とかで)
11.VPN接続はハードウェアとVPCを接続できるやつ。クライアントのハードウェアのほうの接続点がカスタマーゲートウェイ、
仮装プライベートゲートウェイはVPC側。カスタマーゲートウェイに静的ルートテーブルを構成することでVPN接続を設定できる。
12.Hardware Security Moduleは機密情報を暗号化している暗号化キーを守る金庫的な役割だからこれのログインに失敗してHSMがゼロ化されると暗号化キーは消えちゃうよ
13.ajax通信はjsを利用してサーバとの通信を非同期で行う。
14.STSが一時的な認証情報を発行する。SAML2.0で認証する。前やったシングルサインオンでawsへのアクセスできるようになるやつ。
Oauthはgoogleとかが認証用途で開発した比較的簡易なプロトコル。
https://baasinfo.net/?p=4418#outline__4 ここみて
15.ステップスケーリングポリシーはメトリクス値の上限下限を決められる。
16.VPCのDNS hostnamesオプション有効化されていないと、サブネットで起動されたインスタンスはDNS名を取得できない。
17.s3バケットにクロスリージョンレプリケーションを設定するには、バージョニングを有効にする必要がある。(レプリケート先も)
ソースバケットの所有者はレプリケートするバケットのリージョンも有効にする、
18.lambdaを呼び出すたびに使用できる一時ボリューム量は512MBです!
19.SQSでキューの優先順位を決めることができる。
20.AMIにはスナップショットが含まれているよ
21.Dockerで構築したEC2コンテナインスタンスからDBに接続するときは、EC2コンテナインスタンスではなくECSタスクに直接IAMロールを紐づけるとより安全!
22.AutoScalingを設定するときは、最初に起動テンプレートを設定するけど、その中にAMIが準備されてなきゃいけないよ!
23.Kinesis Client Libraryについて要勉強
24.EFSのファイルにアクセスするにはマウントターゲットが必要、AZごとに一つのマウントターゲットが必要でサブネットに配置される
マウントターゲットができるとターゲットポイント(接続FQDN)が一つとマウントターゲットのIPアドレスが
Kinesisって何さ
Kinesisって日本語でなんて発音するの?「ケネシス」?「キネシス」?
classmethodさまさま🙏✨
Kinesisについて
kinesisは、大きなストリーミングデータを処理するサービス!🐹
大きく分けたら3つの機能がある!
Data Streams,Data Fireforce, Data Analytics🥰
Data Streams
ストリーミングデータをリアルタイムに集めて次のサービスに運ぶ!
シャードという単位に分かれていて分散して処理を実行するからめっちゃ速い🤪
シャードにインスタンスを割り当てるよ🌻
Data Fireforce
各DBにデータを送る!
データの形式を変換したり圧縮したりセキュアな感じにして送ってくれる🥺
KMSの暗号化も使えるって👀
DataStreamと違ってlambdaとかEC2かかまなくてもデータ垂れ流しにしてくれる
Fireforceって消化ホースって意味らしいけどまんま☝️
Data Analytics
ストリーミングデータをSQLでリアルタイム分析してくれる🧐
なるほどね🦄
頑張って覚えよ
Hadoopって何よ
AWSのEMRについて勉強したかったんだけど、
「EMRは分散処理フレームワークでHadoopを中心としたサービス」
って書いてあって頭の中めっちゃはてな????🤔
いかにもコンピュータ!!!みたいな単語バカだからわからん
だからまずHadoopについて調べてみることにした🐹
てかなんて読むのこれ、(笑)ハドゥープ?
※あってた!🌟
Hadoop
崇拝するclassmethod様から🙏
まずHadoopについて。
Hadoopは巨大なデータをバッチ処理するための並列分散処理基盤らしい🙄
そもそもバッチ処理と並列分散処理がわからなかったwwww
バッチ処理は簡単にいうとまとめて処理しよ〜!ってこと
並列分散処理は一つの処理を分割して同時に行うことらしい🌻
Hadoopは数千台のサーバーで並列分散処理できるから処理時間が1/1000になるだって!なんかすごそう😳
まじでわかりやすいclassmethod🐥(再掲)
ここにあるスライドわかりやすいよ!(未来の自分へのメモ)
https://dev.classmethod.jp/articles/cmstudy-amazon-emr/
あと↑に貼ってあるこれも参考にした!
ここででてくる単語がHDFSとMapReduce!いやわからん😅
この二つで並列分散処理してるらしい
HDFSとは
入れられたファイルはレプリケーションされて3つのスレーブサーバに収納される!🥳
もとはgoogleが開発したGoogle File Systemだけど、Hadoopの場合はHDFS,EMRの場合はEMRFSになる!
HadoopはたくさんあるGFSとMapReduceのフレームワークのひとつだから🧚♀️
大量のデータを並列に処理する仕組みのこと👀
データを分類するのがMap処理(Mapタスク)、
分類されたデータを実際に処理するのがReduce処理(Reduceタスク)っていう
これら二つのタスクを合わせてMapReduceジョブ🤟
あとサーバーを増やせば処理性能もスケールするみたいだからいいね💋
Spark
あともう一つHadoopと同じようなフレームワークの一つとしてSparkがあって、これはHadoopのMapReduceの部分がめっちゃ高速になったやつ!って認識で良いかな?🤔
同じ処理の繰り返しがHadoopは苦手だけど、Sparkは速いよ!ってかんじ
こちら参考に🙏
EMRについて
やっと本題!
EMRのアーキテクチャ
EMRは、マスターノード、コアノード、タスクノードの3つから構成されてる!✨
マスターノードは、コアノード、タスクノードにジョブを振り分ける。1台しかないから何あったら全部がストップしちゃう🥺
コアノードとタスクノードは実際にジョブを実行する!
コアノードはHDFSを持ってるけどタスクコードは持ってなくてコアノードのHDFSを参照してる、👀
だからタスクコードはコアノードにくらべて増減が簡単にできる🐥
でもタスクコードだけで構成はできないよ🧝♀️
分散処理基盤としてのEMR
AWSでEMRを起動するだけでEC2とか環境を自動で構築して運用してくれる!
S3を分散処理に扱いやすいストレージとして勝手に扱ってくれる😳
ジョブを振り分けたインスタンスがダメになっちゃったら別のインスタンスにジョブを振り分けることができる!
だからEMRに使うECインスタンスは、スポットインスタンスが相性いいよ😇
スポットインスタンスが矯正的に終了されても大丈夫💪
分散アプリケーション
Hadoop上でいろんな分散アプリケーションを実行できる🌟
Sparkもその一つ!
以上🌻
ふーん🤪