Skip to content

Instantly share code, notes, and snippets.

@yano3nora
Last active April 18, 2024 10:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yano3nora/b7be2fabf0790874e9cb7551ed978e3a to your computer and use it in GitHub Desktop.
Save yano3nora/b7be2fabf0790874e9cb7551ed978e3a to your computer and use it in GitHub Desktop.
[aws: Amazon Web Service] Cloud platform service like IaaS, PaaS SaaS by Amazon. #aws

Overview

aws.amazon.com
AWS ドキュメント - docs.aws.amazon.com
AWS サービス別資料 - aws.amazon.com

Amazon 様の提供するクラウドコンピューティングサービスの総称。従量課金制。基本 IaaS - Infrastructure as a Service だが PaaS - Platform as a Service ( Lamdba や Elastic Beanstalk ) や SaaS - Software as a Service ( S3 や CloudWatch ) などのサービスも展開している。

VM、DB / Storage / Network / 開発環境 / メディア / メール / AI / IoT / セキュリティ / AR / ゲーム開発 / マーケティング ... など幅広いサービスが存在する。基本設計・技術選定時に「まずは AWS サービスで近しいことができないか?」を考えて設計するとよき。

AWS CLI

AWS CLI
AWS CLIでaws configureコマンドにprofileオプションを付けて使ってみた

aws の web console 操作について cli でやりたいときにつかうやつ。iam user 作ってそいつのアクセスキーで profile 設定してから利用する。認証情報および profile 設定は ~/.aws/credentials ~/.aws/config に保存されてる。

# IAM USER + そいつのアクセスキーを払い出してから
$ aws configure --profile ${ACCOUNT_NAME}
> AWS Access Key ID [None]: ****************DMH2
> AWS Secret Access Key [None]: ****************bHBU
> Default region name [None]: ap-northeast-2
> Default output format [None]:

# 設定の確認
$ cat ~/.aws/config
[default]
region = ap-northeast-1
[profile other-account]
region = ap-northeast-2

$ cat ~/.aws/credentials
[default]
aws_access_key_id = ****************GIXI
aws_secret_access_key = ****************dMYm
[other-account]
aws_access_key_id = ****************DMH2
aws_secret_access_key = ****************bHBU

aws 関連の cli ツールを使うときは、だいたいどのアカウントを使うか --profile オプションで指定する感じになる。

Refs


Management Services

AWSの膨大で複雑なサービス群をすべて「たった1行」で説明していくとこうなる

Amazon Detective / GuardDuty

セキュリティ上の驚異をログデータなどから分析・調査・評価するサービス。

AWS Budget

AWS Budgets
AWSの料金アラートの違い
Amazon Chime および Slack で予算アラートを受け取る

  • 予算管理するためのアラート送信サービス
  • chatbot と組み合わせて slack 送信とかできる

System Manager

AWS サービス全体の管理・運用を補助するサービス。

Session Manager

EC2 などインスタンスへの SSH セッションを管理できる機能。

$ aws ssm start-session --target i-xxxxxxxxxx

IAM

IAM ID(ユーザー、グループ、ロール
AWS IAM についてまとめ

AWS サービス・リソースに対するアカウント・ロールの権限管理ができる。

  • Policy: AWS リソースに対する、何らかのアクションを許可/制限する、といった権限の最小単位
    • S3 Resource arn:aws:s3:::hoge-bucket に対して読み取り Action s3:ListBucket を許可 Allow するなど
  • Role: 上記 Policy を 1 つ以上組み合わせて作成し、User や Group や EC2 などのリソースに付与することができる権限のまとまり
  • User: 文字通り AWS サービスを利用するユーザリソース
    • AWS Root ユーザは基本使わずに、様々な用途に応じたユーザをこちらで発行する
    • 実際に人が用いるアカウントの他に、プログラムでリソースを操作する際にも利用される
  • Group: User を束ねるグループ、ここに Role を付与して複数 User の Role をまとめて管理とかできる

STS

認証・認可のための Token 発行サービス。

CloudWatch

CloudWatch は AWS の各種リソースのモニタリングサービス。2週間分の監視データを常に保存しており、オンプレミスでいうところの監視サーバみたいなサービスを導入できる。監視対象についてアラーム・通知を飛ばしたりクーロンっぽくバッチ ( lambda ) を走らせたりできる。

CloudWatch Alarm

【初心者向け】Amazon CloudWatch Alarmについてまとめてみた

CloudWatch Management Console より以下メトリクスを監視 → 閾値を超えた際にアラーム ( アラートメールなど ) を送信したりできる。

  • CPU 使用率
    1. アラームを作成
    2. EC2 > インスタンス別メトリクス
      • インスタンス ID: EC2 のインスタンス ID ( i-d4a... )
      • メトリクス名: CPUUtilization
    3. アラーム定義作成
      • アラームしきい値: >= 80 / 間隔 5 分間 / 1 データポイント
      • アラームアクション: 通知
  • システムチェック ( EC2 ステータス )
  • ログ
  • ディスク使用率
  • メモリ使用率

CloudWatch Logs

Amazon CloudWatch Logs とは
フィルターとパターンの構文

EventBridge + SNS + AWS Chatbot と連携して slack 通知

Rails のログを CloudWatch Logs へ JSON で送って検索可能なデータストアにする

AWS CodeDeploy

アプリケーションの CI/CD サービス。CodeCommit, CodeArtifact, CodeBuild, CodeDeploy, CodePipeline の組み合わせで使う (似たような名前でややこしい ...) 。


Network Services

Amazon VPC

リソースを組み合わせた仮想プライベートネットワークを構築できる。仮想オンプレ環境作ったり、EC2 や RDS などサーバインスタンスを利用する際にはこれで仮想ネットワークを切って、中に入れる感じ。

【ネットワーク】 AWSと社内をつなぐネットワークはどうするの?

Route53

DNS サービス、ドメイン登録 → Web アクセス可能な AWS リソースの host へ CNAME で飛ばしたりできる。

Elastic Load Balancing

通称 ELB。ネットワーク負荷分散のためのロードバランシングサービス。

  • ALB: Application Load Balancer - HTTP/2 や WebSocket にも対応した Web アプリ用ロードバランサ
  • NLB: Network Load Balancer - TCP トラフィックなどネットワーク用ロードバランサ
  • CLB: Classic Load Balancer - EC2 のロードバランシングに特化したロードバランサ

CloudFront

キャッシュ、URL ルーティングなど機能豊富な CDN サービス。S3 や EC2 の前段に噛ますみたいな構成で使う。

AWS WAF

Amazon Simple Email Service

Amazon Simple Email Service
Amazon SES でメール受信が出来るようになりました!

  1. sandbox の解除
    • dashboard から request 送る感じ
    • 文章は、送信頻度・目的 (マーケ、トランザクション)・苦情対策体制の要点伝えて chat gpt に作ってもらうといい
  2. route53 に host zone 作成
    • 先に domain は取得しておく
  3. verified identify 作成 => status success 待ち
    • domain or email verification する
    • domain 名以外は default のままで ok
    • txt レコードの required action 出るけど hostzone 設定済みなら少し待てば自動で付与される
  4. bounce feedback 通知設定
    • verified identify > 通知 > フィードバック通知から sns 作成 & 登録
  5. SPF (Sender Policy Framework 送信元ドメインのサーバポリシー) と MAIL FROM 設定
    • custom mail from domain ってやつを設定 (サブドメインみたいなやつ)
    • MX, TXT レコードを DNS レコードへの発行ボタンから route53 へ publish
  6. DMARC (Domain-based Message Authentication, Reporting, and Conformance 送信元ドメインの認証失敗時の処理ポリシー) 設定
    • route53 のマニュアル にある通りに txt レコードを route53 へ登録 (ドメイン名は変えるぽい)
    • レコード名 _dmarc.your-domain.com レコードタイプ TXT"v=DMARC1;p=quarantine;pct=25;rua=mailto:dmarcreports@your-domain.com" みたいな?
  7. DKIM (DomainKeys Identified Mail 送信元ドメインの電子署名) 設定
    • 3 で easy dkim を enabled にしたら自動的に route53 に publish されるぽい
    • 一応当該の cname レコードが 3 件入ってるか見てみる
  8. SMTP 設定
    • ses 認証 iam user を作成
    • こいつの smtp の username, password を download
    • この ses smtp から送信する際に FROM メールアドレスが verified identify の設定に応じて信頼性・正当性証明される感じ
    • port は 587 でいい

dkim や dmarc や spf などは ↓ のような不正対策で、やらんと迷惑メール行き。プログラムから SMTP 送信するときは送信メールの from の サブドメイン部分を を MAIL FROM と一致させる必要あるので注意。

sandbox 解除 request 例文 (next-auth で使う例)

Dear AWS support team.

We are developing a small application for an enterprise. This application is intended for a limited number of users, and is used by a few to several dozen people, and accessed several times a day.

Our application is designed to authenticate a user's login with a temporary URL via email submission. This authentication system adopts passwordless authentication using a library called next-auth. When the user requests login, the application will send the user an email containing a temporary URL. The user can securely log into the application by clicking the URL in that email.

This email is sent via SMTP from our Node.js application running on AWS ECS using Amazon SES. This system is only used for login transactions and does not send mass marketing emails or notification emails to users.

Email recipient list is only for a select group of around ten users. The management of the recipient list (adding and removing users) is performed manually by the developer as needed. And we anticipate sending around 0 to 10 emails per day.

As our application is not directed towards consumers, we do not provide an unsubscribe link or similar in our emails. However, in case our domain is misused, such as for sending confidential information or for cyber attacks, we receive notifications via Slack if complaints are raised, and the developer takes appropriate action.

Sandbox 環境での送信テスト

AWS SESを使いたてでメールを送信しても届かない時に確認したいこと

sandbox 開けるまでは verified identify でメールアドレスの認証をさせれば、そのアドレスだけには送信可能になるらしい。

Amazon Time Sync Service

Amazon Time Sync Service

そのまんま、時刻同期サービス。VPC 内リソース (EC2 とか) から外部アクセスなしに時刻同期できる他、公開 NTP サーバとしても利用していいみたい。


Serverless Services

Lambda

サーバレスでプログラム (Lambda 関数) を実行できるサービス。ほかサービスと組み合わせて様々な用途に利用できる。

  • Batch でジョブをセットしてサーバレス cron 作ったり
  • API Gateway と組み合わせてサーバレスな API サーバ作ったり
  • CloudFront のリクエストを受けた際の callback にしたり
  • CloudWatch Events/Alerm をトリガに通知などを走らせたり

API Gateway

Amazon API Gateway

AWS Batch

AWS Batchを使ってcronのような定期的処理を実現する

App Sync

AWS AppSync Developer Guide

GraphQL のマネージド・サービスとして Pub/Sub な API を提供する。裏で DynamoDB とか Lambda とか使う感じみたい。


VM/Container Services

EC2

Amazon Elastic Compute Cloud - Wikipedia

AMI ( Amazon Machine Image ) をもとに VM サーバインスタンスを展開できるサービス。

Elastic IP

インスタンス生成時の自動割当 IP アドレスは 固定化されていないため再起動時に変わってしまう 。Elastic IP を取得しインスタンスへ割り当てることで、IP アドレスをインスタンス毎に固定化できる。

Elastic IP アドレスの保持数はアカウント毎に有限で「申請して無料で増やす」ことができる。また「どのインスタンスにも割当たっていない Elastic IP アドレス」は課金対象になってしまう。インスタンスを増やす度に事前に追加申請をしていく運用が必要になる。

Amazon Linux AMI

AMI として Amazon Linux を選ぶと、最初から yum リポジトリに Amazon 提供リポジトリが登録されている。当然 CentOS や Ubuntu のパッケージ管理システムとは別なので、依存問題注意。

CentOS イメージからインスタンス作る

OSごとのオフィシャルなAMIをまとめてみた

AWS Marketplace で「Sold by CentOS.org」となっているのが CentOS.org 提供のオフィシャル AMI です。コミュニティ AMI から変なのいれないように。

ECS, EKS, Fargate

Amazon ECS - aws.amazon.com

Amazon Elastic Container Service (Amazon ECS) は、Docker コンテナをサポートする拡張性とパフォーマンスに優れたコンテナオーケストレーションサービスです。これにより、コンテナ化されたアプリケーションを AWS で簡単に実行およびスケールできます。

EC2 が VM ベースなのに対し、ECS は Docker コンテナベースでアプリケーションを動かすためのサービス。EKS は k8s のマネージド・サービス。ECS, EKS ともに内部で EC2 を使うか Fargate (Heroku Dyno みたいなやつ) を使うか選べる。

Getting Started

モノリシックアプリケーションをマイクロサービスに分割する - aws.amazon.com
DockerとECSで初めてマイクロサービス化(するチュートリアルを)してみた - dev.classmethod.jp - 上記の解説

このチュートリアルでは、モノリシックな node.js アプリケーションを Docker コンテナにデプロイし、ダウンタイムなしでアプリケーションをマイクロサービスに分離します。この node.js アプリケーションでは、スレッド機能付きのシンプルな掲示板とユーザー間のメッセージをホストします。


Storage Services

S3

Amazon S3
S3の料金体系が分かりにくいと聞かれたので纏めた S3のアクセスコントロールまとめ - これ絶対理解して

いわゆるオブジェクトストレージ/アクティブストレージサービスと呼ばれるもの。assets がちょろっとある程度の軽い Web サイトなら不要だが、ファイルを扱う Web アプリならストレージ選定はこれ一択。

RDS

Amazon Relational Database Service (RDS)

マネージドな RDBMS の管理サービス。

Aurora Serverless

一般公開された Amazon Aurora Serverless v2 を東京リージョンで試してみた
ACU(Aurora Capacity Unit)ってなに?

  • serverless な rds
  • スケール遅いけど「停止」もできて安い v1 と、停止できないけどスケール早い v2 みたいなざっくり 2 パターン
  • v2 は ACU (キャパシティ) で料金が決まるっぽい
    • ACU はざっくり「処理性能」と「データ容量」のキャパシティで 1 ACU 2 GiB という単位
    • 最小と最大スケールを 0.5 ~ 128 の間で決められる
    • 0.5 (1 GiB) の 2 インスタンスで常時稼働すると毎月 2 万円くらいになる
    • 8 (16 GiB) で通常 rds の db.r5.large spec 相当
    • ので「アクセス頻繁じゃないけど、具体的にはスケールどこまですればいいのかわかんない」なら最小 0.5 ~ 最大 4 とかで初めても十分っぽい

DynamoDB

Amazon DynamoDB
DB設計者のための DynamoDB の解説
DynamoDB の基礎知識とまとめ

Key-Value 型のマネージド NoSQL データストア。高速に動作する KVS という点で Redis と似ているが、永続化が必要なケースに利用される。

絞り込みで使う値をパーティションキーにして、ソートキーとの組み合わせで一意性を保たせるのがよさそう。ざっくり以下のような特徴を念頭に入れて選定するといい。

  • 毎秒 2,000 万件を超えるリクエストをサポート
  • SQL のような検索や集計はかなり低速 & リソースを食うので向いていない
  • 検索では Scan と Query が実行できる、基本 Query だけで設計すべき
    • Scan は全体スキャンで負荷が高いかわりに全項目を探索可能
    • Query は絞り込みが効いて軽いがパーティションキー、ソートキー、インデックス以外指定不可
  • パーティションキー (HASH Index)ソートキー (RANGE Index) の設計が大事
  • 上記パーティションキーとソートキー以外は、テーブル作成時に定義しない
  • GSI - グローバルセカンダリインデックスを後から追加して、Query の条件にできる (制限あり)
  • プロビジョニングスループットに対して課金される
  • データ長は定義しない、項目の最大サイズは属性名を含めて 400KB みたい

Backup & Restore

DynamoDBで継続的バックアップとポイントインタイムリカバリーが可能になりました

  • Point-in-time Recovery で継続的バックアップ可能
    • 35 日まで保存、直近 5 分前まで復元できる
  • On-Demand Backup and Restore
    • 手動バックアップ・復元も可能

Query by Athena

DynamoDBをS3へExportして、Glue+AthenaでSQLを実行する

S3 に export して athena で sql 検索とか。


Media/Other Services

MediaConvert

https://docs.aws.amazon.com/mediaconvert/latest/ug/mediaconvert-guide.pdf

動画周りの参考文献

Amazon Interactive Video Service

Amazon GameLift

https://aws.amazon.com/jp/gamelift/

  • 大規模マルチプレイなゲームサーバの構成・管理サービス
  • ざっくりいうと、マッチング => ゲームの部屋立てリクエスト => 空いてる EC2 にゲームアプリデプロイして割当て ... みたいなことしてくれるやつ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment