カテゴリー: aws

AWSの情報をまとめる

  • Amazon Redshiftワークロード管理(WLM)について

    Amazon Redshiftワークロード管理(WLM)を使用すると、

    ユーザーはワークロード内の優先順位を柔軟に管理することができる。

    これによって短時間で高速に実行されるクエリが、長時間実行されるクエリの背後にあるキューによって処理がつまることがなくなる。

    よって、ワークロード管理によって部門の違うワークロード処理を分割するという戦略を取ることができる。

    Amazon Redshift WLMについて

    内部システムキューやユーザーがアクセス可能なキューなど、さまざまなタイプのキューの構成パラメーターを定義するサービスクラスに従って、実行時にクエリキューを作成する。

    Amazon Redshift について注意すべきポイント

    レプリカを起動させることで、高パフォーマンスを実現することはできない。

    Redshiftのクエリのパフォーマンスを向上させる、または CPU、メモリ、I/O の過度の使用率に対応する場合、AWS マネジメントコンソールから Elastic リサイズを使用して、または ModifyCluster API を使用してデータウェアハウスクラスター内のノード数を増やすことになる。

    Amazon Redshift の機能の “同時実行スケーリング” は、数千の同時実行クエリに対応する場合でも一貫して高速のクエリパフォーマンスを提供する。

    この機能を使用すると、Amazon Redshift によって必要に応じて一時的な容量が自動的に追加され、大量の需要を処理することができるようになる。

  • ElastiCache を Redis / Memcached どちらを選ぶべきか

    キャッシュなのでどちらを選んでも一応動くことは動くのだが、それぞれのサービスの特化した機能について整理する。

    Amazon ElastiCache for Redis の特徴

    アルタイム処理に利用するのに最適なサービス。

    適切なユースケースとして適切なデータストレージを使用し、データアクセスパターンを考慮することで、パフォーマンスが大幅に向上するだけでなく、費用対効果の高いソリューションも提供することができる。

    リアルタイムデータの計算処理を改善するためには最適なソリューション。

    Amazon ElastiCache for Memcached の特徴

    データをミリ秒で検索できる、オープンソースの分散型メモリ内キー値ストア。

    セッションデータ管理など単純な処理を高速化する際は Memcachedの方が運用が容易であり望ましいユースケースになる。

  • AWS KMS と CloudHSM について整理する

    似たように感じるサービスでもあるため、整理する

    KMS

    暗号化キーを簡単に作成して管理し、幅広い AWS のサービスやアプリケーションでの使用を制御できるようになります。(中略)AWS KMS は AWS CloudTrail と統合されており、すべてのキーの使用ログを表示できるため、規制およびコンプライアンスの要求に応えるために役立ちます。

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

    CloudHSM

    クラウドベースのハードウェアセキュリティモジュール (HSM) です。これにより、AWS クラウドで暗号化キーを簡単に生成して使用できるようになります。

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

    両サービスとも暗号化キーの生成できるようだ。

    ユースケースに分けて整理する。

    KMS のユースケース

    サーバにアクセスする際の共通鍵の管理など

    CloudHSM のユースケース

    データの暗号化に使用されるSSLキーの安全性を確保する際に使う

    CloudHSMを使用し、アプリケーションサーバーログがサーバーサイド暗号化(SSE)を使用してS3バケットに保持する仕組み作る。

    CloudHSMは、アプリケーションログが永続的かつ安全に保存されるようになる。

    正確に理解しておくべきポイント

    AWS KMSはAWS CloudHSMのようにSSL処理をオフロードするといった対応はできない

    実は公式にもこれら2つのサービスについての記載がある

    https://aws.amazon.com/jp/kms/faqs/

    black belt ではもう少しわかりやすく整理されている

    https://d1.awsstatic.com/webinars/jp/pdf/services/20190723_AWS-Blackbelt-CloudHSM.pdf

    AWS KMSはAWS CloudHSMのようにSSL処理をオフロードするといった対応はできないという点は大きな特徴になる。

    https://docs.aws.amazon.com/ja_jp/cloudhsm/latest/userguide/ssl-offload-overview.html

    サポートする暗号鍵も違う

    KMS の場合共通鍵のみだが、CloudHSM の場合、共通鍵と公開鍵がサポートされている。

    VPC内で稼働するサービス : VPC外からアクセスする場合には、CloudHSMがあるVPCにルーティングする必要があるようだ。

    CloudHSM はリージョン内で稼働するサービス になる。 異なるリージョンからはCloudHSMに アクセス出来ない。

  • Amazon Database Migration Service (DMS) を使った移行について

    概要

    AWS Database Migration Service を使用すると、データベースを短期間で安全に AWS に移行することができる。

    以下2点はとても大きな特徴だ

    • 移行中でもソースデータベースは完全に利用可能な状態に保たれる
    • データベースを利用するアプリケーションのダウンタイムを最小限に抑えられる

    DMS についてまとめた。

    DMS を使った Database Migration をする際の流れ

    1. ソースデータベースからターゲットデータベースにデータを割り当てる。
    2. 移行するタスクを実行するのに十分なストレージと処理能力を持つレプリケーションインスタンスを作成する

    AWS DMSタスクは、すべての処理が行われる場所になる。ここで

    • ログ記録要件
    • 制御テーブルデータ
    • エラー処理

    など、移行と特別な処理に使用するテーブルとスキーマを指定することができる。

    タスクを設定方法について

    移行タスクを作成する前に、DMSコンソールで以下3つを作成する。

    • ソースエンドポイント
    • ターゲットエンドポイント
    • レプリケーションインスタンス


    移行タスクを調整するために多くのタスク設定を指定することが可能だ。

    AWS マネジメントコンソール、 AWS CLI、または AWS DMS API を使用して設定する。

    これらの設定には、以下の項目を変更することが可能

    • 利用するテーブル構成
    • レプリケーションプロセス
    • 移行エラーの処理方法
    • エラーのログ記録
    • および制御テーブル情報を指定

    移行のタイプは “migrate existing data and replicate ongoing changes (初期転送後、差分転送開始)”を指定すると、タスクを作成した後、直ちに実行できる。

    この点は Classmethod のブログが非常にわかりやすい。

    https://dev.classmethod.jp/articles/lets-try-aws-database-migration-service-dms/

    必要なメタデータ定義を含むターゲットテーブルが自動的に作成されてロードされるため、継続的なレプリケーションを指定できる。

    ただし、以下の仕様を理解する必要がある。

    • デフォルトではタスクを作成するとすぐに、AWS DMS によりタスクが開始される。
      ただし、タスクの開始を延期することが可能。
    • ・AWS DMS コンソール、AWS CLI、または AWS DMS API を使用して、タスクのモニタリング、停止、再開を行うことができる。 
  • Amazon Rekognition Video について

    あまり馴染みのないサービスの一つ Amazon Rekognition Video について調べた。

    Amazon Rekognition Video は ライブビデオストリーミング をリアルタイムで解析して、顔を検出し、判別することができる。

    ユースケース

    • Amazon Kinesis Video Streams のストリーミングデータの処理
      Rekognition Video に入力し、最大数千万もの顔データと照らし合わせて、超低レイテンシーでの顔認識を行うことができる。
    • バッチ処理
      Amazon Rekognition Video では Amazon S3 に保存した録画データを解析することもできる。

    アクセス方法


    Amazon Rekognition には、Amazon Rekognition API、AWS マネジメントコンソール、および AWS コマンドラインインターフェイス (CLI) を使用してアクセスすることが可能。

    コンソール、API、CLI では、Rekognition API を使用して、ラベル検出、顔分析、顔照合、顔検索を行える。

    利用方法

    AWS Lambda には Rekognition 用の設計図が用意されている。

    それを使うことで s3 や DynamoDB といった AWS データストアでのイベントに基づいて画像分析をすることができる。

    Amazon Rekognition Videoは、Amazon Kinesis Video Streamsを使用してビデオストリームを受信および処理する。

    分析結果の利用方法

    分析結果は、Amazon Rekognition VideoからKinesisデータストリームに出力され、クライアントアプリケーションによって読み取られる。

    Amazon Rekognition Videoは、ストリーミングビデオの分析を開始および管理するために使用できるストリームプロセッサ(CreateStreamProcessor)を提供する。 

    分析結果はKinesis Data Streams Consumerに読み取られる。(Kinesis Data Streams Analyticsではない)

    また、本題とは異なるが、以下のサービスについて補足

    Amazon Kinesis

    リアルタイムのストリーミングデータを簡単に収集、処理、分析できる。

    コスト効率よくストリーミングデータを処理するための重要な機能を提供。

    設定としては、Kinesis Agent を設定してデータを収集し、

    Amazon Kinesis Data Firehoseを使用してエンドツーエンドのデータ配信ストリームを作成する。

    その上で、

    Amazon Kinesis Data Analytics で SQL クエリを使用してリアルタイム分析を実施することができる。

    Amazon Kinesis Data Streams

    Amazon Kinesis Data Streams によって処理されたレコードはダッシュボードに送信されて、さまざまなAWSサービスへのデータ送信に使用できる。

    分析するアクションとして、アプリケーション側にAmazon Kinesis Client Library(KCL)ワーカーを組み込んで行動分析を実施することができる。

    また、Amazon Kinesis Data Streamsアプリケーションは、Amazon Kinesisストリームからデータをデータレコードとして読み取る。

    これらのアプリケーションはAmazon Kinesis Client Library(KCL)を使用することでAmazon EC2インスタンスで実行するデータ分析アプリケーションを作成することができる。

    Amazon Kinesis Data Analytics

    Amazon Kinesis Data Analytics は、ストリーミングデータの分析に利用するサービス。Amazon Kinesis Data Analytics を利用すると、ストリーミングアプリケーションを構築し、管理し、AWS のサービスと統合する作業がシンプルになる。

    Amazon Kinesis Data Analyticsを利用して、ストリーミングアプリケーションを構築し、管理し、AWS のサービスと統合する作業が実施できる。

    SQL クエリを使用してリアルタイム分析を実施することができる。

  • s3のファイルのバージョニングを有効化した際の挙動

    s3 のバージョン管理を有効した場合の振る舞いについて整理する。

    そもそもバージョニングとは、同じバケット内でオブジェクトの複数のバージョンを保持する手段。

    バージョニングを使用して、Amazon S3 バケットに格納されたあらゆるオブジェクトのあらゆるバージョンを、格納、取得、復元することができるようになる。

    バージョニングを使用すれば、アプリケーション障害からも、簡単に復旧でき流。

    S3バージョン管理を有効にすると、既存のファイルはすべて、バージョンIDがNULLになる。

    バージョン管理後に追加されると、そのファイルの バージョンIDは ランダム値が割り振られる。

    公式ドキュメントは以下の通り

    https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/Versioning.html

  • s3内の特定ファイルを特定の国に対して利用できないようにする際に考えること

    以下の2つの要件を満たしたい時がある

    • 特定の国に対して利用できないようにしたい。
    • コンテンツを世界中のユーザーに低レイテンシーで配信したい。

    CloudFront ウェブディストリビューションを活用する。

    https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html

    CloudFront ウェブディストリビューションを使うことで配信しているコンテンツに対し特定地域のユーザーによるアクセスを回避することができる。地域制限を使用するには、次の 2 つの方法が考えられる。

    ・CloudFront の地理制限機能の使用
    エッジロケーションによる地理的制限を有効化。

    ディストリビューションに関連するすべてのファイルへのアクセスを制限し、国レベルでアクセスを制限する場合は、この方法を使用する。 

    これをすると、S3 の公開しているバケットの中のファイル全てに制限をかけることができる。特定のファイルにのみ制限をかけることはできない。

    ・サードパーティの位置情報サービスの使用

    上記 CloudFront の地理制限機能を使って要件を満たすことができない場合は、サードパーティのツールを探すことになる。

    なお、Lambda@エッジを利用した制限アルゴリズムを連携するといった機能は現状存在しない。

  • VPC内インスタンスからインターネットに対して特定ドメイン以外のアウトバウンド接続を拒否する際に考えること

    ネットワークACLはURLに基​​づいてリクエストをフィルター処理できない。

    プロキシサーバーを利用して制御することで回避が可能。

    プロキシサーバーはクライアントからの要求をフィルターし、製品の更新に関連する要求のみを許可するため、製品の更新以外のすべての要求のフィルターすることができる。

    プロキシサーバーとは、内部ネットワークのセキュリティを損なわずにネットワークの外部と接続できるようにする、LAN 上のコンピューターを指す。

    プロキシサーバーは内部コンピューターのアイデンティティを保護するために一般的に使用される。

    プロキシサーバーは、内部ユーザーおよびサーバーからの要求の仲介役として機能して、多くの場合はコンテンツをキャッシュして後続の要求を高速化する。

    AWSではVPNまたはAWS Direct Connect接続を使用して既存の企業プロキシサーバーインフラストラクチャを活用したり、内部ELBを備えたSquidプロキシサーバーなどのソフトウェアを使用してAWSでフォワードプロキシファームを構築したりすることが一般的なユースケースになる。

  • CloudWatch Logsで任意の文字列を監視してグラフ化する

    CloudWatch Logsで任意の文字列を監視してグラフ化する

    概要

    シェルでラップして見たい値をCloudWatchに飛ばして監視する。

    今回はその仕組みを流用してサーバのプロセス数を監視監視した。

    ディレクトリ作成

    どこでも良い。今回はec2-userの下にcloudwatchディレクトリを作成する

    mkdir /home/ec2-user/cloudwatch
    cd /home/ec2-user/cloudwatch

    シェル作成

    vi CustomMetrix.sh

    #!/bin/sh
    CUR_DIR=/home/ec2-user/cloudwatch
    
    export JAVA_HOME=/usr/lib/jvm/jre
    export AWS_CLOUDWATCH_HOME=/opt/aws/apitools/mon
    export EC2_REGION=ap-northeast-1
    export AWS_CREDENTIAL_FILE=${CUR_DIR}/credential
    InstanceId=`cat /var/tmp/aws-mon/instance-id`
    # 設定ファイル
    PROCESSCONFIG=${CUR_DIR}/process-conf.txt
    
    # Process Check(設定したファイルから読み込む)
    cat ${PROCESSCONFIG} | sed '/^$/d' | grep -v '^#.*' | while read PROCESS
    do
    COUNT=`ps aux | grep ${PROCESS} | grep -v grep | wc -l`
    echo ${PROCESS}:${COUNT}
    /opt/aws/bin/mon-put-data --metric-name ${PROCESS} --namespace "CustomMetrix" --dimensions "InstanceId=${InstanceId}" --value ${COUNT}
    done
    
    # LoadAverage(1分間の測定値を取得)
    /opt/aws/bin/mon-put-data --metric-name "LoadAverage" --namespace "CustomMetrix" --dimensions "InstanceId=${InstanceId}" --value `cat /proc/loadavg | awk '{print $1;}'`

    設定ファイル

    process-conf.txt

    httpd
    crond

    認証情報

    credential

    AWSAccessKeyId=aaaaaaaa
    AWSSecretKey=ccccccccc

    実行

    sh ./CustomMetrix.sh

    httpd:0
    crond:1

    結果

  • ecr get-login を使わずコンテナを ECR に push する

    ecr get-login を使わずコンテナを ECR に push する

    今までは

    aws ecr get-login --no-include-email --region ap-northeast-1

    のコマンドで ECR に login して container を push することができたが、

    近年上記コマンドが実行できなくなってしまった。

    代替コマンドとして get-login-password を使うことでログインができる

    aws --profile stg ecr get-login-password | docker login --username AWS --password-stdin https://123456789.dkr.ecr.ap-northeast-1.amazonaws.com

    Login Successeded となれば成功だ