AWS 認定ソリューションアーキテクト – プロフェッショナル 合格への道#16 

#初めに
昨日のプロ試験のスコアは557でした。
次は750届きそうな気がします。

#学習
## 製品検品作業を自動化するワークフローをAIを導入

### AWS再入門 Amazon Simple Workflow Service編
> 開発者が並行したステップまたは連続したステップがあるバックグラウンドジョブを構築、実行、スケールするのに役立ちます。Amazon SWF は、クラウド内の完全マネージド型の状態トラッカー、およびタスクコーディネーターとして利用できます。低レイテンシーネットワーキングでのデータの高度なグラフィカル処理に特化したG2インスタンスを使用し、SWFはAWSサービスとの人間のやり取りを含むワークフローをサポートします。

* 設計
    * ワークフローの設計アクティビティの洗い出し
    * ドメインの作成
        * ドメイン区分ごとにワークフローエクゼキューションやタスクリストが管理される
    * ワークフローとアクティビティタイプの登録
* 開発
    * アクティビティの実装
        * アクティビティタスクリストからタスクを取り出す
        *　ワークフロー内の処理
        *　既存DCやオンプレでも可能
        *　人手を介する作業でも可能
    * デサイダーの実装
        * デシジョンタスクリストをポーリングしてタスクがあった場合次に実行するアクティビティを指定
    * ワークフロースタータの実装
        * ワークフローをキックするためのプログラム
        * キックするたびにワークフローエクゼキューションが作成される
            * ワークフローのインスタンス
                * ワークフローID
                    * ユーザ採番
                * RunID
                    * 自動採番
                * ワークフローヒストリー
                    * タスクの実行履歴
                * 開始時間
                * タイムアウト時間
                * 実行
    * デサイダーやアクティビティワーカーのデプロイ
    * ワークフロースタータの実行
    * ワークフロー実行

![SWF.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/d51a904e-6c67-fae0-7050-5208c288e4fd.png)

#### 要点

> まずは上のデータの流れを用語を使って書きます。次に書く解説と見比べながら意味を把握していって下さい。
- 動画をアップロードしたタイミングでスターターがワークフローを叩いてエグゼキューションが動きだす - エグゼキューションが最初のタスクをデシジョンタスクリストに投入 - デサイダーがデシジョンタスクリストに投入されたタスクを参照して必要となるアクティビティを決定。アクティビティタスクリストにタスクを投入 - 指定されたアクティビティがアクティビティタスクリストからタスクを確認、バッチ処理を行う - 処理が終了したらアクティビティがタスクリストに結果を投入 - デサイダーがタスクリストから結果を確認、次の処理を決定して次のアクティビティタスクリストにタスクを投入 - これらを繰り返してワークフロー処理を行う - 全ての処理が終わったらデサイダーはワークフローエグゼキューションに処理を返し、ワークフローエグゼキューションが終了処理を行う

### Amazon Rekognition のよくある質問
https://aws.amazon.com/jp/rekognition/faqs/

>Amazon Rekognition は、強力な画像分析をアプリケーションに簡単に追加できるようにするサービス

* Rekognition Image
    * オブジェクト、シーン、顔の検出や、テキストの抽出、有名人の認識、画像内の不適切なコンテンツの識別ができる画像認識サービス
* Rekognition Video
    * ティビティの検出や、フレーム内の人物の動きの理解を行うビデオ認識サービス

### AWS再入門 AWS Data Pipeline編
https://dev.classmethod.jp/articles/cm-advent-calendar-2015-getting-started-again-datapipeline/

> AWS Data Pipeline は、指定された間隔で、信頼性のあるデータ処理やデータ移動（AWS のコンピューティングサービスやストレージサービス、ならびにオンプレミスのデータソース間）を行うことができるウェブサービスです。AWS Data Pipeline を使用すると、保存場所にあるお客様のデータに定期的にアクセスし、そのスケールで変換と処理を行い、その結果を Amazon S3、Amazon RDS、Amazon DynamoDB、Amazon Elastic MapReduce（EMR）のような AWS サービスに効率的に転送できます。

+ AWSのマネージドサービス
    + 
+ ノード間でのデータ移行やETL処理を実行
+ 一般的なスケジューラの機能
+ オンプレの処理にも使える
    + Task RunnerというJavaのプログラムをインストールするだけで、オンプレのサーバだとしてもData Pipelineで扱うことができるようになります。

![DPL.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/cb222136-04e2-d3cb-db9d-846a6c8a017b.png)

> データ分析のために、既存のRDBからRedshiftにデータを投入したい場合の利用パターンです。
既存のRDBからはS3に対してソースデータをエクスポートし、Redshiftのテーブルに合わせて変換と加工を加え、最終的にRedshiftにインポートします。これは割とよくある処理フローだと思いますが、Data Pipelineを効果的に利用できるユースケースだと思います。

## ライセンスを継続する方式でのAWSへの移行方法と、そのライセンスの管理方法
### AWS SMS とは
> AWS Server Migration Service は、オンプレミスの VMware vSphere、Microsoft Hyper-V/SCVMM、または Azure 仮想マシンの AWS クラウドへの移行を自動化します。AWS SMS は、サーバー仮想マシンをクラウドホストの Amazon マシンイメージ (AMI) として段階的にレプリケートし、Amazon EC2 にデプロイします。AMI を使用すると、クラウドベースのイメージを簡単にテストして更新した上で、本番稼働環境にデプロイできます。

### AWS License Manager
> AWS License Manager は、ソフトウェアベンダーのライセンスを簡単に管理できるようになるサービスです。AWS License Manager により、管理者はライセンス契約の規約をエミュレートするカスタマイズされたライセンスルールを作成し、EC2 のインスタンスの起動時にそれらのルールを適用できます。管理者はこれらのルールを使用して、契約が定める以上のライセンスを使用する、または短期的に異なるサーバーにライセンスを再割り当てするといったライセンス違反を規制できます。AWS License Manager は AWS のサービスと統合し、1 つの AWS アカウントを通じて、複数のアカウント、IT カタログ、オンプレミスにわたってライセンスの管理を簡素化します。ライセンス管理者は AWS Service Catalog でルールを追加できます。

#### AWS License Manager と AWS Organizations との併用方法
> AWS License Manager は AWS Organizations とシームレスに統合します。管理者は自分の組織のマスターアカウントにサインインすることによって自分のすべての組織アカウントをリンクさせることができます。これにより、組織全体のライセンスの使用状況を一元的に管理および制御できます。また、マスターアカウントを使用して、すべての組織アカウントにまたがるソフトウェアを見つけることもできます。

## NAT インスタンスと NAT ゲートウェイの比較
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-nat-comparison.html

## IPv6の追加に必要なAWSでの設定方法

### Amazon VPCでEgress OnlyインターネットゲートウェイとIGWを併用する
https://dev.classmethod.jp/articles/use-both-eigw-and-igw-on-vpc/

## server migration
### SMS
> AWS Connector for vCenterと呼ばれるコネクターを移行対象となるオンプレミス環境のサーバーにインストールします。これによって、GUIを使用してVMware vSphereインフラストラクチャからAmazon EC2に仮想マシンをインポートできます。VMware vCenter から Amazon EC2 に移行する仮想マシンから EC2 インスタンスを起動します。AWS Connector for vCenter を使用して仮想マシンを Amazon EC2 に移行

### VM Import/Export
> 仮想マシン (VM) イメージを既存の仮想化環境から Amazon EC2 にインポートし、それを元の環境にエクスポートすることができます。この方法を使うと、アプリケーションおよびワークロードを Amazon EC2 へ移行したり、VM イメージカタログを Amazon EC2 にコピーしたり、バックアップと災害対策のために VM イメージのリポジトリを作成

### AWS Import/Export
> 大量のデータを物理ストレージデバイスから AWS に転送するのに使用するサービスです。ポータブルストレージドライブを AWS に移行すると、AWS Import/Export は、Amazon の高速内部ネットワークを使用してストレージデバイスからデータを直接転送

## DB migration
### AWS Database Migration Serviceを試してみた
> 現在RDSでは「MySQL」「Postgres SQL」「Oracle」「SQL Server」の4つが対象となり※「Maria DB」「Aurora」も対象 オンプレにあるDBをRDSに簡単に移行することができます！

* 同じエンジンの場合は「AWS Database Migration Service」違うエンジンの場合は「AWS Scheme Conversion tool」を使います。
* 移行にかかるコストですが1TBを$3くらいで可能

#### やること
* レプリケーションインスタンス作成
* エンドポイント作成
* タスク作成
* cloudwatchログ確認

## RDSのコネクション接続を最適化
### Amazon RDS Proxy (プレビュー) による接続の管理
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/rds-proxy.html

> Amazon RDS Proxy を使用すると、データベース接続のプーリングと共有をアプリケーションに許可してスケーラビリティを向上させることができます。RDS Proxy は、アプリケーション接続を維持しながら、スタンバイ DB インスタンスに自動的に接続することで、データベース障害に対するアプリケーションの耐障害性を高めます。RDS Proxy を使用すると、データベースに AWS Identity and Access Management (IAM) 認証を適用し、AWS Secrets Manager に認証情報を安全に保存することもできます。

RDS Proxy には、MySQL および PostgreSQL との完全な互換性があります。ほとんどのアプリケーションでは、コードを変更せずに RDS Proxy を有効にすることができます。

+ RDS Proxy の概念と用語
    + RDS Proxy は、データベースの接続管理に伴うメモリと CPU オーバーヘッドを軽減

## iSCSI接続を実施するためにCHAP実装
### CHAP
> PPPなどで使用されるユーザ認証の一方式

### ボリューム用の CHAP 認証の設定
https://docs.aws.amazon.com/ja_jp/storagegateway/latest/userguide/GettingStartedConfigureChap.html

> AWS Storage Gateway では、iSCSI イニシエータは iSCSI ターゲットとしてボリュームに接続します。Storage Gateway は、チャレンジハンドシェイク認証プロトコル (CHAP) を使用して iSCSI とイニシエータの接続を認証します。CHAP は、ストレージボリュームターゲットへのアクセスが試みられる際に認証を要求することによって、プレイバック攻撃に対する保護を提供します。ボリュームターゲットごとに、1 つまたは複数の CHAP 認証情報を定義できます。

## lambda＋DynamoDB
### 形で考えるサーバーレス設計
https://aws.amazon.com/jp/serverless/patterns/serverless-pattern/

> 画像認識の利用が登場した場合はAmazon Rekognitionの利用を第一に検討します。 Amazon Rekognitionでは、画像分析と動画分析をアプリケーションに簡単に追加できます。Rekognition API に画像または動画を与えるだけで、このサービスが対象物、人、テキスト、シーン、アクティビティ、それに不適切なコンテンツまで検出します。LambdaとRekognitionを組み合わせることにより、低コスト、可用性、安定性のニーズを満たすことができます。Lambdaファンクションを利用してRekognition APIを呼び出して、JSONフォーマットで情報を取得するといった処理を構築することが可能です。画像の保存場所はS3が可用性と安定性を確保しながらコスト最適に利用

## VPCに侵入検知・防止システムを実装
### Transit Gateway Network Managerを使ってTransit GatewayとVPN接続の可視化をしてみた #reinvent
https://dev.classmethod.jp/articles/transit-gateway-network-manager-vpn/

> 作成した環境の可視化ができるようになりました。

#### [速報] Transit Gateway inter-Region Peeringが発表されました #reinvent
https://dev.classmethod.jp/articles/tgw-interregion-peering/

> 別のアカウントのTransit Gatewayや、別のリージョンのTransit Gatewayを指定することが可能
通信トラフィックがグローバルなAWSバックボーンに留まりパブリックインターネットを通過しない
将来のルート伝播機能を利用するために、Transit Gatewayには一意のASNを指定することを推奨

## データ移行
* スノーボール
    * 80TB
    * 既存のインターネット接続の空き容量を使用してAWSにデータをアップロードするのに1週間以上かかる場合は、Snowballの使用を検討する
* スノーボールエッジ
    * Snowball Edgeストレージの最適化は100TB
    * Snowball Edge Computeの最適化は42TBのストレージ容量

## Memcached と Redis の比較
Memcached と Redis の比較
https://aws.amazon.com/jp/elasticache/redis-vs-memcached/

### RDS 
![RDS.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/a24e683b-a606-2821-ae22-4fcce4c728e8.png)

* マルチAZ
    * AZをまたがったアクティブ-スタンバイ構成を指します。常に同期レプリケーションされていて、障害が発生した時にはスタンバイ機へフェイルオーバーします。
フェイルオーバーはDNSの名前の付け替えにより行われます。そのため、接続先のIPアドレスをキャッシュし続けるとアプリケーション側でフェイルオーバー先に接続できない自体が発生する
* リードレプリカ
    * 一部のDBエンジン（MySQL、PostgreSQL、MariaDB）では、読み取り専用データベースのリードレプリカを構成できます。リードレプリカにより読み取り処理をスケールアウトできるようになります。MySQL、MariaDBの場合が、リージョンを超えてレプリカを構成することもできます。
Oracleの場合はGoldenGateを使用するとレプリカを構成することができます。

![Aurora.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321923/d3f8afda-8964-2b3f-bebd-5d645b2d6013.png)

* マスタ（Writer）
    * DBクラスタ内のインスタンスの中で書き込みを行えるインスタンスをマスタ（Writer）と呼びます。マスタにはDBインスタンス個別のエンドポイントと、クラスタ全体での書き込み用エンドポイント（クラスタエンドポイント）の両方が設定されます
* リードレプリカ（Reader）
    * 障害時のフェイルオーバー用writer
* データは、3AZに2つずつ、合計6重化されて保存