AWS DVA デベロッパー メモ2

AWSを使ったことがなく、用語が全然わからない人向けのサイトです。正確性に欠ける可能性がありますが、わかりやすさ重視で書いていきます。
デベロッパー アソシエイトの範囲です。
今回は頻出の単語を書いていきます

TDE 「透過なデータ暗号化」

RDSで利用できる。ストレージへの書き込みの前に自動的にデータを暗号化し、取り出す時には、自動的に複合化できる。機密データを取り扱うときにしようされる。

PFS

perfect forward secrecy 暗号化された通信と暗号化するための秘密鍵が両方もれても大丈夫にする概念。一時的なセッションキーを用いることで情報漏洩を防止する。 すべてのサービスで利用可能だが、ユーザー側で操作できるのは、CloudFrontとELBのみ。

ターゲット追跡ポリシー

カスタムメトリクス と何かのターゲットの値に基づいてAutoScalingする機能。

ステージ変数

デプロイステージと関連づけられた設定属性として定義できる名前と値のペア。異なるバックエンドのエンドポイントとやりとりができるようにAPIデプロイステージを設定できる。

env.yaml

Elastic Beantalkを作成するときに使用されるスクリプト。環境作成のためのパラメータを設定する。(環境名、ソリューションスタック、環境リンク)

cron.yaml

定期的に自動でワーカー環境(長時間処理できる)のキューにジョブを追加できる。Elastic Beantalkを利用した繰り返しタスクやスケジュール設定されたタスクセットを非同期で実行することができる。(分割して繰り返しタスクを実行することができる)

タスク戦略配置

タスク配置、タスクの終了でインスタンスを選択できるモード
・binpack 使用可能な最小量のCPUまたはメモリに基づいてタスクを配置する。これにより、使用量のインスタンスの数が最小限に抑えられる。
・random タスクをランダムに配置する。
・spread 指定された値に基づいてタスクを均等に配置する。暗黙的または明示的に指定した試薬に従うことができる(指示されていたら従うし、指示されてなくても適当にやる)「自由人」

ECSはタスク別に権限を制限することができる。タスク別にIAMロールを割り当てることでアクセス制御が可能になる。

ECSでX-Rayデーモンを使用するためには、X-Ray SDKにおいてAWS_XRAY_DAEMON_ADDRESS環境変数を設定する必要がある。
X-RsyデーモンはX-Ray SDKと連携し(仲良し)、X-Rayサービスに到達するように設定しなければならない。

GenerateDataKeyWithoutPlaintext

「鍵作って!」ていう命令。
データキーを作成するAPI。暗号化されたデータキーのコピーを返してくれる。このAPIコールによって、指定した顧客マスターキー(CMK)で暗号化されたデータキーを生成することができる。

Secrets Managerパラメータストアは性能が高いため、スパイクアクセスにも対応できる。SystemManagerパラメータストアと違って有料。

HTTPプロキシ統合

クラアントとバックエンドがHTTPエンドポイント によって対話するためには、HTTPプロキシ統合を設定する必要がある。

S3バケットに個人用のスペースを作成するためには、動的変数を用いたIAMポリシーをIAMグループにアタッチする。

AssumeRole

一時的にアクセス権限を持つことができる。
IAMロールのアクセス権限を使用して、アプリケーションがファイルをS3にアップロードするためには、AssumeRoleのAPIコールを使用することが必要となる。

MySQLの障害原因をログで解明する

スロークエリログ 予想以上に時間がかかったSQLステートメント(命令)を記録。long_quely_time(設定した時間)を超えたもの記録。 また、min_examined_row_limit(少なくとも検索する必要があった行数)で構成される。 エラーログ 開始および停止された時間とクリティカルエラーを記録 一般ログ クライアントの操作を記録。接続・接続解除をしたときにログを残す。

SAMのデプロイを自動化(コマンド)

sam package デプロイ用にパッケージ化(デプロイ時に使う)
sam deploy Lambdaにデプロイ(デプロイ時に使う)


SQS拡張クライアントライブラリ

SQSに送信されるメッセージのサイズ制限を開放することができる。2GBまで可能になる。しかし、SQSに保存する必要がない限り、S3に保管しておくことが推奨されている。

CloudFormationでは、アカウントごとにエクスポート名はリージョン内で一意である必要がある。

ステージ変数

・環境変数と同じように機能する。
・APIセットアップやマッピングテンプレートで使用できる。
・リリースの段階を管理することができる。
・異なるバックエンドのエンドポイントとやりとりできるようにAPIデプロイステージを設定することができる。

X-Rayのセグメントを検索したい

フィルタ式を利用する。X-RayコンソールやGetTraceSummaries APIを使用して検索する。
例)api.index.netを通過するトレースを検索する。
service("api.index.net")
例)goardbulという名前が入ったアノテーション(注釈)を持つトレースを検索したい
annotation.account="goardbul"
GetTraceSummariesはフィルタ式を使用して、指定されたトレースIDや注釈を取得することができる。完全なトレースを取得するためにはBatchGetTracesにトレースIDを与えることが必要となる。

ElasticBeanatalkでエラーが発生している場合、CloudFormationでログを確認することができる。(CloudFormationでサポートされているため)

CloudWatchイベントには定期的に自動実行する機能がある。

StreamViewType

DynamoDBストリームにおいて、値が更新されたときに何のログを取るか決めておく設定。
4つのタイプ
・KEYS_ONLY  変更されたアイテムのキー属性のみをログに取得
・NEW_IMAGE 新しいイメージ(変更後に表示される項目全体)をログに取得
・OLD_IMAGE 古いイメージ(変更前に表示されていた項目全体)をログに取得
・NEW_AND_OLD_IMAGES(NEW_IMAGE、OLD_IMAGE)新古どっちもログに取得

API Gatewayで作成されたAPIは全てHTTPSエンドポイントのみを公開する。

KMSはCloudTrailと統合されていて、KMSで実行されたアクションを記録することができる。例えば、APIコールのイベントなどをログとして保存しておくことができる。変なことをしたらバレてしまうよ。

CloudFrontとビュアー間は全てHTTPS通信にしたい。

CloudFrontにビュアープロトコルポリシーをアタッチ。
そのビュアープロトコルポリシーに「HTTPS Only」「Redirect HTTP to HTTPS」を設定する必要がある。

Lambdaの512KBまでしか入らないので、それを超えるものを暗号化したいなら暗号化SDKを使用して、暗号化されたファイルをLambda関数でエンベローブする必要がる。

カスタマー管理側のキーを設定しない場合はLambdaがアカウントで作成する、aws/lambdaという名前のAWS管理型CMKを使用する。

◉ビルド実行エラーを確認するためにには、CloudTrailを有効にしてビルドのログを取る必要がある。

Lambdaレイヤーを使用することで、Lambda同士の依存関係によるエラーを回避できる。Lambda関数を共有化することでデプロイパッケージサイズを小さくすることができるので、開発しやすくなる。

オプティミスティックロック

同時アクセスによるデータの不整合を防ぐ排他制御の手段。データを取得してから更新するまでの間、データが変更されていないことを確認することで整合性をたもつ。
DynamoDBテーブルのデータに対しての上書きを防ぐために、SDKのオブジェクト永続性モデルを使用したオプティミスティックロックを設定することが推奨されている。

kms:Encrypt CMKによる暗号化を許可するリクエスト
マルチパートアップロードを実行するには、kms:Decryptのアクセス許可をもっている必要がある。(アップロードが完了するときに暗号化されたファイルパートからデータを複合する必要があるため)

キューを管理する代表的なAPI(命令

・CreateQueue キューを新規作成する。属性には、格納するメッセージのデフォルト値を設定することができる。
・SetQueueAttribute 既存のキューの属性を変更する。
・GetQueueAttribute キューの属性を取得して確認する。
・GetQueueUrl キューのエンドポイントのキューURLを取得する。
・ListQueue 指定したリージョンのURLの一覧を取得できる。
・DeleteQueue キューにメッセージがあるかどうかに関係なく、キューを削除する。問答無用削除。
・PurgeQueue 指定したSQSキュー内のメッセージを全て削除する。最大60秒かかる。QueueURLパラメーターでメッセージを指定することができる。一定期間が経過するとSQSキュー内のメッセージを削除することができる。

メッセージの操作

・SendMessage プロデューサーがメッセージを送信する。
・ReceiveMessage コンシューマーがメッセージを受信、ポーリングする。
・DeleteMessage コンシューマーが処理を終了したら、メッセージを削除する。
・DeleteMessageBatch 複数のメッセージを削除するときに使用する。

タスク定義

ECSがポートマッピング(対応づけ)を使用して通信するためには、タスク定義を設定しておく必要がある。
◉ECSでDockerコンテナを実行するためには、タスク定義を行う必要がある。
設定できるもの。
必須
・ファミリー(名前みたいなもの)
・コンテナ定義 コンテナインスタンスのDockerデーモンに渡されるコンテナ定義のリストを指定(名前・イメージ・メモリ・ポートマッピング)

・タスクロール
・ネットワークモード
・ボリューム
・タスク配置
・起動タイプ

コンテナエージェント

コンテナインスタンスをクラスターに接続することができる。ユーザーに代わってECS APIを呼びだす。IAMロールを必要とする。

ElasticBeantalkで使用されるファイル

cron.yaml ワーカー環境のキューに定期ジョブを自動的に追加する。
env.yaml 環境の名前、環境リンクを設定する。

ステージ変数を利用することで、異なるバックエンドのエンドポイントとやりとりができる

ECSはロードバランサーと一緒に使用すると、可溶性の高いREST APIを提供できるようになる。

DynamoDBのデータを部分的に取得したい

ProjectionExpression queryメソッド。必要な属性を識別する文字列で、指定した属性を取得することができる。
Scanメソッドで全体を読み取ってからfilter_expressionでフィルタリングして部分的にデータを取り出すのもありだが、非効率。

組み込み関数

Fn::FindMap Mappings定義マップから参照し、キーに対応する値を返す。
 Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ]
  ・MapName マッピングの論理名
  ・TopLevelKey 最上位のキー名
  ・SecondLevelKey 2番目のキー名
 →この3つの情報を使用して値を取得する
Fn::ImportValue 別スタックのエクスポート値を返す。クロススタック参照を用いる時に使用。他のスタックの値が欲しい時に使う。
Fn::Sub 値や関数を置き換えることができる。ex. Fn::Sub{5:10,100:500} 5←10、100←500を入れ替える。
Fn::Ref 指定したリソースの値、パラメータを返す。
Fn::GetAtt テンプレートのリソースから属性の値を返す。
Fn::Cidr CIDRアドレスブロックの配列を返す。
Fn::Join 一連の値を区切り文字で区切って1つの値に追加できる。

ライフサイクルポリシーでは、アプリケーションの合計数が指定した数を超えた場合にアプリケーションバージョンを削除するように設定することができる。

Fargate起動タイプのDockerにX-Rayを連携させたい場合は、IAMロールのみを利用する。

SAMなどのサーバーレスアプリケーションは、Lambda関数、イベントソース、などのリソースを組み合わせたもので、連携して動作することによってタスクを実行している。

タスク定義

ECSでDockerコンテナを実行するためには、タスク定義を行う必要がある。

必要な要素

・ファミリー(名前みたいなもの)
・コンテナ定義 コンテナインスタンスのDockerデーモンに渡されるコンテナ定義のリストを指定(名前・イメージ・メモリ・ポートマッピング)

必要じゃない要素

・タスクロール(タスクに応じたIAMロール。各タスクにつけなければいけない。タスクの分割を行える。)
・ネットワークモード
・ボリューム
・タスク配置
・起動タイプ

◉ECSのタスク定義においてタスクロールを設定するためには、「ECS_ENABLE_TASK_IAM_ROLE」をTrueに設定することが必要

ECSは各タスクに応じてIAMロールを作成しなければいけない。このロールをタスクロールという。

グローバルセカンダリインデックス(GSI)はテーブルの書き込み容量以上である必要がある。(GSI表全体が対象で、インデックスの数が多いから)

IAMロールをもう一度

IAMロール 一時的な認証を与えるもの
IAMロールを割り当てて実行するだけで、EC2サービスがsts:AssumeRoleアクションを実行してIAMロールから一時的なアクセスキーIDとシークレットアクセスキーをが渡される。

Cognito ID プール

javascriptで動作したアプリケーションを使用している場合にはIDプールを使用します。
IAMロールと認証プロバイダーを設定します。
z GetIdリクエストによってCognitoIDを取得します。GetCredentialaForldentityリクエストによって最終的に、IAMロールに対して、AssumeRoleがリクエストされて一時的なアクセスキーIDを取得することができる。

CloudFormationのAMIの変更の仕方

System Managerパラメーターストアを利用して、最新のAMIIDを取得する。(自動で最新AMIを取得してくれて、それを参照しているので、なにもしなくてもOK)
それを更新する際は、CloudFormationスタックを更新するだけで、AMIを更新することができる。

Lambda関数の非プロキシ統合

受信リクエストデータがどのように統合リクエストにマッピングされるか、統合レスポンスデータの結果がメソッドレスポンスにどのようにマッピングされるか指定することで、リソースのメソッドリクエストを設定することができる。

Lambda イベントソースマッピング

イベントソースから読み取り、Lambda関数を呼び出すLambdaリソースのことを指す。ストリームから項目を処理する時に使用することができる。




コメントや要望があれば、下記のツイッターにDMをください。
Tweets by wallofmind2