AWS API Gateway(1)API Gatewayの概要

API Gatewayとは

API Gatewayは、完全マネージドのAPI作成サービス。受信したAPIコールと送出したデータ量に対して課金される。スロットリングによるトラフィック管理ができるため、DDoSやトラフィックの激増にも対応することが可能であり、リミットを超えたリクエストにはHTTPステータス 429が返却される。また、レスポンスはキャッシュ可能であり、レイテンシやトラフィック等を低減することができる。

API Gatewayは、IAMやCognitoを用いたアクセス認証署名付きAPIコールなどを使用することができるために柔軟にセキュリティ管理ができる。また、CloudWatchやCloudWatch Logsを用いた監視が可能で効率的なデバッグとモニタリングを実現している。

![API Gateway]https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/BackplaneArch.png

エンドポイント

API Gatewayは、特定のリージョンにデプロイされる。エンドポイントは以下の3種類がサポートされている。エンドポイントは、HTTPSのみサポートされている。

種類 内容
エッジ最適化 CloudFrontネットワークにデプロイ
リージョン リージョンにデプロイ。EC2 インスタンスまたは API と同じリージョン内のサービスから送られる場合に使用すると良い。
プライベート VPCからのみアクセス可能

リソースとメソッド

APIは階層構造となっており、リソースやメソッドをネストすることも可能。指定可能なメソッドは以下の通り。

種類 実行内容
POST 子リリースの作成
PUT 既存リソースの更新
DELETE リソースの削除
PATCH リソースの更新
HEAD テストシナリオに使用
OPTIONS 通信オプションに関する情報を取得する度に使用できる

CROSを有効にするためには、OPTIONSメソッドのプリフライトリクエストに対してAPIが応答することが必要であり、このリクエストに対して、HTTPステータス 200Access-Control-Allow-Method, Access-Control-Allow-Headers, Access-Control-Max-Ageヘッダを含んだレスポンスを返す。これらの挙動には、統合リクエスト/レスポンスのMockタイプを使用する。

リクエストに対して、 URLクエリ文字列パラメータHTTPヘッダHTTPボディを検証し、必須の項目が含まれているかやキャッシュを行うかなどを指定することができる。HTTPボディがapplication/json形式である場合は、JSON Schemaを用いてJSON形式を指定することもできる。

統合リクエスト/レスポンスとマッピングテンプレート

API Gatewayとバックエンドとを接続する内部インタフェース。マッピングテンプレートを用いることで、フロントエンド(API Gateway)とバックエンドのデータ形式を変換することができる。

  • Lambda関数の呼び出し
  • 他のAWSサービスの呼び出し
  • HTTPウェブサイトのアクセス

の3つのバックエンドへのアクセスに対応している。Lambdaプロキシ統合を用いることで、API GatewayとLambdaがより協力に結合され、リクエストヘッダやパス変数などがLambdaに渡される。また、HTTPプロキシとして使用することも可能である。

デプロイ

APIを利用可能とするためには、APIのリソースおよびメソッドのスナップショットであるAPIのデプロイを実施する必要がある。APIをバージョン管理できるために、新しいバージョンを簡単にテストしリリースすることが可能である。

1アカウント1リージョンあたりのAPIの上限は、10000RPSである。これ以上のアクセス負荷にも耐えうる値とする場合は上限緩和申請が必要となる。

AWS(1)AWSの概要とメリット

クラウドとは

クラウドとは、従量課金でWEB上からオンデマンド提供されるITリソースである。

AWSのメリット

AWSのメリットは、先行投資となる先行投資資本となるインフラコストを、ユーザのビジネス拡大にあわせた低額の変動費に移行できることである。また、スケールによる大きなコストメリットを享受することが可能で、自社環境よりも低い低額コストを実現できる。スケールアップおよびスケールダウンがわずか数分で実現できることから、キャパシティーの推測が不要となる。1クリックでITリソースを手に入れることが可能となるため、リソースを用意する時間が大幅に短縮され、組織の速度と迅速性が向上する。またこれらのことから、ユーザはデータセンターの運用や保守への投資が不要となり、ビジネスを差別化するプロジェクトに集中できる。また複数のリージョンに簡単にデプロイできることから、グローバル化も容易である。

グローバルインフラストラクチャ

リージョン

リージョンとは、世界中の物理的場所であり、リージョンに複数のアベイラビリティゾーン(AZ)が配置される。他のリージョンとは完全に分離されている

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

独立したデータセンターで、冗長性ある電源とネットワーク、接続性を実現している。洪水の影響が及ばない場所に設置され、複数のTier1プロバイダに接続されている。各AZ間は低遅延リンクで接続されている。

サービス

AWSの各種サービスには、次の3つのサービスレベルがある。

種類 サービスの例
AZサービス EC2, RDS, ELB, ElastiCache
リージョンサービス S3, DynamoDB, SQS
グローバルサービス IAM, Route 53, Cloudfront

AWS導入の道のり

AWSを導入するためには、まず調査を行う。移行対象は非クリティカルなアプリケーションとし、セキュリティとユーザロール、VPCをセットアップ、開発/テスト環境をデプロイする。次に本番環境へアプリケーションを移行し、分析ワークロードをデプロイする。

本番環境に移行後に検討チームを結成し、プラットフォームの検討とAWSを拡張を行う。また、IT戦略を見直しクラウドに一致させる。また、DevOpsの導入オートメーションとコードリファクタリングを行う。

ベストプラクティス

AWSでは、オンプレミスとは異なるベストプラクティスが存在する。

  1. 故障に備えた設計で障害を回避
  2. コンポーネント間を疎結合で柔軟に
  3. 伸縮自在性を実装
  4. 全ての層でセキュリティを強化
  5. 制約を恐れない
  6. 処理の並列化を考慮
  7. さまざまなストレージの選択肢を活用

APNパートナーに提供されるサービス

APNパートナーは、AWSを導入する企業をサポートすることができる。APNパートナーには以下のツールが提供される。

AWSクイックスタート

人気の高いソリューションの AWS へのデプロイを支援するために、AWS ソリューションアーキテクトおよびパートナーによって構築されたもの

AWS コンピテンシープログラム

習熟した技術を持ち、専門的なソリューションエリアでお客様を成功させられることを実証した APN パートナーに付与

AWS Marketplace

AWSに最適化されたITおよびビジネスソフトウェアのカタログ

費用

AWSの費用体系は従量課金である。どの程度費用が掛かるかは簡易見積もりツールで計算できる。

総所有コスト

オンプレミス環境とクラウド環境の費用を比較する場合は、総所有コスト(TCO)を比較する必要がある。これは、購入と運用、撤去と廃止、機会コスト、サーバ、ストレージ、ネットワーク、人件費、機会コストなどを含む。施設のデフォルトコストは1ラックあたり月25万円+電気代とAWSでは考えている。総所有コストを計算し正しくオンプレミス環境とクラウド環境の費用を比較するためには、TCO計算ツールを利用する。

AWS Kinesis(4)Kinesis Producer Library

Kinesis Producer Libraryとは

Kinesis Client Libraryに付随しているKinesis Producer Library(KPL)を用いることで、Kinesisに容易にデータを投入することが可能となる。KPLを用いることで自動的に複数シャードにデータを投入したり、ユーザレコードを集約してスループットを改善する等が可能となる。複数のレコードを単一のKinesis Recordに集約することで、API呼び出し時に取得できるデータ量が増大させることが可能になるため、より少ないシャード数の用意でデータ量を処理することが可能となる。

またKPLは独立したプロセスで動作しているため、KPLがクラッシュした場合でも他の機能の動作を継続させることが可能である。

Kinesis Producer Libraryを用いたデータ取得処理

パーティションキー

Kinesisへデータを投入する際には、ストリーム名の指定パーティションキーの指定が必要である。パーティションキーは、複数のシャードの中からストリームを追加するシャードを選択するために使用するキーで、均等にシャードを選択するためにシャード数より十分大きい数を用意する必要がある。AWS SDKに付属しているサンプルプログラムでは、現在時刻(Current Millis)をパーティションキーとして使用している。

long createTime = System.currentTimeMillis();
putRecordRequest.setPartitionKey(String.format("partitionKey-%d", createTime));

リージョンの設定

KPL は Kinesis Client Library と同様に、リージョン指定が無いとデフォルトのバージニア州(us-east-1)が指定されてしまう。サンプルアプリケーションでは以下の設定を変更する必要がある。

kinesis = new AmazonKinesisClient(credentials);
kinesis.withRegion(Region.getRegion(Regions.fromName(REGION_NAME)));

なお、KinesisProducerConfigurationはProperyファイルからの設定の読み込みにも対応しているため、Propetyファイルからリージョンを指定することも可能である。

Kinesisへの書き込み

Kinesisへのレコードの書き込みは、Kinesis Producer Libraryを用いる方法の他に以下のような手段もある。

  • AWS SDK (Kinesis Stream API)の使用
  • Amazon Kinesis エージェントの使用
  • fluent-plugin-kinesisの使用

AWS EC2(1)EC2の概要

EC2(Elastic Compute Cloud)とは

EC2は、クラウド内で規模の変更が可能なコンピュータ処理能力を提供するウェブサービス。様々な種類の仮想サーバを起動し、Webコンソールやターミナルから操作することが可能である。

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

東京リージョンは、コード名:ap-northeast-1、名称:アジアパシフィック(東京)である。AWS SDK for Javaなどは、デフォルトのリージョンがバージニア州(us-east-1)に指定されていることに注意が必要である。すべてのインスタンスを 1 か所でホストしている場合、同じ場所にあるインスタンスすべてに影響する障害が起きたときに、インスタンスがすべて利用できなくなるため、複数のアベイラビリティゾーンにインスタンスを分散配置することが望ましい。

インスタンスを起動するときは、同じリージョン内にある AMI を選択する必要がある。AMI が別のリージョンにある場合は、これから使用するリージョンに AMI をコピーできる。異なるアベイラビリティゾーンにインスタンスを移行したい場合は、AMIを作成し、このAMIを用いて希望するアベイラビリティゾーンにインスタンスを生成する。

アベイラビリティーゾーンは、各アカウントの識別子に個別にマッピングされる。つまり、アカウントAのap-northeast-1aと、アカウントBのap-northeast-1aは、同じアベイラビリティゾーンを指していない場合がある。また、各アカウントごとに指定できるアベイラビリティゾーンの使用が制限され、アカウントによってリージョン内で使用できるアベイラビリティーゾーンの数が異なる場合がある。

リージョンとアベイラビリティーゾーンに関する概念

インスタンスファミリー

利用用途に合わせて様々なインスタンスの種類が存在する。

カテゴリ 名称 特徴/用途
汎用 M4 通常用途
バーストパフォーマンス T2 普段は殆ど負荷がないが一時的に負荷がある 開発機、小規模システム
コンピューティング最適化 C4 CPU性能が必要な用途 APサーバ、画像処理
メモリ最適化 R3 コアあたりのメモリが大きく大量のメモリが必要な用途 DBサーバ
ストレージIO最適化 I2 高速なIOPSを実現するSSDを内蔵 DBサーバ、ビッグデータ
ストレージ密度最適化 D2 大容量HDDを内蔵 DBサーバ、ビッグデータ
GPUインスタンス G2 GPUコアが必要な用途 グラフィック表示、画像処理

IP

  • Elastic IP
    • 明示的に割り当てられたIP。使用していないと課金される
  • Public IP
    • ランダムに割り当てられるPublic IP
    • EC2をStop/Startすると別のIPが割り当てられる
  • Private IP
    • 必ず割り当てられるIP
    • EC2をStop/Startしても同じIPが割り当てられる

Amazon Linux

デフォルトユーザはec2-user、sudo権限が付与されている。