0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSチートシート

Last updated at Posted at 2023-04-29

はじめに

メモです。これから細かいテクニックを追記していきます。

EC2インスタンスにSSH接続する前準備

Route53

ドメインの紐づけが成功しているか確認するコマンド

nslookup -type=ns example.com

ECSのデプロイでコケたとき、原因を確認する方法

ECSのサービスから「デプロイとイベント」のタブより、エラー原因が見れる。

CLIで確認する方法

CLUSTER=<CLUSTER_NAME>
TASK=<TASK_ID>
aws ecs describe-tasks --cluster $CLUSTER --tasks $TASK | jq '.tasks[].stoppedReason'

ALBのアクセスログを有効にする

ログ取得用のS3バケットを作成して、ALBのページから「アクション」>「ロードバランサー属性の編集」>「Monitoring」よりアクセスログを有効化

以降のやり方はここに書いてある。

VPC フローログを用いてもOK。ただしALBのアクセスログの方が接続先のパスや User Agent なども確認できる。

サブネットをパブリックに変更

「サブネット」>「ルートテーブル」>「ルートテーブルの関連付けを編集」> インターネットゲートウェイを割り当て

Cloud Watch Logs

簡単な検索方法

以下の手順で選択するとすべてのログストリームから検索できる。

ログ > ロググループで対象のログを選択 > すべてのログストリームを検索

Tips

ログレベル設計して取り組むと良い。

Lambdaのログはココ参考に設定すると良い。

API Gateway

REST API と HTTP API の違い

HTTPはヘッダーをすべて共有できるメリットがあるが、セキュリティが弱いので基本的には使わない。

重要ポイント

引き上げられないタイムアウトが存在するため注意が必要。
30秒以内に処理が終了しない場合は、別途対策が必要。

Lambda、Lambda プロキシ、HTTP、HTTP プロキシ、AWS 統合など、すべての統合タイプで 50 ミリ秒〜29 秒。

AWS SAM

buildするときは必ずオプションをつけて高速化させること。

sam build --parallel --cached
sam deploy --no-confirm-changeset

Lambda

基本的な仕様

API Gatewayには10MB
Lambdaには6MBのペイロード上限がある。
API Gateway + Lambdaの構成をした場合は、6MBのペイロード上限がかけられる。

REST API プロキシ統合では、Header情報がすべて共有されるわけではない。Header情報はHTTP APIにすればすべて共有されるがWAFが使えなくなるので注意。

Lambdaに関わるログの種類

  • Amazon CloudWatch Logs
    • 関数の実行結果、エラーメッセージ、デバッグ情報などが出る(フォーマットに関するドキュメントが存在しない?)
  • AWS Lambda関数のログ
    • Lambda関数のコード実行時に標準出力等に出力されるログ
  • AWS X-Ray
    • 分散トレーシング使うとき用
  • Amazon CloudTrail
    • 操作履歴(意図しない操作が行われたときに調査するためのログ)

ログとは別に、メトリクスもある。メトリクスは統計情報みたいなのを表示するところ。

API Gatewayを使っている場合は、API Gatewayのログから、Lambdaへのリクエストのログを確認できる。

API Gatewayの実行ログには以下の情報等が含まれており、トラブルシューティングに活用できる。

  • API が受け取るリクエスト。
  • API からの統合バックエンドレスポンス。
  • Lambda オーソライザーが提供するレスポンス。
  • AWS 統合エンドポイントのための requestId。
  • 指定された API キーが承認されたかどうかに関する情報。

Lambdaのログを確認する(Lambdaの画面から)

Recent invodations から、最近の実行履歴を確認できる。
Most expensive invocations in GB-seconds (memory assigned * billed duration) から、お金がかかっている実行の履歴が確認できる。(コスト計算に使える)

Lambdaのログを確認する(CloudWatchの画面から)

主に4つの種類がある。

カテゴリ 説明
Invocation metrics 関数の呼び出しに関するバイナリ指標。
Performance metrics 関数のパフォーマンスに関する指標。
Concurrency metrics 関数の同時実行数に関する指標。
Asynchronous invocation metrics イベントソースからの非同期呼び出しに関する指標。

Invocation Metrics

項目 説明
Invocations 呼び出し回数
Errors エラー数
DeadLetterErrors デッドレターエラー数
DestinationDeliveryFailures 宛先配信エラー数
Throttles スロットル数
ProvisionedConcurrencyInvocations 予約済み同時実行数での呼び出し数
ProvisionedConcurrencySpilloverInvocations 予約済み同時実行数を超えた標準同時実行数での呼び出し数

Performance Metrics

項目 説明
Duration 実行時間
PostRuntimeExtensionsDuration ランタイム拡張実行時間
IteratorAge イテレータの年齢
OffsetLag オフセット遅延

Concurrency Metrics

項目 説明
ConcurrentExecutions 同時実行数
ProvisionedConcurrentExecutions 予約済み同時実行数
ProvisionedConcurrencyUtilization 予約済み同時実行数の利用率
UnreservedConcurrentExecutions 予約されていない同時実行数

Asynchronous Invocation Metrics

項目 説明
AsyncEventsReceived 受信イベント数
AsyncEventAge イベント年齢
AsyncEventsDropped 破棄されたイベント数

Lambdaのメトリクス

CloudWatch > すべてのメトリクス > Lambda > 「関数名」> 見たい項目を選ぶ > グラフ化したメトリクス

グラフ化したメトリクスの注意点。

  • Invocation Metricsは合計値で見る。
  • Performance Metricsは平均値で見る。

Invocations と Errors をセットで使うとわかりやすい。合計で見るとアクセスが集中している時間帯でどれくらいエラーが出ているのか、平均で見るとエラーの割合がわかる。

一定期間内のLambdaの使用時間の合計を見る方法

CloudWatch > すべてのメトリクス > Lambda > 「関数名」> Durationを選択 > グラフ化したメトリクス > 対象期間から絶対期間を指定 > 統計のカラムで合計を指定、期間のカラムから対象期間より大きい期間を設定

これで合計値を見ることができるようになる。

Lambdaのログ(料金編)

Lambdaの実行ログ内に課金の情報が含まれている。

REPORT RequestId: XXXXXXXXXXXXXXXXXXXXXXXXX	Duration: 500000000 ms	Billed Duration: 600000000 ms	Memory Size: 2048 MB	Max Memory Used: 2048 MB	Init Duration: 100000000 ms
  • Duration: 実行時間
  • Billing Duration: 課金時間
  • Memory Size: メモリサイズ
  • MB Max Memory Used: 最大メモリ使用量
  • Init Duration: 初期化時間

東京リージョンだと 2048MBで1ミリ秒あたり0.0000000333USDなので

600000000 * 0.0000000333 = 19.98USD (2,723円)

API Gatewayで取得したLambdaのRequestIDから詳細を確認する方法

まずは、ログストリームの特定をする。

ログストリームの特定方法

CloudWatch > ログのインサイト > 「ロググープを選択」で対象のLambda関数を選択

クエリに以下を入力

fields @timestamp, @message, @logStream, @log
| sort @timestamp asc
| filter @message like "【Request ID】"

ここで表示される詳細な実行日時とログストリーム名をメモする。

ログストリームの詳細を確認する方法

右上の検索範囲を、前述の検索でメモした時間帯のみに、さらに限定し、以下のクエリを実行する。

fields @timestamp, @message, @logStream, @log
| sort @timestamp asc
| filter @logStream = "【1回目の検索で表示された@logStream】"

これで、その時間帯のLambda関数の標準出力、標準エラー出力等が確認できる。

AWS環境に上げたLambda関数のデバッグテクニック

レスポンスヘッダーのdate属性の時間とCloudWatch LogsのTimestampの時間が一致するので、レスポンスヘッダーを共有してもらえれば、問題特定がスムーズに行く。

その他

CI/CDどうするの?

Infrastructure as Codeを実現するにはTerraformを使うのが一般的で知見も溜まっている。

Terraformより後発のAWS CDKもあるが、記述が簡略な分、何をやっているのかわかりにくい。ドキュメントがしょぼくて使いにくいとの噂を聞いた。

以下のサイトが参考になりそう。

作図について

以下のページにAWSのアーキテクチャ図を作成するのに使える「描画ツールとダイアグラム作成ツール」がまとまっている。

利用規約

サービスをリリースする前に「AWS カスタマーアグリーメント」には目を通しておく。

コンテンツの節度のページも参考になる。

Amazon Rekognitionの機能を使えば、センシティブな文章や、画像のチェックだけではなく、有名人が映像中に写っているかや、マスクをしているか、手袋をしているか、など防犯情報もチェックすることができる。

AWS Organizations

ひとつのアカウントで複数のサービスを立ち上げることもあると思う。その場合、請求が全てまとまってしまうので、AWS Organizationsで名前空間を分けると良い。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?