紙一重の積み重ね

アラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【AWS学習】育児の合間に認定デベロッパーアソシエイト学習⑥

f:id:yokoyantech:20200621160338p:plain

はじめに

AWS認定デベロッパーアソシエイト取得に向けた学習ログです。

学習期間

2020年7月20日~7月26日

学習ログ

Fargeteで起動するDockerコンテナに対するX-Rayの設定方法

docs.aws.amazon.com

DynamoDBトランザクションの特徴

docs.aws.amazon.com

SQSのメッセージ重複排除

docs.aws.amazon.com

DockerコンテナでX-Rayデーモンを実行する

  • X-Rayデーモン
    • UDPポート2000でリッスンする

docs.aws.amazon.com

Lambdaの同時実行数の見積もり

  • S3
    • 1秒あたり10回のイベント
  • Lambda
    • データ処理平均は5秒
    • Lambdaの同時実行数は、10回×5秒=50

たとえば、Lambda 関数の実行に平均 3 秒掛かり、Amazon S3 が 1 秒あたり 10 個のイベントを発行するとします。この場合、Lambda 関数の同時実行数は 30 です。(出典:AWS Lambda開発者ガイド)

https://oji-cloud.net/2019/07/08/post-2318/oji-cloud.net

Beanstalkの環境設定

  • マニフェスト環境(env.yaml)

docs.aws.amazon.com

Lambda関数の呼び出しタイプ

  • 非同期
    • InvocationType:Event
  • 同期実行
    • InvocationType:RequestResponse

dev.classmethod.jp

CodeCommitでリポジトリにアクセスするために必要な最小限権限

  • Gitに対してプル、プッシュしたい
    • codecommit: GitPush
    • codecommit: GitPull

docs.aws.amazon.com

EC2 Fleetとは

  • オンデマンドインスタンスとスポットインスタンスのグループのこと

docs.aws.amazon.com

EC2プレイスメントグループ

  • インスタンスが立ち上がる場所を明示的に指定する考え方
    • クラスター
      • AZ内でまとめる
        • 低レイテンシを実現できる
    • パーティション
      • 複数の論理パーティションに分散
        • Hadoopなど、大規模な分散ワークロードが実現できる
    • 分散

docs.aws.amazon.com

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

  • Optimistic(楽観的)ロック
  • 更新・削除しているクライアント側の項目が、DynamoDBの項目と確実に同じになるための方法
  • 他のユーザの書き込みによって上書きされないように保護する

docs.aws.amazon.com

DynamoDBストリームによる更新内容の追跡

  • DynamoDBストリーム
    • Keys only
      • 変更された項目のキー項目のみ
    • New image
      • 変更後に表示される項目全体
    • Old image
      • 変更前に表示されていた項目全体
    • New and old images
      • 項目の新しいイメージと古いイメージの両方

docs.aws.amazon.com

  • ストリームレコードを正しい順番で処理するには、Kinesis Adapterも一緒に使う

docs.aws.amazon.com

APIからMFA認証を使う

  • GetSessionRole
    • リクエストを作成するIAMユーザーと同じAWSリソースにアクセスする
  • AssumeRole
    • 異なるAWSアカウントへの呼び出し

docs.aws.amazon.com

ECSのタスク配置戦略

  • タスクの配置、タスクの終了でインスタンスを選択するためのアルゴリズム

docs.aws.amazon.com

ECSのタスクグループ

ECSのクラスタークエリ言語

  • オブジェクトをグループ化できる式
  • 以下のような属性で、コンテナインスタンスをグループ化できる
    • AZ
    • インスタンスタイプ
    • カスタムメタデータ
  • 使用例
attribute:ecs.instance-type == t2.small

attribute:ecs.availabitity-zone in [us-east-1a,us-east-1b]

# service:productionグループのタスクをホストするインスタンスを指定
task:group == service:production

# databaseグループのタスクをホストしないインスタンスを指定
not(task:group == database)

# 実行中のタスクの数
runningTasksCount == 1

docs.aws.amazon.com

Cognito ID

  • ユーザの一意のIDを作成し、IDプロバイダーで連携させることができる
    • Facebook
    • Google
    • Apple
      • など
  • IDプールを使用すると、権限が制限された一時的なAWS認証情報を取得して、他のAWSサービスにアクセスできる

docs.aws.amazon.com

ACMが使用できない場合にSSL/TLS証明書をインポートする方法

  • Systems Managerを使用してインストールする?

docs.aws.amazon.com

SQSの可視性タイムアウト

  • デフォルト30秒
  • 同一ユーザが同じキューを送信、受信できないように制御する

docs.aws.amazon.com

Elastic BeanStalkのデプロイ方法

  • All at One
    • 一度にすべてデプロイ
      • デプロイの間、サービス停止状態になる
  • Rolling
    • ローリング
    • 流れ
    • EC2インスタンスをバッチに分割
      • ここで言うバッチとは、batchではなく、1まとまり、という意味合い
        • 10インスタンス
        • バッチサイズ30%
        • バッチ=3インスタンス(切り捨て)
    • バッチサイズ分のインスタンスがLBからデタッチ+デプロイ
    • ヘルスチェックが通れば、そのバッチがLBに再度アタッチされる
    • すべてのインスタンスがデプロイされるまで、繰り返し
      • LBからデタッチ、デプロイ、ヘルスチェック
    • デメリット
      • 最初にバッチサイズ分デタッチされるので、リクエストを受け付けるインスタンスの数が減る
      • ローリングデプロイ中は、新旧のバージョンが混在する
  • Rolling with additional batch
    • 追加バッチによるローリング
      • バッチに新しいバージョンをデプロイ
      • デプロイ中に総容量を維持するため、インスタンスの新しいバッチを起動する
        • ???
    • 特徴
      • 最初にバッチサイズ分のインスタンスを追加する
        • Rollingの欠点を解消
        • リクエストを受け付けるインスタンス数は減らない
    • 流れ
      • バッチサイズ分のインスタンスを追加作成+デプロイ
      • バッチサイズ分のインスタンスがLBからデタッチ+デプロイ
      • ヘルスチェックが通れば、そのバッチがLBに再度アタッチされる
      • すべてのインスタンスがデプロイされるまで、繰り返し
        • LBからのデタッチ、デプロイ、ヘルスチェック
      • 追加作成分のインスタンスをshutdownする
    • デメリット
      • デプロイ中は、新旧のバージョンが混在する
  • Immutable
    • 変更不可のデプロイ
    • 既存のインスタンスでアプリケーションの古いバージョンを実行しながら、新規にインスタンスのフルセットでAuto Scalingグループで新しいバージョンを実行する
  • Traffic spliting
    • トラフィック分割
      • アプリの新しいバージョンを新しいグループにデプロイ
      • 受信トラフィックをアプリの新旧バージョンで一時的に分割する

docs.aws.amazon.com

shepherdmaster.hateblo.jp

Cognito Syncによるユーザデータの同期

  • Cognitoの役割
    • アイデンティティの管理と認可
      • Cognito
    • データ同期
      • Cognito Sync
    • 非同期通信
  • Cognito Syncの特徴
    • オフライン動作
      • クライアントライブラリは、ローカルにデータをキャッシュする
      • アプリはデバイスの接続状態に関わらず、データを読み書きできる
        • つまり、オフラインでも動く
    • 同期処理
      • Cloudへのデータ保存と同期を行う
      • アプリ関連のユーザデータのデバイス間同期を行う
      • モバイル端末と、ウェブ間でユーザプロファイルデータを同期できる

docs.aws.amazon.com

https://image.slidesharecdn.com/20150928aws-blackbelt-cognito-150928041658-lva1-app6892/95/aws-black-belt-tech-2015-amazon-cognito-30-638.jpg?cb=1443413862image.slidesharecdn.com

KMSのデフォルト暗号化があるS3バケットにアップロードするとAccess Deniedエラーが出る原因

  • KMSの権限が足りないため
  • 対処法
    • 以下2つを更新する
      • IAMポリシー
        • kms:Decryptアクションのアクセス許可を追加
      • KMSキーポリシー
        • kms:GenerateDataKeyアクションのアクセス許可を追加

aws.amazon.com

KMSのエンベロープ暗号化

  • envelope
    • 封筒
    • 封書
    • 封入
  • 以下2つを行う手法
    • データキーでプレーンテキストを暗号化
      • データキーとは、大量のデータや、他のデータ暗号化キーを暗号化するためのキー
    • データキーを別のキーで暗号化
    • データキーの生成は、GenerateDataKeyAPIで実施する
  • マスターキーを安全に保管して管理する

docs.aws.amazon.com

https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/kms-dg.pdfdocs.aws.amazon.com

SQSキューの暗号化

  • SQSは、サーバサイド暗号化(SSE)に対応している
    • KMSで管理されているキーを使って、キュー内のメッセージを保護する

docs.aws.amazon.com

AWS OpsWorks

  • ChefやPuppetを使って運用を自動化する
  • CloudFormationとの違いは、対象領域
    • EC2
    • EBS
    • EIP
    • CloudWatch
      • アプリケーション志向のAWSリソースに限られる

aws.amazon.com

CodeCommitとSNSの連携

  • CodeCommitのリポジトリトリガー
    • SNSから通知できるようになる

docs.aws.amazon.com

RDSの自動バックアップ期間

  • デフォルトは7日間
  • 0日~35日まで変更可能
    • 36日以上保持したい場合は、Lambda等でスナップショットを取る

docs.aws.amazon.com

DynamoDBの読み書きエラーに対するアプローチ

  • エラーの再試行と、指数バックオフ(Exponential Backoff)を実装する
    • リトライ間隔を指数関数的に増加させる
      • 1秒後
      • 2秒後
      • 4秒後
      • 8秒後・・・
  • I/Oリクエストを均等に分散するリファクタリングを実施する

yoshidashingo.hatenablog.com