AWS DynamoDB

今日はAWSDBサービスの一つであるDynamoDBについてまとめたいと思います。

DynamoDBの特徴はNoSQL型かつキーバリューストアであることです。Dynamoからデータを参照する場合や登録する場合はRDSのようにSQLは使われません。NoSQL型のデータベースのメリットとしては一般的にRDSと比べて高速な処理や、システムの拡張性の高さが挙げられます。Dynamoも例外ではなく毎秒2,000万件を超えるリクエストを処理する能力を持ち、IoTの分野などにも用いられます。

また、DynamoDBはRDSなどと違いサーバーレスサービスであるためユーザーがサーバ管理やパッチの適用を行う必要がなく容量の増設なども自動で行われます。VPCなどから接続する際もS3と同様にエンドポイントゲートウェイ型から接続できるので設定も複雑ではありません。

Dynamoに付属する機能や設定などもDAX、ConsistencyReadなどが存在します。DAXはRDSでいった所のElasticCacheのようなものでDynamo用のインメモリキャッシュになります。DAXにデータをキャッシュしておくことでDynamoのレスポンス速度をさらに早めることが可能になります。デフォルトではDynamDBのデータが変更された場合、自動で複製されるテーブル含めたAZ3箇所の内の2箇所の変更が完了した時点でそのリクエストが完了と見なされます。そのタイミングでDynamoからの読み込みが行われた場合、まだ変更が完了していない1つのテーブルから本来陳腐化されたはずのデータが読み込まれてしまうといったことが起こり得ます。ConsisitencyReadを設定しておくことで3つのテーブル全ての変更が完了した時点でリクエストを完了とするので、データ齟齬が好まれないシチュエーションなどで用いられる機能になります。

今日は以上です。

AWS VPC

今日はVPCについてまとめたいと思います。

VPCとはVirtualPrivateCloudの略称でAWSといった巨大なパブリッククラウドの一部を、仮想的に特定のユーザーしかアクセスできないように分割する機能になります。以前取り上げたEC2インスタンスもDBサーバーも全てVPCの中のサブネットの中に位置するサービスになります。

基本的には独立した仮想ネットワークのため、インターネット接続もないのですがそのままだとアプリケーションサーバーなどを配置する際に使い勝手が悪いのでIGW(InternetGateway)をアタッチして外部インターネットとの接続を確保するといった形をとります。

VPCはリージョンサービスなので、ダッシュボードでは下記のように各リージョンごとのVPCに付随するサービスの状況が参照できます。独立した仮想ネットワークサービスではありますが、VPCピアリングでVPC同士の接続が可能だったりNATゲートウェイでプライベートサブネットからのインターネット接続が可能であったりなどと他のAWSサービスとの連携によってかなり自由度の高い構成が可能になっています。f:id:zenkikkkk:20210801220239p:plain

また、VPC内でのIPトラフィックのデータをS3かCloudWatch LogsにVPCフローログといった形で発行できるので適切な使用方法の元になるデータの収集なども可能です。

今日は以上です。

AWS IAM

今日はAWS機能の一つであるIAMについてまとめたいと思います。

IAMとはAWSを利用する際にユーザーの権限を設定したり、アクセス制御を行ったりする機能になります。AWSアカウントを作成した段階ではrootユーザーとしてAWSにログインしている状態になります。
しかし、自分以外にもAWSリソースにアクセスする人が必要だったり万が一乗っ取りの被害に会ってしまった場合など、rootユーザーだけだと不都合なのでIAMのユーザーやグループを作成することで権限やアクセスの管理を行います。

IAMではユーザーやグループに下記のようなポリシーをアタッチすることで、権限の管理を行うことが可能です。ポリシーは元々AWSに存在するものもあれば、自分で作成することも可能です。f:id:zenkikkkk:20210728221521p:plain

また、IAMポリシーはユーザーやグループだけでなくエンティティにアタッチすることも可能です。EC2インスタンスからS3のバケットにアクセスする権限を与えたい場合などは、ロールという形でEC2に権限を付与することでアクセスが可能になります。

基本的なルールとしてはIAMで各ユーザーに必要最低限の権限を与え、ユーザーは各々でMFAなどの手段を取ることでセキュリティを高めるといったプロセスを踏むことでAWSを安全に扱うことが可能です。

今日は以上です。

AWS CloudTrail

今日はAWSの機能の一つであるCloudTrailについてまとめたいと思います。

CloudTrailはそのAWSアカウント内で行われた変更の履歴を確認することができるサービスです。行われたイベント名、時間、ユーザー、リソースなどの情報を確認することができ、無料枠では過去90日間のデータを確認することが可能です。有料枠では、イベントを分析し、異常なイベントを検出する機能や分析したデータをS3に配信することが可能です。f:id:zenkikkkk:20210719220458p:plain

この機能は自分一人でAWSアカウントを利用している場合にはそこまで利用することは無いかもしれないですが、会社でEC2インスタンスに異常が出た場合などに、どのユーザーがいつ変更を加えたのかを確認することができる為問題解決の手がかりにすることが可能です。また、アカウントが不正に利用された場合などでも、どのリソースにどのような変更が加えられたかを知ることができるので復旧するべき内容をすぐに見つけることが可能です。

無料枠の90日間のイベントは特に設定が必要ないので、自動的に記録されている形になります。

本日は以上です。

AWS S3

今日はS3についてまとめたいと思います。S3は主にデータ保存に用いるオブジェクトストレージです。WebアプリケーションをAWSでデプロイする際などにS3にバケットを作成し、ユーザから投稿された画像データなどの保管を行うといった形で利用することが可能です。

基本的な使用方法としてはダッシュボードなどからバケットを作成し、データを保存するといった形になります。f:id:zenkikkkk:20210714000144p:plain

ただ、このバケットを作成する際にバケットのバージョニングや暗号化の有無を設定する必要があります。バージョニングは誤ってバケットのデータを削除してしまった際にデータを復元できるようにバケットに変更がかかるとその前の状態を保存しておく機能をさします。暗号化は機密性の高いデータを扱う際にバケット内のデータをS3側で暗号化するかどうかの選択肢でSSE-S3と呼ばれます。f:id:zenkikkkk:20210714000332p:plain

S3には一つのファイルで最大5TBまで保管可能で、総データ量は実質制限がありません。また、自動的に複数のAZにデータバックアップが作成されるシステムによって、安全性も99.999999999%確保されています。

またS3にはデフォルトのStandardクラスだけでなく、データ読み出しの頻度が低い際に用いる低頻度アクセスクラスや、30日間データにアクセスがなければ自動的にクラスを変更するIntelligent-tieringクラスなどコストを最適化する為の選択肢が複数用意されており無駄な費用がかからないデータ保管サービスになっています。

その他にもS3はアクセス権をパブリックにすることで、静的コンテンツをホストすることも可能です。これはEC2インスタンスでももちろん可能なのですが、S3で公開することでスケーリングの必要性がなくなることや単純にコストが低いなどのメリットがあるので簡単なHPなどの公開であればS3から行うことも十分選択肢に入ると思います。

今日は以上です。

AWS Elastic Block Store(EBS)

今日はAWSのストレージサービスの一つであるEBSについてまとめたいと思います。

EBSはEC2インスタンスにアタッチして用いるストレージサービスです。実際にEBSから起動するストレージはボリュームと呼ばれ、ボリュームを作成してからEC2インスタンスにアタッチすることで利用可能です。ボリュームのタイプにはI/Oに優れたものや、読み込み速度が早いものなどタイプによって向いている機能がそれぞれ存在します。

f:id:zenkikkkk:20210711132103p:plain

個人アプリなどではデフォルトの汎用SSDを選択すれば問題なく利用できると思いますが、高速で読み書きが行われるものであればプロビジョンIOPSSSDなどを用います。ちなみに通常のEC2インスタンスにプロビジョンIOPSSSDをアタッチした場合、EC2インスタンスとEBSの通信速度がボトルネックになり想定した速度でのパフォーマンスが発揮できない事態が起こりうるので、EC2インスタンスのタイプもEBSに応じて変える必要があります。また、EBSを複数のEC2インスタンスにアタッチすることはできません。共有ストレージのようなサービスが必要であればEFSやFsXなどのサービスの利用を検討する必要があります。

バックアップはスナップショットを取得して、そのデータがS3に保存される形になります。基本的にEBSはEC2にアタッチされて使用されるのでEBSのバックアップが取られているということはEC2もまとめてバックアップされているといった形になります。復元などの際も、AMIからデータを復元する形になります。

EBSのボリュームはS3のバケットのようにそれ一つで独立しています。つまり、EBSをアタッチしたEC2を停止や削除したとしてもボリュームに保存したデータは残り、そのデータ量に応じた料金がかかります。自分もEC2インスタンスさえ削除しておけば大丈夫と勘違いし、多少料金が発生してしまったことがあるので気をつけたいですね。

AWS EC2インスタンス

今日はAWSのEC2インスタンスについてまとめたいと思います。自分がアプリをデプロイする際にも使っていたので多少なじみはあったのですが、現場でも触れることがあるので勉強し直した内容からまとめて行きます。

アプリのデプロイなどで用いられるクラウドサービスで、オンプレで自社のサーバーを持っていなかったり個人で作成したアプリなどを公開する時などでも気軽に使えるので自由度が高いサービスになっています。

その中でも、今日はEC2について書いていきたいと思います。EC2はざっくりまとめると仮想サーバを提供するサービスです、AWS上に仮想のサーバーを作り、作成したアプリをデプロイしてをアプリケーションサーバとして利用したり、MySQLなどを入れてDBサーバとして利用することが可能です。

実際AWSのEC2サービスのダッシュボードは画像のようになっており、実行中のインスタンスやEC2インスタンスにルールを設定できるセキュリティグループなどが項目として存在します。f:id:zenkikkkk:20210705215841p:plain

個人で利用する場合はそこまで意識することはないのですが、業務などで可用性の確保が必要になる場合は複数のEC2インスタンスを作成しロードバランスを設定する事も可能です。

また、EC2インスタンスのIPは固定されないのでHPとして利用する場合で、パブリックIPを固定したい場合はAWSアカウントからElasticIPを発行してインスタンスにアタッチする必要があります。ちなみにこのElasticIPはrunning状態でないEC2インスタンスにアタッチされている状態や、どのインスタンスにもアタッチされていない状態だと料金がかかってしまうので使わないElasticIPは解放するようにします。自分は解放し忘れて多少料金がかかってしまったのでもう二度と忘れることはないと思います。

今日は以上です。