asdf で terraform 複数バージョン管理

asdf で terraform 複数バージョン管理


terraform はバージョンアップ頻度が高く、
プロジェクトによってバージョン差分が生じるので
複数バージョンを管理できると運用がスムーズです。

続きを読む

SAM プロジェクトで管理する API Gateway のアクセスログを有効化する


概要

SAM プロジェクトで管理する API Gateway について
AWS Config rule: api-gw-execution-logging-enabled に対応すべく、
アクセスログを有効化した際にハマった話です。

Events.*.Type = Api で作成した API Gateway では SAM 上でアクセスログ有効化の設定ができません。

どのようにしたら API Gateway のアクセスログ有効化できるか調査しました。

続きを読む

SAM テンプレートに既存リソースをインポートする手順 - IAM Role 編 -


以前は CloudWatch LogGroup をインポートしましたが
今回は IAM Role をインポートの設定例です。

基本手順は CloudWatch LogGroup と同様ですが、
異なる部分だけ記載します。

手順

CloudFormation のテンプレート取得し template.yml にインポートしたいリソースを追記

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
Resources:
...

CWLogRole:
DeletionPolicy: Retain
Type: AWS::IAM::Role
Properties:
RoleName: xxx-Bot-Stack
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service: apigateway.amazonaws.com
Action: sts:AssumeRole
Description: Allows API Gateway to push logs to CloudWatch Logs.
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs

API Gateway のアクセスログ管理用ロググループへログを配信する IAM Role をインポートします。

続きを読む

SAM テンプレートに既存リソースをインポートする手順 - CloudWatch Logs 編 -


手順

CloudFormation のテンプレート取得

既にデプロイ済みの SAM プロジェクトは CloudFormation に Stack が作成されています。
その Template タグで template の内容をローカル環境で template.yml で保存しましょう。
保存先はどこでも良いです。

template.yml にインポートしたいリソースを追記

1
2
3
4
5
6
7
8
9
10
11
12
13
...
Resources:
...

# インポートしたいリソースを追記
# API Gateway の アクセスログ管理用ロググループ
ApiGatewayAccessLogGroup:
Type: AWS::Logs::LogGroup
# NOTE: リソースを作成せず、Stack にインポートする為の設定
# see: https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html
DeletionPolicy: Retain
Properties:
LogGroupName: /aws/apigateway/xxx-Bot-Stack

今回は API Gateway のアクセスログ管理用ロググループをインポートします。
DeletionPolicy: Retain としているのは、リソースを作成せず、Stack にインポートする為です。

続きを読む

AWS Savings Plans Coverage API 実行時に DataUnavailableException エラーが発生する


概要

AWS Savings Plans Coverage API 実行時に DataUnavailableException エラーが発生しました。

1
2
3
$ aws ce get-savings-plans-coverage --time-period Start=2023-05-31,End=2023-06-01 --group-by Type=DIMENSION,Key=INSTANCE_TYPE_FAMILY Type=DIMENSION,Key=REGION Type=DIMENSION,Key=SERVICE

An error occurred (DataUnavailableException) when calling the GetSavingsPlansCoverage operation:

発生する条件を AWS サポートに確認しました。

サポートの回答

「対象期間について Savings Plans 適用対象サービスを使用していない場合、上記エラーが発生する」
とのこと。

Cost Explorer で確認

Cost Explorer で Savings Plans > Coverage report にも以下メッセージがありました。

No savings plans coverage data was returned for this time period. Please adjust the time period or filters if this seems incorrect.」

まとめ

Savings Plans カバレッジ取得時に DataUnavailableException エラーが発生する
= Savings Plans 適用対象サービスを使用していない
= Savings Plans を買う必要がない

ということでした。

以上
参考になれば幸いです。

AWS Bot 対策


AWS で CloudFront + ECS で Web サービスを配信していますが、
Bot が多く、その対策を WAF で実行しようとしたい際にいくつかつまづきましたので、その備忘録になります。

以下 2 点を試しました。

  1. WAF v2 で GEO マッチステートメントで Bot のリクエスト元の海外 IP をブロック
  2. WAF v2 Bot Control で Bot 対策
続きを読む