【AWS】Former2をローカルでホストする際のブラウザ(chrome)拡張機能の利用

概要

既存AWSリソースをスキャンしてCloudFormationテンプレートを生成するOSSツールである”Former2”をローカルでホストする際のブラウザ拡張機能に関するTipsを紹介します。

Former2自体の紹介は、以前ブログ執筆した下記ブログに記載していますのでここでは割愛します。
参考:Former2とは
【AWS】Former2を安全に使うための3つの工夫 - Vの技術ブログ

記載内容

  1. Former2のブラウザ拡張機能
  2. ローカルでホストする際のブラウザ拡張機能の利用
  3. ローカルでホストしたFormer2を複数端末で利用する際のTips

1.Former2のブラウザ拡張機能

Former2の利用形態には、Webサービス(https://former2.com)を利用する形態と、自身のローカル環境にホストして利用する形態があります。 ここでは、まずWebサービスを利用する形態におけるブラウザ拡張機能について紹介します。

Former2で既存リソースをスキャンする際、CORS(Cross-Origin Resource Sharing)が必要なリソース(S3, IAM等)の場合、ブラウザ拡張機能のインストールが必要です。 f:id:VbuiV:20220325221740p:plain 引用:https://former2.com/#section-setup-introduction

Webサービスとして提供されているFormer2を利用する場合は、ブラウザ拡張機能の利用は簡単です。
例えばchromeの場合、chromeウェブストアから追加するだけです。 f:id:VbuiV:20220325221809p:plain 引用:Former2 Helper - Chrome ウェブストア

2.ローカルでホストする際のブラウザ拡張機能の利用

ここではローカルにホストして利用する形態におけるブラウザ拡張機能について紹介します。 ローカルにホストして利用する方法については下記の記事を参照してください。

参考:Former2をdockerでホストする
【AWS】Former2を安全に使うための3つの工夫 - Vの技術ブログ

Former2をローカルにホストして利用する場合の注意点として、公式GitHubには以下の記載があります。

Extension support will also be available if you host on 127.0.0.1 or localhost, otherwise you can modify the extension as needed.
引用:https://github.com/iann0036/former2

上記注意点の通り、Former2を動作させるサーバとアクセス元の端末が異なる場合、chromeウェブストアからではなく、GitHubで公開されているソースからブラウザ拡張機能を読み込む必要があります。

ソースからブラウザ拡張機能を読み込む手順(chrome)


  1. Former2 HelperをGitHubからダウンロードしたうえで、"パッケージ化されていない拡張機能を読み込む"から読み込む。読み込んだ際に生成される"Extension ID"をメモする。 f:id:VbuiV:20220325221831p:plain 参考:Former2 Helper
    GitHub - iann0036/former2-helper: A browser extension to help avoid CORS issues for former2.com

  2. manifest.jsonにURLを追加する。(Former2をホストするサーバと利用端末が異なる場合) f:id:VbuiV:20220325221903p:plain 引用:https://github.com/iann0036/former2/blob/master/HOSTING.md

  3. 先ほどメモしたExtension IDを使ってjs/app.jsを修正する。 f:id:VbuiV:20220325221851p:plain 引用:https://github.com/iann0036/former2/blob/master/HOSTING.md


3.ローカルでホストしたFormer2を複数端末で利用する際のTips

ローカルでホストしたFormer2を複数端末で利用する際、上述の"js/app.jsのExtension IDを修正する"が曲者です。

chromeのExtension IDは読み込んだ際に生成されます。このExtension IDがjs/app.jsに記載したものと異なるとブラウザ拡張機能は利用できません。 これが、一台のサーバにForemr2をホストして複数の端末から利用する場合に問題となります。

f:id:VbuiV:20220325221917p:plain

そこで、複数の端末でExtension IDを揃える方法をここでは紹介します。


パッケージ化されていない拡張機能のExtension IDがどのように生成されているのかを検索した結果、絶対パスのSHAハッシュ値であるという記載を見つけることができました。

参考:アンパックされた拡張機能のChrome拡張機能IDはどのように生成されますか? - CODE Q&A

参考:Chromium Code Search
https://source.chromium.org/chromium/chromium/src/+/main:components/crx_file/id_util.cc

つまり、どの端末でも同じ階層(絶対パス)に格納したうえで拡張機能として登録することで、Extension IDが揃うということになります。 私の手元の複数端末で確認しましたが、絶対パスが同じであれば、常にExtension IDは同じでした。 これで、一つのサーバにFormer2をホストして、複数端末でアクセスする形態にしたとしても、どの端末でもブラウザ拡張機能が利用可能となります。

【AWS】SSM Port ForwardingによるFTP,rsyncの並列転送

概要

AWS System Manager Sessions Manager Port Forwarding(以降SSM Port Forwarding)を使用して、FTPrsyncで並列ファイル転送を行う方法を紹介します。

SSM Port Forwardingにより、ローカル端末とEC2間に確立されるSSM Session Manager Tunnelを使って、セキュアにファイル転送を行う事が可能となります。 しかし、SSM Port Forwardingの特性上、ポートが動的に変化するFTPパッシブモードや、複数ポートによる並列転送を行う場合、通信を確立するために工夫が必要となります。

本記事では、そのようなケースで必要となる設定上の工夫について説明します。

記載内容

  1. SSM Port Forwardingとは
  2. SSM Port Forwarding設定方法
  3. SSM Port ForwardingでFTP(pasv)を使うための工夫
  4. SSM Port Forwardingでrsyncを並列転送するための工夫
  5. Appendix 参考リンク

1.SSM Port Forwardingとは

SSM Port Forwardingは、ローカル端末とプライベートサブネットにデプロイされたインスタンス間にトンネルを安全に作成できる機能です。これにより、ローカル端末とEC2間で、SSH、RDP、FTP等の多様な通信が可能となります。 例えば、下記の様にプライベートサブネットにデプロイされたEC2へアクセスする際に、踏み台サーバが不要になります。

踏み台を使ったアクセス方法

f:id:VbuiV:20220324223512p:plain

SSM Port Forwardingアクセス方法

f:id:VbuiV:20220324223530p:plain

2.SSM Port Forwarding設定方法

SSM Port Forwardingを行うために必要な手順を説明します。 f:id:VbuiV:20220324223554p:plain

準備

①EC2とSSMとの間でHTTPS通信を行うためのVPCエンドポイントを作成します。

  • ①-1.VPCとプライベートサブネットを作成します。

    • VPCのenableDnsSupportとenableDnsHostnamesは有効にする
  • ①-2.VPCエンドポイントにアタッチするセキュリティグループAを作成します。

    • InboundでEC2からのHTTPS通信を許可
  • ①-3.下記VPCエンドポイントを作成し、セキュリティグループAをアタッチします。

    • "com.amazonaws.<リージョン>.ssm
    • "com.amazonaws.<リージョン>.ssmmessages
    • "com.amazonaws.<リージョン>.ec2
    • "com.amazonaws.<リージョン>.ec2messages

②EC2でAWS SSMを利用する準備を行います。

  • ②-1.セキュリティグループBを作成します。
    • OutboundでVPCエンドポイント(セキュリティグループA)へのHTTPS通信を許可
  • ②-2.EC2を作成し、セキュリティグループBをアタッチします。
  • ②-3.SSMエージェントを導入します。(AWS提供のAMIを利用する場合は不要)

③以下のマネージドポリシーを付与したIAMロールを作成し、EC2にアタッチします。

④Client側にAWS CLIとSession Manager pluginをインストールします。

接続

Clientのコマンドプロンプトで、"aws configure"コマンドで必要な設定をした後、以下のコマンドを発行し、EC2とのセッションを確立します。
※Client側のlocalPortNumber(任意)とEC2側のportNumber(sshなら22,RDPなら3389)でセッションが確立されます。

aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSession --parameters "portNumber=<port>,localPortNumber=<port>"

例:Tera TermでSSHをする場合は上述のコマンド実行時に"portNumber=22"を指定します。Tera Termの"TCPポート#(P):"には"localPortNumber"で指定した任意ポートを入力します。

f:id:VbuiV:20220324223655p:plain

3.SSM Port ForwardingでFTP(pasv)を使うための工夫

FTPとはデータ転送用のプロトコルです。

詳細は割愛しますが、FTPにはアクティブモードとパッシブ(pasv)モードの二つのモードがあり、パッシブ(pasv)モードは制御用に21番ポートを使用し、データ転送用のポートはランダムに設定されます。

一方、SSM Port Forwardingはサーバ側とクライアント側のポートを一つ一つ対応付けていくため、FTP(pasv)のようにランダムにポートを使用するプロトコルを使用する場合には、ランダムに使用される全てのポートで事前にトンネルを作成しておくといった工夫が必要になります。

ポイント

◆データコネクションで使用するポートを制限する。
aws ssm start-sessionコマンドで必要な数のデータコネクションを確立する。

アーキテクチャのイメージ

f:id:VbuiV:20220324223636p:plain

本記事で使用しているソフトウェア

  • クライアント:Windows10 , FFFTP(ver2.00)
  • サーバ:RHEL7.6 , vsftpd 3.0.2
    ※インストールやセットアップ方法は世の中にあふれていると思うので、割愛します。

FTP(pasv)の設定例

  1. サーバ(vsftpd.conf)の設定
    aws ssm start-sessionコマンドでポート指定する必要があるため、使用するデータ転送用ポートを制限します。

    • 設定ファイル例(抜粋)※データ転送用ポート範囲
     pasv_min_port=40000
     pasv_max_port=40003
    
  2. 並列度数分のセッションを張る
    制御用ポートおよびデータ転送用として使用するポート数分のセッションを張ります。

    • コマンド実行例(制御用)
      ※portNumber,localPortNumberはお使いの環境に応じて変更してください。
      aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSession --parameters "portNumber=21,localPortNumber=21"
    
    • コマンド実行例(データ転送用)
      ※portNumber,localPortNumberはお使いの環境に応じて変更してください。
      aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSession --parameters "portNumber=40000,localPortNumber=40000"
      aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSession --parameters "portNumber=40001,localPortNumber=40001"
      aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSession --parameters "portNumber=40002,localPortNumber=40002"
      aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSession --parameters "portNumber=40003,localPortNumber=40003"
    
  3. クライアント(FFFTP)で並列実行
    FFFTPは1プロセスで4セッションまで並列転送可能です。[特殊機能]タブ - [最大同時接続数]で指定。
    ※さらに並列度を上げる場合は、FFFTP自体を複数起動してください。

4.rsyncの設定方法

FTPと同様に、rsyncでもSSM Port Forwardingを用いた転送が可能です。
リモートでrsyncする場合、sshを使用するケースも多いですが、本投稿ではサーバのrsyncdに複数ポートを使用して並列転送を行う方法を紹介します。

ポイント

◆並列転送のために、rsyncdを複数異なるポートで起動する。その際、pidファイルの重複を避ける。
aws ssm start-sessionコマンドで必要な数のコネクションを確立する。

アーキテクチャのイメージ

f:id:VbuiV:20220324223720p:plain

本記事で使用しているソフトウェア

  • クライアント:Windows10 , rsync 3.1.3 , cygwin 3.2.0
  • サーバ:RHEL7.6 , rsync 3.1.2
    ※インストールやセットアップ方法は世の中にあふれていると思うので、割愛します。

rsyncで並列転送するための設定例

  1. サーバの設定と起動
    設定ファイル間でのプロセスIDファイルとログファイル名の重複を避けつつ、多重度数分の設定ファイルを作成します。

    • 設定ファイル例(抜粋)
      ※並列実行したい分だけファイルを複製してください。

    設定ファイル1: rsync1.conf

      pid file = /var/run/rsyncd1.pid
      log file = /var/log/rsyncd1.log
      [testrsync]
          path = /tmp
    

    設定ファイル2 :rsync2.conf

      pid file = /var/run/rsyncd2.pid
      log file = /var/log/rsyncd2.log
      [testrsync]
          path = /tmp
    

    待ち受けポート番号をオプションとしたrsyncを、デーモンモードで並列実行します。

      rsync --daemon --config=/etc/<設定ファイル> --port=10873
      rsync --daemon --config=/etc/<設定ファイル> --port=10874
    
  2. 多重度数分のセッションを張る

    • コマンド実行例
      ※並列実行したい分だけコマンドを実行してください。
      aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSession --parameters "portNumber=10873,localPortNumber=10873"
      aws ssm start-session --target <instance-id> --document-name AWS-StartPortForwardingSession --parameters "portNumber=10874,localPortNumber=10874"
    
  3. クライアントでのrsync並列実行

    • コマンド実行例
      ※並列実行したい分だけコマンドを実行してください。
      rsync -av --progress --port=10873 --password-file=./rsyncd.passwd (※1) ./test1.txt (※2) rsync://rsync_user(※3)@localhost/testrsync (※4)
      rsync -av --progress --port=10874 --password-file=./rsyncd.passwd (※1) ./test2.txt (※2) rsync://rsync_user(※3)@localhost/testrsync (※4)
    
      ※1 サーバに作成したユーザのパスワードファイル
      ※2 転送するファイル
      ※3 サーバに作成したユーザ
      ※4 サーバの設定ファイルに記述したモジュール(転送ファイルは、サーバ設定ファイルの "path=" に格納されます)
    

5.Appendix 参考リンク

【AWS】今年度学習したAWSサービスの特徴をまとめておく - AWS Machine Learning編

概要

インフラ系のクラウドエンジニアとして、日々自己研鑽に努めています。 本投稿は今年度の学習のまとめとして、今後も覚えておきたい情報を記載したものです。 Machine Learningに含まれるサービスの特徴と効果的に活用するためのTipsを記載しています。また、サービスを利用するときに必要となる一般的な機械学習に関するナレッジも用語集的に整理しています。

記載内容は、AWS公式ドキュメントやインターネットから拾い集めた情報を個人的に解釈した結果を記載しています。実機確認等による裏付けがされた内容ではない点、ご留意ください。また、私は機械学習エンジニアではないため、特に"一般的な機械学習に関するナレッジ"はおおよそのイメージで記載しており、正確性に欠ける記載が多いかもしれません。あらかじめご了承ください。

AI services

Forecast

Lex

  • チャットボット

Personalize

Polly

  • テキストの読み上げサービス。以下の機能を有する。
    • NTTS:より人間に近い音声で発話
    • スピーチマーク:テキストからメタデータを取得。読み上げた単語のハイライトやアニメーションの口の動きなどに使えるらしい。
    • SSML:ボリュームと話す速度の調整
    • Lexicon:発話(utterance)のカスタマイズ

Rekognition

  • 画像分析及び動画分析を行うサービス。
  • 動画分析では、S3に保存された動画の他、ストリーミングビデオの操作も可能。
    ストリーミングビデオの処理:S3やKDSからビデオを取り込み、ストリームプロセッサーで処理。ストリーミングが完了するまでループ。 ストリーミングビデオの操作 - Amazon Rekognition

Transcribe

  • リアルタイム文字起こし。

Panorama

  • オンプレミスのカメラからリアルタイムで動画処理するサービス。

ML services

Augmented AI

人間による機械学習予測結果のレビューを行うサービス。

SageMaker

Othres

Elastic Inference

Amazon Elastic Inference (Amazon EI) は、Amazon EC2 または Amazon SageMaker のインスタンスタイプまたは Amazon ECS タスクに適切な量の GPU による推論アクセラレーションをアタッチさせる、高速コンピューティングサービスです。つまり、アプリケーションの全体的なコンピューティング、メモリ、およびストレージのニーズに最も適したインスタンスタイプを選択し、必要な推論アクセラレーションの程度を個別に構成できます。
引用:よくある質問 - Amazon Elastic Inference | AWS

Kinesis Video Streams

  • 2種類の方式がある。
    • メディア方式:プロデューサーからストリーミングにより動画を取得し、保存して分析に使用する。データストアには 内部的に S3が使用される。
    • WebRTC:リアルタイムで双方向にデータをストリーミング。クラウドに動画が保存されない。その場限りの動画配信に使う。

IoT Greengrass

Data Pipeline

  • S3,RDS,DynamoDB,EMR,Redshiftへのデータ転送やETL処理を行う。
  • オンプレミスからのデータ転送や定期的なデータアクセス機能も備える。
  • オンプレミス→S3→Redshiftといった一連のデータパイプラインの作成も可能。

DeepLens

  • 深層学習用のカメラで、ローカルで推論の実行が可能。
  • Lambdaがカメラ内に配備されている。Kinesis Video Streamsへの転送も可能。

QuickSight

  • マネージドなBIサービス
  • auto-narrativeという機能を使うと、説明文が自動生成可能。

    [auto-narrative (自動説明文)] は、チャートの代わりに説明文を表示する自然言語の要約ウィジェットです。分析中にこれらのウィジェットを埋め込んで、重要なインサイト吹き出しを強調表示することができます。結論を引き出すために、ビジュアルを調べたり、ドリルダウンしたり、値を比較したり、アイデアを再確認したりする必要はありません。また、データの意味を理解したり、さまざまな解釈について同僚と話し合ったりする必要もありません。代わりに、データから結論を推定し、それを分析に表示することができます。1 つの解釈は誰でも共有することができます。
    引用:Amazon QuickSight を使用した自動説明文の作成 - Amazon QuickSight

一般的な機械学習に関するナレッジ

データの前処理

Standardization(標準化)

  • 平均0、分散1になるようにデータの値を調整。
  • データの持つ値の大きさが異なる際に、元々の値の大きさの違いにより結果に偏りが起きないようにするために行う。 例えば、身長と体重をそのままの数値で使用したり、100点満点の試験と1000点満点の試験の値をそのまま扱うと、身長や1000点満点の試験結果など元々大きな値を持つデータに引きずられてしまう。そういった場合に使用する。
  • その他、外れ値がある場合にも利用する。

Normalization(正規化)

  • 0~1の間になるようにデータの値を調整。
  • データの持つ値の大きさが異なる際に、元々の値の大きさの違いにより結果に偏りが起きないようにするために行う。 例えば、身長と体重をそのままの数値で使用したり、100点満点の試験と1000点満点の試験の値をそのまま扱うと、身長や1000点満点の試験結果など元々大きな値を持つデータに引きずられてしまう。そういった場合に使用する
  • 外れ値がある場合は適さない場合がある。例えば、100個の値のうち99個は1~10の間だが、1つだけ100といったケースで0~1に正規化すると、外れ値が大きな影響力を持ってしまう。

欠損値への対処

  • 他の値から導き出される適切な値(機械学習結果等)で埋める。ランダムな値で埋めるのはバットプラクティス。
  • Multiple imputation by chained equation(MICE)(多重代入法):欠損データに単一代入法を繰り返し、得られた結果を統合。

Box and whisker plot(箱ひげ図)

データの分布を視覚化したもの。外れ値の検出にも使用する。

Data Augmentation(データ拡張)

データが不足している場合に、拡張する手法。画像データの場合、反転させる、すらす、ノイズを加えるといったことを行うことでデータを増やす。

Polynomial

数値データを多項式で変換し、新たな特徴を生成する。

Binning(ビニング)

特徴が分かりにくい連続データを区切って特徴量を明確化。例:人に紐づくデータを、大学生や小学生といった単位で区切る等。

Logarithmic transformation(対数変換)

データの分布が偏っている場合に使うと、疑似的に正規分布に近づける事ができる。

ワンホットエンコーディング

状態を合わすためにデータを0または1に変換する。
例:
月火水木金土日をそれぞれ月=1, 火=2,・・・日=7と数値に変換すると、数値の大きさが学習結果に影響する。そのため、カラムをすべて分けて下記のように表現するのがワンホットエンコーディング

レコード ・・・
レコード1 1 0 ・・・ 0
レコード2 0 1 ・・・ 0
レコードn 0 0 ・・・ 1

Classification(分類)

教師あり。犬か?猫か?などそのデータが示すクラスを予測する。

Binary classification(二項分類)

これは犬?犬ではない?やコインの裏表などの二者択一の分類

Confusion Matrix(混同行列)

Binary classification(二項分類)の評価指標。予測と実際の数を以下の表でまとめたもの。
例:犬と予測し実際に犬だった場合はTP(真陽性),犬ではないと予測し実際に犬だった場合はFN(偽陰性)にカウントする。

↓予測 実際→ True False
Positive True Positive(真陽性) False Positive(偽陽性)
Negative False Negative(偽陰性) True Negative(真陰性)

上述の表を以下の評価指標で評価することで、機械学習モデルの精度を評価する。 例えば、Precisionは高いがRecallは低いという場合、陽性と予測したもののほとんどが陽性だったという点では高い精度を示したとみなせるが、多くの陽性を見逃したという点では精度が低いとみなせる。こういったケースでは真とみなす閾値(クラス確率の閾値)を調整し、より積極的に陽性と判定するように(例えばより積極的に犬と判定するように)モデルをチューニングする。もちろんTP,FP,FN,TNのうちどれを高めたいかはユースケース次第である。

評価指標 概要
Precision(適合率) この値が高いほど、陽性と予測したもののうち、高い割合で実際に陽性だったことを示す。 TP/(TP + FP)
Recall(再現率) この値が高いほど、実際に陽性だったもののうち、高い割合で陽性と予測できた事を示す。 TP/(TP + FN)
Accuracy(正確度 ) この値が高いほど予測通りだったことを示すが、TPとTNのどちらかがより予測通りだったかどうかは評価できない。 (TP + TN)/(TP + FP + FN + TN)
F-measure(F値) モデルの全体的なバランスを評価 (2 × precision × recall)/(precision + recall)
ROC曲線,AUC 真陽性率を縦軸に、偽陽性率を横軸にROC曲線とAUC(面積)で表現したもの。AUCが広いほど精度が高い。 -

Cross entropy error(交差エントロピー誤差)

分類問題で使用される予測と実測値との誤差。

Regression(回帰)

教師あり。株価などの連続値を予測する。

Linear regression(線形回帰)

機械学習の結果が概ね線形の形になった状態。売上予測や販売数予測等で、いくらになるか?何個になるか?といった具体的な数値を予測する。

Logistic regression(ロジスティック回帰)

発生確率を予測。ある事象が発生するか否かを0~1の数字で表現。

残差プロット

回帰の結果と実際のデータとの差(残差)を散布図で表現したもの。散布図で残差0を軸としたばらつきを確認し、ばらつきが均等ではなく何らかの偏りや傾向がある場合、モデルは何らかの改善の余地があると解釈できる。残渣プロットの結果が良好であれば、RMSEなどを用いてモデルの精度を評価する。

Mean Absolute Error(MAE)(平均絶対誤差)

回帰モデルの評価指標。誤差の絶対値。

Mean Squared Error(MSE)(平均二乗誤差)

回帰モデルの評価指標。

Root Mean Squared Error(RMSE)(二乗平均平方根誤差)

回帰モデルの評価指標。MSEの平方根。0に近いほど精度が高い。

トピックモデル

教師なし。文章の中のトピックを分析。政治、経済、スポーツ、音楽、などのトピックを類推する。

Latent Dirichlet Allocation(LDA)(潜在的ディリクレ配分法)

教師なし。単語や文書を低次元ベクトルで表現。文書や単語の分類、類似文書の検索に利用。

Neural Topic Model(NTM)。

教師なし。文書中のトピックを生成する。

ニューラルネットワーク

  • 教師あり、教師なしどちらの学習にも用いられる。
  • ニューラルネットの学習でバッチサイズが大きいと個々のデータの特徴が失われ、局所解にトラップされやすい。その場合バッチサイズを小さくする。
  • ニューラルネットワークは複雑であるため、過学習が発生しやすい。

Perceptron(パーセプトロン)

教師あり。2層のニューラルネットワーク。分類やパターン認識などに利用する。線形分離可能なものにしか使えない。

Multilayer perceptron(MLP)

教師あり。多層のパーセプトロン

Deep Neural Network(DNN)(深層学習)(ディープラーニング)

教師あり/教師なし/強化学習のいずれも対応可能。4層以上のニューラルネットワーク

Recurrent neural network(RNN)(再起型ニューラルネットワーク)

教師あり。数値の時系列データを認識する。

Long Short-Term Memory(LSTM)

教師あり。RNNを拡張したもの。ニューラルネット内で短期記憶を長期間活用できる。
回帰・分類両方の予測に利用可能。言語や文章理解に使用する。感情分析や音声・動画などにも応用可能。 word2vecと組み合わせ、word2vecで単語をベクトル化し、それをインプットにLSTMで学習するといった手法も用いられる。

Convolutional Neural Network(CNN)

教師あり。画像認識に使用する。

InceptionNet

Googleが開発した画像認識CNN。TensorFlowで利用可能。

Activation function(活性化関数)

ニューラルネットワークにおいて出力値を調整するための様々な関数

  • Hyperbolic tangent function(tanh):数値を-1.0~1.0の間に変換。
  • Sigmoid function:数値を0.0~1.0の間に変換。2値分類で使用する。
  • Softmax function:数値を0.0~1.0の間かつ合計で1.0になるように変換。3値以上の分類で使用する。
  • Leaky Rectified Linear Unit(Leaky ReLU):入力値が0以上であればそのまま、0以下であればa倍(aは通常0.01)する関数。
  • Xavierの初期値:活性化関数の出力結果がきれいに分散するように、局所解にトラップされないようにするための初期値(数式)

その他機械学習の用語整理

過学習(オーバーフィット)

  • モデルをトレーニングしすぎること。過学習の結果、モデルがトレーニング用のデータに最適化されてしまい、テストデータや実データに対する精度が落ちる。例えば、トレーニングデータには90%の精度だが、テストデータには70%の精度しか出ないといったことが起きる。
  • 過学習を防ぐ方法として、L1正則化とL2正則化という手法がある。L1正則化はあるデータの重みを0に、L2正則化はあるデータの重みを0に近づけていくことによって特徴量を削減していく。
  • 過学習を防ぐため、ドロップアウトというランダムにデータを0にし、欠損データを作る手法が用いられる。

    アンダーフィットとオーバーフィットに関する補足説明

  • アンダーフィットする場合:データを追加する、正規化を減らす。
  • オーバーフィットする場合:ドロップアウト、正規化を増やす、機能の組み合わせを少なくする。

以下のAmazon Machine Learning Developer Guideの説明が分かりやすい。

f:id:VbuiV:20220317110108p:plain 引用:モデルフィット: アンダーフィットとオーバーフィッティングと - Amazon Machine Learning

ハイパーパラメータ

  • 過学習のバランスや、バッチサイズ等、各種機械学習における様々な調整を行うパラメータ。

Reinforcement Learning(強化学習)

  • 動的にデータを取り込み、繰り返し学習を行う。

Incremental learning(増分学習)

  • 時間経過につれ、モデルの推論精度が低下していく場合に、データセットを拡張して行うトレーニング。

バッチサイズとエポック数

  • バッチサイズ:一回のデータ数、エポック数:繰り返す数。
  • 全部で10,000件のデータがあった場合、バッチサイズ=100、エポック数=100でトレーニングするか?バッチサイズ=200、エポック数=50でトレーニングするか?のようなことを検討する。

ホールドアウト法

  • データを分割する方法。
    シンプルにトレーニング用:テスト用=6:4、トレーニング用:テスト用=8:2などに分割。

K-fold cross-validation(K分割交差検証)

  • 分類と回帰に使用できる評価方法
  • データをKグループに分割し、各グループから1つテストーデータに、残りをトレーニングデータに利用する。
  • 層化K分割交差検証:データが偏っている時に使用するK分割交差検証で、元々のデータの割合を保って分割する。例え100個のデータ中にAのデータが10個、Bの90個だった場合に、K=10で分割するとAのデータが一つも含まれないグループが存在する可能性が高い。そういったケースにおいて、各グループが元々のデータと同じ割合を保つ必要がある場合に使用する。

K-means

  • 教師なし。データをK組にグループ分け(クラスタリング)する手法。散布図のようなイメージで可視化。
  • Kの数の決め方にはエルボー法とシルエット分析がある。
    • エルボー法:K=1,2,3・・・といろいろなパターンで試行した際のSSEの値を折れ線グラフで表現。大きく折れ曲がったところが最適なKと判断できる。
    • シルエット分析:K=1,2,3・・・といろいろなパターンで試行した結果をシルエットとして表現。シルエットの高さがなるべくそろっている時のKが最適と判断できる。
  • PCAやt-SNEで次元削減した結果にK-meansを実行するといった手法も用いられる。
  • t-SNEに比べて高速。

t-SNE

  • 高次元のデータを2~3次元に減らし、散布図のようなイメージで可視化する。

Principal component analysis (PCA)(主成分分析)

  • 教師なし。データが主にどの成分によって成り立っているかを可視化する。散布図のようなイメージで可視化。
  • 計算量を減らすため、データの特徴を保持したまま情報量を削減する(次元削減)。

Random Cut Forest (RCF)

Factorization Machines(FM)(因数分解機)

  • 教師あり。分類や回帰に利用可能。レコメンドの生成に使用する。スパースなデータ(スカスカ)からも学習可能。

Collaborative Filtering(協調フィルタリング)

  • 購入履歴などのユーザの好みを蓄積、分析し、レコメンドを行う。

Linear Learner

  • 教師あり。分類・回帰両方可能。

Gradient (勾配降下法)

  • 関数の最小値を求める。二次関数(Uの字)の頂点を求めるイメージ。パラメータ更新を繰り返しながら、計算する。
  • Gradient checking(勾配確認):式にミスがないか、誤差を確認することによってチェックすること。偏微分を近似して値が正しいかを確認する。
  • バッチ勾配降下法(最急降下法):毎回全てのデータを使用する勾配降下法。計算量が多い。極小値にトラップされやすい。結果は安定する。
  • ミニバッチ勾配降下法:パラメータ更新毎にランダムに抽出した一部のデータを使用する。バッチ勾配降下法と確率的勾配降下法の間の方法。
  • 確率的勾配降下法:パラメータ更新毎にデータを一つランダムに抽出して使用する勾配降下法。計算量は少ない。極小値にトラップされにくい。毎回結果が安定しないことがある。
  • Optimizer:RMSprop,Momentum,Adam,Adagrad等

XGBoost

  • 教師あり。分類・回帰両方可能。非常に強力で人気なアルゴリズム
  • Gradient Boosting Decision Tree(GBDT)(勾配ブースティング決定木)のフレームワーク
  • GBDT:Gradient(勾配降下法)とBoosting(アンサンブル)とDecision Tree(決定木)を組み合わせた手法

k-nearest neighbor algorithm(k-NN)(k近傍法)

  • 教師あり。分類・回帰両方可能でシンプルな手法。

Instance Segmentation(インスタンスセグメンテーション)

  • 教師あり。画像内の物体を分類。

Single Shot Multibox Detector(SSDアルゴリズム)

  • 教師あり。物体検知(車や飛行機等)。

Support Vector Machine (SVM)

  • 教師あり。分類・回帰を行う。

One Class SVM

  • 教師なし。外れ値/異常値検出

SVM-RBF

  • Radial basis function kernelを用いたSVM。精度が高い。

Term frequency–Inverse document frequency(tf-idf)

Term frequency(文書中の単語の出現頻度)とinverse document frequency(単語がどの程度レアか?)を組み合わせた指標。文書内の各単語の重要度を表現することができる。

ポアソン分布

ある事象が一定時間に何回発生したか?例:交差点の事故回数

オーバーサンプリング

  • アンバランスなデータを補正する手法。少数派クラスからデータを複製する。

アンダーサンプリング

  • アンバランスなデータを補正する手法。多数派クラスからデータを削除する。

Synthetic Minority Over-sampling Technique(SMOTE)

  • アンバランスなデータに対するオーバーサンプリングの手法の一つ。

目的変数(ターゲット変数)と説明変数

  • 数式でいうyとxの関係。yが目的変数、説明変数がx。

STL分解

  • 時系列データからトレンドや季節性を把握する手法。

ピアソン相関係数

  • -1.0~0~+1.0の間でデータ同士の相関関係を表現。
    -1.0:逆の相関がある。0:相関がない。+1.0:データ同士に強い相関関係がある。

Bayesian network( ベイジアンネットワーク)

  • グラフ構造と確率でデータを表現。頂点から延びる二つの辺に4:6などの割合があるイメージ。
  • ナイーブペイズ: ベイジアンネットワークの一種で、1つの親データに紐づく複数の子データ同士に相関がなく独立している状態。

機械学習フレームワークやライブラリ

Scikit-learn

Python機械学習用ライブラリ。Sagemakerで利用可能。
scikit-learn.org

Natural Language Toolkit(NLTK)

Python自然言語処理ライブラリ。意味推論や構文解析を行う。
www.nltk.org

TensorFlow

Googleが開発した機械学習ライブラリ。Sagemakerで利用可能。
www.tensorflow.org

Apache MXNet

Sagemakerで利用可能。 mxnet.incubator.apache.org

seaborn

グラフを作成するライブラリ。
seaborn.pydata.org

Horovod

分散型深層学習のフレームワーク
github.com

【AWS】CloudFormation Guardによるテンプレート評価手順

概要

CloudFormationのベストプラクティスの一つである下記に貢献できるツール”AWS CloudFormation Guard(cfn-guard)” を紹介します。

Validate templates before using them

Validate templates for organization policy compliance

引用:AWS CloudFormation best practices - AWS CloudFormation

<記載内容>

GitHubで公開されている3rd Party製CloudFormationテンプレート(以降 CFnテンプレート)の静的チェックツール"cfn-guard"の製品紹介です。インストールして動作させるための手順、評価ルール作成や評価時の具体的なコマンド例を記載しています。さらに、トライアルで利用した際に作成したポリシー例やTips集等、 cfn-guardを初めて使う方に役立つ情報をいくつか紹介します。
(注意)コマンドやルール例は、Markdownの都合上エスケープ処理をしています。そのため、コピー&ペーストでうまく動かない可能性があります。

アジェンダ

  1. AWS CloudFormation Guardとは
  2. Windows10へのインストール方法
  3. 使い方
  4. よく使う評価ルール
  5. 所感
  6. Tips
    • ymlで改行を表現する記法”|(パイプ)”が認識されない
    • 多段階層構造をもつパラメータの評価ルール自動生成時の注意点
    • List形式のパラメータの一部のみの評価ができない

1.AWS CloudFormation Guardとは

github.com

2.Windows10へのインストール方法

  • 公式(GitHub)のインストールガイドに従ってインストール可能。

Windows 10: Install Rust and Cargo

  1. Create a Windows 10 workspace.
  2. Install the version of Microsoft Visual C++ Build Tools 2019 which provides just the Visual C++ build tools: https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019.
  3. Download the installer and run it.
  4. Select the "Individual Components" tab and check "Windows 10 SDK".
  5. Select the "Language Packs" tab and make sure that at least "English" is selected.
  6. Click "Install".
  7. Let it download and reboot if asked.
  8. Install Rust.
  9. Download rust-init.exe.
  10. Run it and accept the defaults.

    Cargo-based Installation

    Now that you have rust and cargo installed, installation of cfn-guard is easy: $ cargo install cfn-guard

引用:https://github.com/aws-cloudformation/cloudformation-guard#installation

(注意)上記の手順4についてですが、Windows 10 SDKだけではRustが正常に動作しませんでした。私の環境では、”個別のコンポーネント”ではなく、”ワークロード>C++によるデスクトップ開発”でインストールしたら問題なく動作するようになりました。

3.使い方 評価ルールの作り方

○ルールセット作成コマンド(コマンドプロンプト
$ cfn-guard rulegen -t [CFnテンプレート名] -o [ルールセット名]
例:cfn-guard rulegen -t test.yml -o test.ruleset
○実行例

読み込ませるCFnテンプレート(test.yml)

AWSTemplateFormatVersion: '2010-09-09'
Description: Sample template
Resources:
  SampleVolume:
    Type: AWS::EC2::Volume
    Properties:
      Encrypted: true
      Size: 10
      VolumeType: gp3

生成されるルールセット
EBSにPropertyとして設定した3つのパラメータを評価するルールが生成される。

let aws_ec2_volume_resources = Resources.*[ Type == 'AWS::EC2::Volume' ]
rule aws_ec2_volume when %aws_ec2_volume_resources !empty {​​
  %aws_ec2_volume_resources.Properties.Encrypted == true
  %aws_ec2_volume_resources.Properties.VolumeType == "gp3"
  %aws_ec2_volume_resources.Properties.Size == 10​​​​​​​​​
}

3.使い方 テンプレートの評価方法

  • 検査対象CFnテンプレートと検査内容が記載されたルールセットを引数にコマンドを実行する。
○評価コマンド(コマンドプロンプト
$ cfn-guard validate -d [CFnテンプレート名] -r [ルールセット名]
例:cfn-guard validate -d test.yml -r test.ruleset
○実行例

実行例1:ルールセットに準拠している場合
test.ymlを先ほど生成したルールで評価した例

test.yml Status = [32mPASS[0m[1mPASS rules[0m
test.ruleset/aws_ec2_volume    [32mPASS[0m
---
Evaluation of rules test.ruleset against data test.yml
--
Rule [test.ruleset/aws_ec2_volume] is compliant for template [test.yml]
-

実行例2:ルールセットに準拠していない場合
test.ymlを以下の通り変更してから評価した例

  • Encrypted: true → false
  • Size: 10 → 15
  • VolumeType: gp3 → gp2
test.yml Status = [1;31mFAIL[0m[1mFAILED rules[0m
test.ruleset/aws_ec2_volume    [1;31mFAIL[0m
---
Evaluation of rules test.ruleset against data test.yml
--
Property [/Resources/SampleVolume/Properties/Encrypted] in data [test.yml] is not compliant with [test.ruleset/aws_ec2_volume] because provided value [false] did not match expected value [true]. Error Message []
Property [/Resources/SampleVolume/Properties/VolumeType] in data [test.yml] is not compliant with [test.ruleset/aws_ec2_volume] because provided value ["gp2"] did not match expected value ["gp3"]. Error Message []
Property [/Resources/SampleVolume/Properties/Size] in data [test.yml] is not compliant with [test.ruleset/aws_ec2_volume] because provided value [15] did not match expected value [10]. Error Message []
--

4.よく使う評価ルール

作成したルールを何個か紹介します。
(補足)全てのルールを一つのルールセットファイルに記入しても問題なく動作します。各ルールの一行目(letから始まる行)で検査対象のルールセットを指定しているため、条件に合致しないルールはスキップされます。

  • KMSのキーローテーションが有効か
let aws_kms_key_resources = Resources.*[ Type == 'AWS::KMS::Key' ]
rule aws_kms_key when %aws_kms_key_resources !empty {
  %aws_kms_key_resources.Properties.EnableKeyRotation == true
}
let aws_kms_alias_resources = Resources.*[ Type == 'AWS::KMS::Alias' ]
rule aws_kms_alias when %aws_kms_alias_resources !empty {
  %aws_kms_alias_resources.Properties.AliasName == /alias\/(sample)-(.*)-(.*)/
}
  • Nameタグが付いているか
let aws_backup_backupvault_resources = Resources.*[ Type == 'AWS::Backup::BackupVault’ ]
rule aws_backup_backupvault when %aws_backup_backupvault_resources !empty{
  %aws_backup_backupvault_resources.Properties.BackupVaultTags == {"Name":/.*/}
}
  • S3がパブリック非公開か,暗号化しているか,ログを出力する設定になっているか
let aws_s3_bucket_resources = Resources.*[ Type == 'AWS::S3::Bucket' ]
rule aws_s3_bucket when %aws_s3_bucket_resources !empty {
  %aws_s3_bucket_resources.Properties.PublicAccessBlockConfiguration == {"BlockPublicAcls":true,"BlockPublicPolicy":true,"IgnorePublicAcls":true,"RestrictPublicBuckets":true}
  %aws_s3_bucket_resources.Properties.BucketEncryption.ServerSideEncryptionConfiguration !empty
  %aws_s3_bucket_resources.Properties.LoggingConfiguration !empty
}
  • LBがHTTPSだけListenしているか,最新のSSLポリシーを使用しているか
let aws_elasticloadbalancingv2_listener_resources = Resources.*[ Type == 'AWS::ElasticLoadBalancingV2::Listener' ]
rule aws_elasticloadbalancingv2_listener when %aws_elasticloadbalancingv2_listener_resources !empty {
  %aws_elasticloadbalancingv2_listener_resources.Properties.Protocol == "HTTPS"
  %aws_elasticloadbalancingv2_listener_resources.Properties.SslPolicy == "ELBSecurityPolicy-2016-08“
  %aws_elasticloadbalancingv2_listener_resources.Properties.Port == 443
}

5.所感

  • 主に規約違反やセキュリティ上好ましくない設定の検出に使用可能。
  • 他のセキュリティ系サービスと比較すると、実環境にデプロイする前にCFnテンプレートの段階でポリシー違反を検出できる点がCloudFormation Guardの特徴。
    • Config/Security Hub :デプロイ後のAWSリソースのパラメータを評価
    • Trusted Advisor :AWSリソースの稼働状況を評価
    • Guard Duty:不正なアクティビティを検知
  • プロジェクトや組織としてのポリシーが明確で、繰り返しCloudFormationを実行するような運用を行う場合は有用。
  • CFnテンプレートの記載の仕方によってはうまく評価できない。(Tipsを参照)

6.Tips

ymlで改行を表現する記法”|(パイプ)”が認識されない

ymlで改行を認識するための記法“|(パイプ)”が正しく認識されず、テンプレート上に下記例の様なコードが存在していると、rulegenの際にエラーとなる。

        Type: "AWS::KMS::Key"
        Properties:
            KeyPolicy:  !Sub |     ←この記法が認識されず、rulegenでエラーになる。
                {​​​​​​​
                  "Id" : "key-default-1",
                  "Version" : "2012-10-17",

⇒対処方法

  • 上述の例の構造を正しく評価する方法は見つけられなかった。
  • 一旦当該箇所をコメントアウトした上でrulegenを行えば、評価ルールの作成は可能。
  • validateの際は、テンプレート上存在していても(コメントアウトしていないくても)、問題なく評価可能

多段階層構造をもつパラメータの評価ルール自動生成時の注意点

階層構造のパラメータの例(BackupPlan)

List形式のパラメータの一部のみの評価ができない

リスト形式のパラメータの例(BackupPlanRule)

文字列の値については正規表現の評価が可能なため、"何かしらの値が存在すればよい"という様に実質的に無視することは可能。ただし、数値は正規表現で評価できなかった。

【AWS】Former2を安全に使うための3つの工夫

概要

既存AWSリソースをスキャンしてCloudFormationテンプレート(以降 CFnテンプレート)を生成するOSSツールである”Former2”をより安全に使うための情報を紹介します。

“Former2”はAWS クラウドサービス活用資料集(ブラックベルト)(※)でも紹介されている非常に強力なCFnテンプレート自動生成サービスで、私も頻繁に利用しています。しかし、自アカウントのAWSリソースをスキャンするためにクレデンシャルの登録が必要であり、本当に安全に扱われているのか?という点が心配でした。

本投稿では、上記の懸念について調査した結果を記載しています。

記載内容

Former2とは

  • 既存AWSリソースをスキャンし、CloudFormationテンプレートを生成するOSS
  • APIコールにはAWS JavaScript SDKを使用。CloudFormationの他、Terraform, CDK等をサポート。
  • Webサービスとしても提供されており、いつでもすぐに利用可能。
  • 料金は無料。(リソーススキャン時にAPIコールした分のAWS利用料は発生)

GitHubhttps://github.com/iann0036/former2

○Webアプリ:https://former2.com/

使い方

基本的には、2ステップです。可読性の高いきれいなコードが生成されます。

  1. AWSアカウントのIAMキーペア(アクセスキーID/シークレットアクセスキー)を入力し、ブラウザ右上の緑の"Scan Account"を押下します。
  2. スキャンが終わったら、左側のペインから各サービスの画面を参照します。スキャンされたAWSリソースが一覧化されているので、選択してブラウザ左上のGenerateを押せばCloudFormationテンプレートの自動生成は完了です。

引用:https://former2.com/

補足事項:

  • CORS(Cross-Origin Resource Sharing)が必要なリソース(S3, IAM等)の場合、ブラウザ拡張機能のインストールが必要です。
  • 一部未対応なサービスやリソースがあります。例えば各リソースに付与したTagがリソースタイプによっては生成されません。また、極一部生成されないパラメータもあります。生成後は必ずパラメータシートと突合してください。

クレデンシャルの安全性に関するAWSブログ上の記載

上述の説明で、非常に便利なサービスであることは理解いただけたと思います。 しかし、IAMキーペアを登録しても大丈夫だろうか?と心配になった方もいると思います。 これに関して、AWSのブログには下記の記載があります。 引用:Accelerate infrastructure as code development with open source Former2 | AWS Open Source Blog

安全に使うための工夫1:AssumeRoleを使用する

上述のAWSブログの記載はあるものの、やはり永続的なキーペアを外部サイトに登録したくないという方は多いと思います。また、IAMユーザが作成できない事情(SAML認証を必須としている環境等)がある方もいると思います。そのような方はIAMロールを作成し、AssumeRoleする事を検討してください。 <実行例>

$ aws sts assume-role --role-arn [ロールのARN] --role-session-name [任意の名前]

Tips:assume-roleコマンドの実行時、「--duration-seconds」オプションを指定することで一時的な認証情報の有効期限をデフォルトの1時間から15分(900秒)まで短くすることができる。

コマンド実行結果を以下の様に入力してスキャンします。

安全に使うための工夫2:Former2をdockerでホストする

プロジェクトのセキュリティポリシー上、一時クレデンシャルでもIAMキーペアを外部サイトに入力することが許容されないケースもあると思います。
そういった方は、Former2をdockerでホストする事をご検討ください。 github.com

※Former2をdockerでホストする方法については、検索すると別の方が既にブログとして記事にしているので割愛します。

Former2をdockerでホストすることは、サービス継続性の観点でもメリットがあります。Webアプリとして公開されているFormer2はSLAがあるわけではありません。いつサービス終了するかもわかりません。Former2をdockerでホストすることは、使いたいときにいつでも使えるという点でもメリットがあります。

dockerでホストする際のTips1

詳細は割愛しますが、私の環境ではFormer2のコンテナイメージをECRに保存し、Fargate上で稼働させています。

ちなみに、GitHubで配布されているdocker-compose.ymlで定義されているnginx:1.17.8-alpineやDockerfileで定義されているnginx:1.15については、ECRで脆弱性スキャンしたところ脆弱性が検出されました。

そのため、1.21.6-alpineにバージョンアップして使っていますが、今のところ問題なく稼働しています。

dockerでホストする際のTips2

Former2のスキャンは、Former2から直接AWSアカウントをスキャンするのではなく、手元の端末を経由します。そのため、手元の端末からAWSアカウントへの通信経路が必要です。

安全に使うための工夫3:閲覧データとログ削除

Former2をローカルにホストし、IAMキーペアに一時クレデンシャルを使っているのでもう安心と思った方、油断は禁物です。ブラウザおよびブラウザのログに保存されているクレデンシャルは都度削除してください。

  • GitHubソースコードを確認すると、クレデンシャルはLocalStorageというクラスに格納されることがわかります。 引用:https://github.com/iann0036/former2/blob/master/js/app.js

  • ブラウザの検証機能を覗いてみると確かにLocalStorage保存されています。※これにより、一度ブラウザを閉じても、再度Former2にアクセスすると再度クレデンシャルを入力することなくスキャンが可能です。

  • IAMキーペアの漏洩の可能性があるため、閲覧データの削除をしましょう。

  • さらに、GoogleChromeのログを見ると入力したクレデンシャルがログに出力されています。こちらも削除しましょう。
    私の手元の環境で複数ブラウザで確認しましたが、GoogleChromeとMicrosoftEdgeの場合はログファイルにもクレデンシャルが平文で出力されていました。FireFoxではそのようなログファイルは見当たりませんでした。 C:\Users\ユーザ名\AppData\Local\Google\Chrome\User Data\Default\Local Storage\leveldb

まとめ

  • Former2は非常に強力なツールです。マネコンなどで作成した既存リソースを複製する時などに非常に役立ちます。
  • 新規リソース作成時にも便利です。CloudFormationテンプレートの作成時に面倒だと思う事の一つとして、マネジメントコンソールでリソース作成する際、バックエンド側でよしなに作成してくれるIAM等のリソースを、全部定義しなければならない点が挙げられます。Former2を使えば、一度マネジメントコンソールで作成した後、自動でテンプレートを作成するといった手法で、この点を効率化することができます。
  • 現時点ではFormer2は全てのパラメータに対応してないようです。作成したリソースについては、必ずパラメータシートと突合しましょう。

安全に使うための工夫まとめ

  1. 永続的なIAMキーペアが使用できない場合、AssumeRoleを使用する(IAMロール,一時クレデンシャル)を使用する。
  2. 外部のWebサービスに自アカウントのクレデンシャルを入力できない場合、dockerでホストする。ベースイメージをバージョンアップするとなお良い。
  3. Former2で入力した情報はブラウザに残るため、閲覧データを削除する。一部ブラウザ(Chrome,Edge)ではログにも残るため、削除する。

【AWS】LinterによるCloudFormation構文エラーの自動検出

概要

AWSの環境構築にCloudFormationを使うことも多いと思います。

  • CloudFormationテンプレートの構文エラーをソースコードレビューで全部発見できますか?
  • 完璧だ!と思ってマネコンからアップロードして、構文エラーになったら辛くないですか?
  • エラーにはならないが、不要な定義が残っていたり、変数の型が間違っていたりするテンプレートを綺麗にしたくないですか?

本投稿では、上記を劇的に改善してくれるツールAWS CloudFormation Linter(cfn-python-lint)を紹介します。

記載内容

CloudFormation構文クイズ

Linterが検出する構文エラーの具体例をご理解いただくために、クイズを作りました。 各ボックスの中には、好ましくない記載箇所があります。探してみてください。

問題1:

ALB:
  Type: AWS::ElasticLoadBalancingV2::LoadBalancer
  Properties:
    IpAddressType: ipv4
    LoadBalancerAttributes:
      - Key: sample_key
        Value: true
                    ~~~~~~略~~~~~~

問題2:

 BackupSelection:
    DependsOn: BackupPlan
    Type: AWS::Backup::BackupSelection
    Properties:
                    ~~~~~~略~~~~~~
      BackupPlanId: !Ref BackupPlan
                    ~~~~~~略~~~~~~

問題3:

SnsTopicPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties:
      PolicyDocument:
        Version: '2008-10-17’
                    ~~~~~~略~~~~~~

CloudFormation構文クイズ解答

問題1:LoadBalancerAttributesのValueはString型ですが、BooleanのTrueが設定されている。

問題2:DependsOnは不要。"!Ref BackupPlan"により、暗黙的にBackupPlanが先行して作成される。

問題3:IAM Policyのバージョンが古い。最新は2012-10-17。

cfn-python-lintのご紹介

github.com

Linterが何に基づき構文チェックを行っているか

AWSが公開しているCloudFormationリソース仕様に基づいてチェックしてくれます。 f:id:VbuiV:20220308232544p:plain 引用:AWS CloudFormation リソース仕様 - AWS CloudFormation

チェック方法

コマンドプロンプトでの使い方

公式ページに従って、Python,Pip,cfn-lintをインストールしてください。 後は以下のように簡単に使用可能です。

 >cfn-lint {ファイルパス}

f:id:VbuiV:20220308232820p:plain

Visual Studio Codeでの使い方

先にコマンドプロンプトで使える状態にした上で、yml用、cfn-python-lint用、CloudFormation用のExtensionsをインストールしてください。

Name: YAML
Id: redhat.vscode-yaml
Description: YAML Language Support by Red Hat, with built-in Kubernetes syntax support
Version: 1.4.0
Publisher: Red Hat
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml
Name: CloudFormation
Id: aws-scripting-guy.cform
Description: VS Code Plugin for CloudFormation
Version: 0.0.24
Publisher: aws-scripting-guy
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=aws-scripting-guy.cform
Name: CloudFormation Linter
Id: kddejong.vscode-cfn-lint
Description: AWS CloudFormation template Linter
Version: 0.21.0
Publisher: kddejong
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=kddejong.vscode-cfn-lint

f:id:VbuiV:20220309092413p:plain

まとめ

  • CloudFormationの構文チェックをLinterを使って効率化する方法を紹介しました。強力な構文チェックツールなので、 CloudFormationを使う案件は利用することを強く推奨します。
  • Linterで検出される不備の中には、CloudFormationスタック作成時の構文チェックをスルーするものが多数あります(変数の型の誤り等)が、それはAWSがうまく解釈してくれているだけだと私は理解しています。ある日突然構文チェックが厳しくなる可能性も無いとは言えないので、構文はまもりましょう。(バージョンアップに伴って構文の型チェックが厳密になって動かなくなった・・・とか悲惨です。)
  • Githubを見ると、terraform用、Python用など、多様なLinterが存在しているので、何かいいものがあったらみんなで共有しましょう。

Tips

  • cfn-python-lintは全角文字があると動きません。使う場合はコメントはすべて英語で記載する必要があります。 f:id:VbuiV:20220308233201p:plain

  • 無視したいチェック項目は無視できます。

【AWS】今年度学習したAWSサービスの特徴をまとめておく - AWS analytics services編

概要

インフラ系のクラウドエンジニアとして、日々自己研鑽に努めています。 本投稿は今年度の学習のまとめとして、今後も覚えておきたい情報を記載したものです。 AWS analytics servicesに含まれるサービスについて、要件に適したサービスや、調査・検証が必要な内容をすぐに探し出せるようになることを主な目的に、各サービスと関連技術の特徴と効果的に活用するためのTipsを記載しています。

記載内容は、AWS公式ドキュメントやインターネットから拾い集めた情報を個人的に解釈した結果を記載しています。実機確認等による裏付けがされた内容ではない点、ご留意ください。

Analytics

Athena

  • Prestoベースのクエリサービス。S3へのクエリ実行可能(Glacierはサポートしない)。
  • CSV,JSON,カラムナフォーマットであるParquet,ORCが利用可能
  • パフォーマンス向上のコツ

    1. パーティション分割:各クエリがスキャンするデータ量が制限され、パフォーマンス向上とコスト削減が期待できる。パーティション追加後は、カタログ内のメタデータ更新が必要(Hive互換の場合:MSCK REPAIR TABLEコマンド、Hive互換ではない場合:ALTER TABLE ADD PARTITIONコマンド)
    2. カラムナフォーマット(Parquet)を使用。コスト削減効果も。
    3. ファイルを圧縮する。(S3からのロードが早くなる) ※その他詳細はリンク先参照Amazon Athena のパフォーマンスチューニング Tips トップ 10 | Amazon Web Services ブログ
  • Workgroupsを使用することで、クエリ結果の分離(他のグループに参照させない)、格納先S3の分離、グループ毎に異なるコスト制約(クエリ毎にスキャン可能なデータ量、またはWG毎に一定期間の間スキャン可能なデータ量)を設けることが可能。Workgroupsのアクセス制限はIAMで行う。

  • Redshiftへのクエリ発行も可能。Athena(ペタバイト単位)とRedshift spectrum(エクサバイト単位)を比較する際、パフォーマンスを重視する場合はRedshift spectrumが優れている。(★Redshiftとの使い分けのポイント)
  • 失敗したクエリに対しては課金されない。
  • テーブル定義としてGlue データカタログを使用している。そのため、Glue分の料金が発生。

EMR

  • Hadoopエコシステムの集合体。分散処理・分析を行う。
    • Ambari:オーケストレーション
    • Presto:分散型SQL
    • Hue:GUI
    • Ganglia:モニタリング
    • Hive:分散処理。性能はHive>Pig。
    • Pig:分散処理。性能はHive>Pig。
    • Ranger:データに対するきめ細やかなアクセス制御
  • インスタンスフリート:ターゲット容量を指定する。EMRは事前設定されたターゲット容量を満たすようオンデマンドorスポットインスタンスをプロビジョニングする。Provisioning timeoutの設定では、指定時間以内にスポットインスタンスをプロビジョニングできない場合。クラスターを終了させるアクションまたはオンデマンドインスタンスで容量を補うというアクションを設定可能。スポットインスタンス終了等に伴うデータ破損を防ぎたい場合は、EMRFS(S3)にデータを格納する。
  • クラスタノードにSSHアクセス可能。
  • 二種類のオートスケーリングがある。
    • EMR managed scaling:主要なメトリクスをモニタリングするマネージドなアルゴリズムにオートスケール。
    • AutoScaling:カスタムメトリクスを使用し、利用者が設定。
  • EMR on EC2はマルチAZ非対応。EMR on EKSはマルチAZをサポート。
  • Spark DataFrame:PySparkのクラスで、高いパフォーマンスを実現可能なデータ構造
  • PrestoやSparkではS3 Select Pushdownを利用することで、EMRとS3間のデータ転送を削減し、パフォーマンスが向上する(効果の有無はクエリの特性に依存するため、使用有無は公式ドキュメントのガイドを参考にすること)。
  • Rangerを使用することにより、行レベルのアクセス制御が可能(★アクセス制御の単位は他のサービスとの使い分けのポイント)。
  • DataSyncにより、S3,EFS,FSx for Windows File ServerとHDFS間のデータ転送が可能。
  • 一定期間idle状態だった場合、自動終了するポリシーの設定が可能(以前はidleメトリクスを監視し、CloudWatchアラーム,SNS,Lambdaと連携するといった仕組みの構築が必要だった。)。
  • EMR notebookはGithub,Codecommit,GitBucketと統合している。
  • EMRクラスタを削除した場合、EBSも削除される。データ永続化にはS3を使うこと。
  • EMRマスターインスタンス、コアインスタンス、タスクインスタンスには異なるマネージドセキュリティグループが関連付けられている。
  • EMRのファイルシステム
  • EMRのインスタンスストアとEBSはLinux Unified Key Setup (LUKS)による暗号化が可能。ネイティブなEBS暗号化もサポート。
  • S3DistCp(OSSツール):S3→HDFSに効率的(圧縮して)にデータをコピー。
  • EMRFSの暗号化

    Amazon S3 暗号化は、Amazon S3 との間で読み書きされた EMR ファイルシステム (EMRFS) オブジェクトで使用できます。Amazon S3 サーバー側での暗号化 (SSE) またはクライアント側の暗号化 (CSE) をデフォルトの暗号化モード保管時の暗号化を有効にする場合。オプションで、[Per bucket encryption overrides (バケットごとの暗号化オーバーライド)] を使用して、バケットごとに異なる暗号化方法を指定できます。Amazon S3 暗号化が有効であるかどうかにかかわらず、Transport Layer Security (TLS) は、EMR クラスターノードと Amazon S3 間で伝送中の EMRFS オブジェクトを暗号化します。 引用:暗号化オプション - Amazon EMR

Redshift

  • PostgreSQL互換(PSQL等も使用可能)。DWHにクエリ機能も付いているイメージ。
  • 3つのインスタンスタイプがある。
    • 高密度コンピューティング DC2
    • 高密度ストレージ DS2
    • Redshift マネージドストレージを備えた RA3
  • マルチAZ非対応。大規模障害対策にはクロスリージョンスナップショットを使う。
  • ディメンジョンテーブル:マスタデータ/ファクトテーブル:動的データ
  • データベース接続とユーザーアクティビティ情報を監査ログとして記録可能。保存先はS3。
  • KMSと統合されているが、KMSでキーを管理せず、AWS CloudHSM または on-premises HSMで直接キーを管理することも可能。
  • 複数セッションやユーザが同時にクエリを実行している際、相互に影響を受けないようワークロード管理(WLM)を使ってキューを分けることが可能。自動WLMと手動WLMとがあるが、自動WLMは一貫した高速のクエリパフォーマンスで、事実上無制限の同時ユーザーと同時クエリをサポートするとのこと。
  • クラスターのサイズ変更
    • Elastic resize:既存クラスターにノード追加またはノード変更。10~15分で完了。リサイズ中クラスターは読み取り専用。
    • Classic resize:新しいクラスタを作成し、元のクラスターからデータをコピー。データ量によって数時間から数日要する。リサイズ中クラスターは読み取り専用。
  • MATERIALIZED VIEWを使用することで、コスト削減(クエリ処理の削減)が可能なケースがある。VIEWのデータを更新するにはREFRESH MATERIALIZED VIEWを実行する(dead tuplesを削除するためにさらにVACUUMをしたほうが良い。)。
  • 1 つ以上の列をソートキーとして定義可能(複合ソートキーとインターリーブソートキー)。インターリーブソートキーは複合ソートキーに比べて大幅なパフォーマンス向上が見込める。ただし、ID 列,日付,タイムスタンプなど、一定間隔で増加する属性を持つ列でのインターリーブソートキーの使用は非推奨。
  • パフォーマンスのため、カーディナリティは低く保ったほうが良い。
  • Athena(ペタバイト単位)とRedshift spectrum(エクサバイト単位)を比較する際、パフォーマンスを重視する場合はRedshift spectrumが優れている。(★Redshiftとの使い分けのポイント)
  • Redshift spectrumはRedshiftテーブルにデータをロードすることなく、クラスターに依存しない専用のAmazon Redshiftサーバー上でクエリ実行するため、Redshiftクラスターにほとんど負荷がかからない。
  • S3→Lambda(トラック管理はDynamoDB)→RedshiftのData転送アーキテクチャが公開されている。
  • 以前はRSをVPCに配置してもS3などのサービスに対してはIGW経由での通信が必要だったが、拡張ルーティング機能によりVPCのルーティングテーブルに従ってルーティング可能になった。
  • DBlinkを使ってPosrgreSQLと統合可能(PostgreSQLからRSに対してSQL実行可能)。
  • データをロードするためのベストプラクティス(データをロードするための Amazon Redshift のベストプラクティス - Amazon Redshift) 例:単一の COPY コマンドを使用した複数のファイルからのロード

    Amazon Redshift は、複数の圧縮データファイルからの並列的なデータロードを、自動的に実行します。ただし、複数の COPY コマンドを同時に使用して複数のファイルから 1 つのテーブルにデータをロードする場合には、Amazon Redshift はそれらの読み込みを直列的に実行します。この種類のロードはかなり低速で、テーブルにソート列が定義されている場合は、最後に VACUUM プロセスが必要になります。引用:単一の COPY コマンドを使用した複数のファイルからのロード - Amazon Redshift

Kinesis Data Analytics

  • Apache Flinkベースのリアルタイム分析サービス。
  • KDSとKDFを流れるデータに対してSQLベースのクエリが発行可能。クエリ結果はKDSやLambdaに転送。
  • 処理できないレコードはエラーストリームに転送することで後から解析可能。
  • マシンラーニング(Random Cut Forest)による異常検知が可能。
  • 1KPU=4GBメモリ。8KPUが上限。
  • ウィンドウクエリ
    • Stagger Windows: データが届くと開く、キー付けされた時間ベースのウィンドウを使用してデータを集計するクエリ。キーによって、複数の重なり合うウィンドウが可能になります。タンブリングウィンドウと比較すると、Stagger Windows は遅延データまたは順序通りでないデータを削減するため、これは、時間ベースのウィンドウを使用してデータを集約する方法として推奨されます。
    • タンブリングウィンドウ: 定期的に開閉する、個別の時間ベースのウィンドウを使用してデータを集計するクエリ。
    • スライディングウィンドウ: 固定時間または rowcount 間隔を使用して、データを継続的に集計するクエリ。引用:ウィンドウクエリ - Amazon Kinesis Data Analytics for SQL Applications 開発者ガイド
  • ETL処理も可能。
    例: 複数のデータ型の変換 - Amazon Kinesis Data Analytics for SQL Applications 開発者ガイド

Elasticsearch Service(OpenSearch

  • OSSのElasticsearchベースのサービス。(Close APIは使用不可)
  • 3つのAZを使用したマルチAZモードでの起動が推奨構成。以下はESのクラスタの構造。
    • マスターノード:3つ。1つのマスターと2つのスレーブ
    • データノード:3つ。各々のノード内部に複数のシャードを持つ。プライマリシャードは一つ。2つはレプリカシャード。
  • クラスタのことをドメインと呼ぶ。複数のドメイン横断のクエリを実行可能(これはOSS版のESにはできないAWS版ESだけの独自機能)。
  • ドメインの作成時にパブリックドメイン or VPCドメインを選ぶ。
    • パブリックドメイン:パブリックにアクセス可能。
    • VPCドメイン:プライベートサブネット内にENIを作成し、それを経由することで他のAWSサービスとプライベートな通信が可能。
  • 標準では各ノードのインスタンスストアまたはEBSにデータを格納するが、高いパフォーマンスが必要ないデータについてはUltraWarmストレージ(S3)を使用可能。
  • ドメインに含まれるインスタンスタイプやボリュームサイズ等の変更を行った場合、内部的にBlue/Greenデプロイが行われる。
  • Kinesis Data Firehose(KDF)の出力先に指定可能。
  • CloudWatchLogsからのデータ取り込みはLambda等を経由する必要がある。
  • Kibanaダッシュボードはリフレッシュレートの設定により、定は的(15分毎,7日毎等)に更新が可能(★Quicksightとの使い分けのポイントの一つ)。
  • Kibanaのログイン認証にCognitoを使用可能。
  • リソースベースIAMをサポート。それとは別にKibanaの権限管理機能も利用可(作成時に有効化する必要がある)。
  • 自動BackupはS3に格納される。自動バックアップからは新しいESドメインの作成は不可。バックアップから新しいESドメインを作成したい場合は手動Snapshotを使用する必要がある。

Quicksight(QS)

  • データの可視化サービス。様々なグラフが予め用意されている。データに対して適切なグラフが不明な場合、AutoGraph機能を使うと、QSが自動判定してくれる。(Excelのグラフ機能をリッチにしたイメージ)
  • データを更新した際、接続プロパティとデータの格納場所に応じて処理が異なる。QSがダイレクトクエリを使用してデータに接続する場合、ダッシュボードを開くたびに自動更新される。ダイレクトクエリの代わりに、SPICE(インメモリデータストア)にデータをインポートすることも可能。SPICEのデータは定期更新可能(毎時(Enterpriseのみ),日次,週次,月次)(★Kibanaとの使い分けのポイントの一つ)。
  • 主なデータソース:リレーショナルデータ(Athena,S3,Redshift,PostgreSQL,等)やファイル(CSV,TSV,ELF,CLF,JSON,Excel)やSaaS(ServiceNow等)など多様。※DynamoDBやGlueデータカタログは公式ドキュメント上データソースとして記載なし。
  • Standard EditionとEnterprise Editionがある。Enterpriseの特徴は以下の通り。
    • データセットの行レベルでのアクセス制御が可能(★アクセス制御の単位は他のサービスとの使い分けのポイント)。
    • 1時間毎のSPICEの定期更新が可能
  • プライベートサブネット内にENIを作成し、それを経由することで他のAWSサービスとプライベートな通信が可能。QS用セキュリティグループという特殊なSGを介して通信を制御する。
  • マシンラーニング(Random Cut Forest)による異常検知が可能。

Data movement

Glue

  • Apache SparkベースのETLサービス。
  • PythonScalaに対応している。既存のコードをS3に格納し、呼び出すことも可能。
  • AWS GlueクローラとジョブはCron式(最短5分)で定期的なスケジュールで実行可能(複数ジョブ同時実行可)。これにより、カタログを最新の状態に保つことができる。
  • DynamoDBからデータのロードが可能(DynamoDBへのunloadは不可)。
  • S3から小さなファイルを大量に読み込む際、groupFilesの設定を有効にし(さらにまとめて読み込むサイズを指定し)、まとめて読み込むと効果的。ただし、入力ファイル数が50,000を超える場合には自動的に有効になる。また、以下の点に注意。

    groupFiles は、csv、Ion、grokLog、json、および xmlデータ形式から作成された DynamicFrames でサポートされています。このオプションは、avro、parquet、orc ではサポートされていません。 引用:大きなグループの入力ファイルの読み取り - AWS Glue

  • DynamicFrames:AWSによるPySparkの拡張の一つ。Spark DataFrameに似ており、高いパフォーマンスを実現可能なデータ構造

  • リソースベースポリシーをサポート。アクセス制御の単位はデータカタログのARN粒度に依存すると思われる。(★アクセス制御の単位は他のサービスとの使い分けのポイント)。
  • AWS Glue Schema Registryにより、スキーマ(データレコードの構造と形式)のバージョン管理が可能。現状JSONApache Avro形式をサポート。Kinesis Data Streams(KPL,KCL)やMSKとも統合している。
  • DataBrew:コードを書くことなくデータのクリーニングや正規化が可能な視覚的なツール。クレジットカードの番号を下4桁にするといった機密情報を削除する処理も可能。

Managed Streaming for Apache Kafka (MSK)

  • Apache Kafka ACLでアクセス制限が可能。MSKにPush可能なProducerの制限等に利用可。
  • 容量管理やスケーリングの管理をしたくない場合、MSK Serverlessを使用可能。ただし、クォータの制限が多い点に注意。例:最大メッセージサイズ8MB(★メッセージサイズの上限は、SQSやKinesisとの使い分けのポイントの一つ)ServerlessではないMSKのメッセージサイズに関する記載はAWS公式ドキュメント上見当たらなかった。
  • ストレージのAuto Scalingが可能
  • コンポーネント

Kinesis Data Streams(KDS)

  • リアルタイムにデータを転送。プログラム間(KPL/Kinesis Agent→KCL,Lambda等)へデータ転送するイメージ。Sparkからの読み書きも可能。AutoScaling機能はない。(★KDFとの使い分けのポイント)
  • プロデューサ:Kinesis Producer Library,Kinesis Agent。Agentは1MB/sまたは1000回/s転送可、KPLはパフォーマンスが高い。KPLに圧縮機能はない。
  • コンシューマ:Kinesis Client Library(純正),Kinesis Connector Library(3rdParty製)
  • ポーリング間隔の推奨は各シャード毎に1秒に一回。
    Kinesis Client Libraryのデフォルトもそれに従っているが、idleTimeBetweenReadsInMillisでチューニング可能。
  • APIの上限とペイロード毎の制限は分けて考える。例:GetRecordsのAPIコールの上限は5TPSで、呼び出し毎に最大10,000レコードまたは最大10 MB返却可能。※上限を超えるAPIコールはスルーされる。
  • レコードサイズは最大1000KB(★メッセージサイズの上限は、SQSやMSKとの使い分けのポイントの一つ)。
  • 拡張ファンアウト:コンシューマが1シャードを占有し、最大で2MB/sの送信が可能。これにより、コンシューマに対して70ms以内の配信が可能となる。
  • サーバーサイド暗号化:KMSの"CMK"を使用して自動的にデータを暗号化。
  • Glueと統合されている。

Kinesis Data Firehose(KDF)

  • ニアリアルタイムにデータを転送(最短60s)。サービス間(S3,cloudwatch,Redshift,ES,splunk等)でデータ転送するイメージ。Sparkからの読み書きは不可。AutoScaling機能がある。(★KDSとの使い分けのポイント)
  • KDFにデータを追加する方法は、Kinesis AgentとAPIの二種類ある。さらに、APIにはPutRecord(1API毎に1レコード)とPutRecordBatch(1APIで複数レコード)がある。Kinesis AgentはOS上のログやイベントをKDS,KDF,CloudWatch,CloudWatchLogsへ転送する(リトライ機構も具備)。
  • レコードサイズは最大1000KB(★メッセージサイズの上限は、SQSやMSKとの使い分けのポイントの一つ)。

Data lake

S3

Predictive analytics and machine learning

Machine Learning

  • コーディングなしでMLを利用可能(★SageMakerとの使い分けのポイント)
  • レーニングデータのデフォルトの上限は100GB(サポートリクエストで調整可能)(★SageMakerとの使い分けのポイント)
  • MLタイプは三つ。
    • バイナリ:二者択一。例:ネコか?犬か?
    • マルチクラス:複数選択。例:ネコ?トラ?ライオン?
    • 回帰:将来予測。

SageMaker

  • レーニングデータに特に上限はない。(★MLとの使い分けのポイント)
  • SageMaker NEO:特定デバイスに最適化(高速化)するようモデルをコンパイル

Othres

Lambda

  • vCPUの上限は6/メモリの上限は10GB
  • RedshiftへのクエリはData APIを使用
  • 最長15分でタイムアウト

Simple Queue Service

  • 最大メッセージサイズは256KB。Amazon SQS Extended Client Library for Javaにより、ペイロードをS3から参照することが可能で、最大2GBのメッセージに拡張可能(★メッセージサイズの上限は、MSKやKinesisとの使い分けのポイントの一つ)。

DataSync

  • DataSync Agentを介して、on premisesからS3やEFSにデータを移行可能。データ転送中はTLS1.2により暗号化され、データ整合性チェックも実施される。
  • S3,EFS,FSx for Windows File ServerとHDFS間のデータ転送が可能。

Database Migration Service

  • DBのデータ移行に使用するサービス
  • SSL/TLSで通信は暗号化

DynamoDB

  • プライマリーキーのタイプは二つ。パーティションキー単一で構成するタイプと、パーティションキーとソートキーの複合キーとするタイプ。
  • 1レコード400KBまで。
  • RCU:最大4KBの項目の読み込みについて、強い整合性の場合は1回/s、結果整合性の場合は2回/sの可能。※割り切れない数に注意。5KBの項目は強い整合性で2RCU,結果整合性で1RCU必要。5KBのファイルが4つ、合計20KBの場合は強い整合性で8RCU,結果整合性で4RCU。
  • WCU:最大1KBの書き込みについて、1回/s可能。
  • IAM認証可能。
  • DynamoDBは暗号化可能(DynamoDB Streamsも含めて)。

Key Management Service (KMS)

  • KMSのAPIで暗号化可能なデータサイズは4MBまで。
  • エンベロープ暗号化:プレーンテキストとデータキーを別のキーで暗号化する機能。

一般的なETLのナレッジ

  • ETLでは、ターゲットテーブルを変更 (更新、挿入含む) する前に、ステージングテーブルにデータを一時的に保持するということが行われる。GlueやRedshiftのAWS公式ドキュメントにもその手法に関について記載されている。