紙一重の積み重ね

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

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

f:id:yokoyantech:20200621160338p:plain

はじめに

AWS認定デベロッパーアソシエイト取得に向けた学習ログです。 2歳児の育児のスキマ時間で勉強を続けています。

学習期間

2020年6月18日~6月21日

学習ログ

動的ポートマッピングと同じコンテナ上の単一サービスから複数タスクを実行する構成

  • ALB+ECS

API GatewayのAPIRequestに対する認証方法

  • IAM認証の署名バージョン4を使う

docs.aws.amazon.com

CodeDeployの設定

  • .appspec.ymlをルートディレクトリに配置する

ECSのコンテナ設定とタスクの割当てを別々に設定するために、資格情報を分割する方法

  • ECSに対してIAMロールを作成してタスクに割り当てる

docs.aws.amazon.com

Kinesisデータストリームのデータ暗号化

  • クライアント暗号化
    • HTTPSエンドポイントを使用したクライアント間でデータ暗号化
      • 転送されているレコードの盗聴を防ぐ
  • サーバサイド暗号化
    • KMSによる保存データの暗号化
      • 保存中のデータを保護

CodeDeployでのデプロイ成否を確認するフックインベント

  • ValidateService
    • ValidateService – これが最後のデプロイライフサイクルイベントです。デプロイが正常に完了したことを確認するために使用されます。

docs.aws.amazon.com

サーバアクセスログは、S3を使用するだけでアクセスログを増加させる

  • ログ記録はDefaultでは無効
  • ログ記録を有効にすると、バケットと同じRegionのバケットに保存される
    • ログ
      • リクエスタ
      • バケット名
      • Request時刻
      • Requestアクション
      • レスポンスのステータス
      • エラーコード

docs.aws.amazon.com

Elastic Beanstalk環境でHTTPSエンドポイントを公開する方法

  • ebextensionファイルを作成して、各ロードバランサを構築する
    • ALB
      • .ebextensions/https-reencrypt-alb.configを使用する

aws.amazon.com

S3バケットに個人用の保存スペースを設定する

  • 動的変数を使用したIAMポリシーを1つ作成
    • 下記${aws:username}が、ユーザのフレンドリ名(IAM ARN)に置き換わる

docs.aws.amazon.com

  • すべてのユーザが属するIAMグループにアタッチ
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
    }
  ]
}

Kinesisとは

  • IoTのセンサーデータなど、ハイボリュームな連続したデータをリアルタイムで処理できるフルマネージドサービス
  • 1時間あたり数TBのデータが処理できる
  • データの収集を担う
  • ビッグデータのうち、ストリームタイプに該当
    • 半構造化データをストリームで処理する
    • 他システムへデータ転送も可能
  • KCL(Kinesis Client Library)とは
    • アプリケーションがデータをKinesisにPutすることを補助するライブラリ
  • EC2でKCL(Kinesis Client Library)ベースでKinesisと連携
    • Kinesis Data Streamのトラフィック増加
    • シャードを分割して、6シャードから10シャードに増強
      • シャードを処理するためにデプロイできるEC2インスタンスの最大数は、10になる
      • シャード毎に最大1つのKCL用のEC2インスタンスが使用できる

docs.aws.amazon.com

DynamoDBのアプリ上の読み込み設定を行うCLIオプション

  • DynamoDBスキャンを実行し、特定の属性サブセットを取得したい
  • --projection-expressionコマンドで指定する
    • projection:投影
    • expression:表現、語句

docs.aws.amazon.com

aws dynamodb get-item \
    --table-name ProductCatalog \
    --key file://key.json \
    --projection-expression "Description, RelatedItems[0], ProductReviews.FiveStar"

MongoDBに接続するLambdaを構築

  • チーム外のメンバがプレーンテキストで環境変数を参照できないようにしたい
    • MongoDBのホスト名、ユーザ名、パスワード
    • Lambdaで使用するAPI資格情報
  • AWS KMSを使って、伝送中の暗号化のためのヘルパーを有効化する
    • KMSによるLambdaの環境変数を暗号化できる

qiita.com

Lambda関数の一時ファイルの保存場所

  • ローカルディレクトリの/tmpを使用する

コスト効率のために処理終了後はDynamoDBのテーブルデータを自動的に失効させたい

  • TTL設定を行う

X-RayデーモンがECSで検出されるための設定

  • AWS X-Ray SDKの環境変数で設定する
    • AWS_XRAY_DAEMON_ADDRESS
  • node.js での実装例
var AWSXRay = require('aws-xray-sdk');
AWSXRqy.setDaemonAddress('tcp:daemonhost:8082 udp:daemonhost:8083');

Kinesis Data StreamのデータをS3に転送する際の注意点

  • Kinesis Data Streamsのデータ保持期限を超過することがある
    • Defaultのデータ保持期限は、データレコードがKinesisストリームに追加されてから24時間
    • 最大値は168時間

DynamoDBから個々のアイテムを読み取り、EC2で変更処理を行う際に、プロセス完了時間を短縮するには

  • DynamoDBのBatchGetItem APIを使用する
    • 1回のオペレーションで取り出せる項目数は最大100
    • 1MBのサイズ制限あり

S3バケットへアップロードする度に、アクセス許可が可能か一時認証を使用したい

  • AssumeRoleのAPIコールを使用する
  • AssumeRoleとは、特定のRoleを一時的に引き受ける(Assume)
  • 別アカウントのS3バケットへアップロードする際などに使用できる

dev.classmethod.jp

  • 一時的なSecurity認証Requestを送るために、AWS Security Token Service(AWS STS)を使用できる
$ aws sts assume-role --role-arn arn:aws:iam::123456789012:role/role-name --role-session-name "RoleSession1" --profile IAM-user-name > assume-role-output.txt

Kinesis Data Streamsのデータフローに応じた調整方法

  • データフローの増加に応じて、
    • シャードを分割(増加)する
    • シャードをマージ(削減)する
  • Kinesis Data Streamsには、オートスケーリング機能はない
  • クラスターの概念もない

SQSキューによるポーリングを受けてLambdaが処理する際に、再試行に失敗した場合に失敗イベントを蓄積する方法

  • Lambdaデッドレターキューを使用する
  • DLQを設定すると、非同期呼び出しの場合でも、SQSやSNSに送信してエラーを監視できるようになる

dev.classmethod.jp

DynamoDBのインデックス設定

  • 主キー+属性を組み合わせて複合キーを作る
  • 主キー(プライマリキー)を構成できる属性の最大数は、2
    • パーティションキー
    • ソートキー

Elastic BeanstalkでホストするアプリにX-Rayコンソール経由で、アプリの呼び出しをトレースするためのX-Ray設定

  • 2つある
    • Elastic BeanstalkでX-Rayデーモンを有効にする
    • .ebextensions/xray-daemon.configを作成

docs.aws.amazon.com

Lambdaプロキシ統合を使用してAPI Gatewayと連携しているアプリがある

  • APIコールの応答と、Lambda関数の実行状況をモニタリングしたい場合のCloudWatchの設定方法
    • 2つある
      • Latencyメトリクスを監視する
        • API GatewayがクライアントからRequestを受け取ってから、クライアントにレスポンスを返すまでの時間。
        • API呼び出し全体の応答性が測定できる。
      • IntegrationLatencyメトリクスを監視する
        • API GatewayがバックエンドにRequestを中継してから、バックエンドがレスポンスを受け取るまでの時間。
        • バックエンドの応答性が測定できる。
          • 今回のケースだとLambdaの応答性。

docs.aws.amazon.com

EC2+RDS+KMSで構築したアプリケーション

  • 暗号化に利用するデータキーの、暗号化されたコピーのみを返すAPI設定を実施
  • KMS Decrypt APIでデータキーを復号化し、返されたプレーンテキストのデータキーを使用する
  • 最終的に、データを暗号化するために利用するKMS APIは、GenerateDataKeyWithoutPlaintext
    • 一意のデータキーを生成するAPI
    • マスターキーで暗号化されたデータキーを返す
      • データキーの暗号化されたコピーのみ返す
      • それ以外は、GenerateDataKeyと同じ

qiita.com