aws-cli で AWS 起動中のリソース一覧取得する

備忘録です。

複数 AWS アカウントで起動中のリソース一覧作りたい時によく利用しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

profiles=(
<profile names in ~/.aws/credentials>
)

for profile in ${profiles[@]}; do
awsume $profile --session-name "kenzo.tanaka" --output-profile tmp
account_id=$(aws sts get-caller-identity --profile tmp --query 'Account' --output text)

aws ec2 --profile tmp describe-instances --filters "Name=instance-state-name,Values=running" \
| jq -r ".Reservations[].Instances[] | \"$profile,$account_id,ec2,\"+ .InstanceType +\",1,\"+ (.Tags[]|select(.Key == \"Name\").Value)"

# aws rds describe-db-clusters だと cluster を利用していない場合に instance 情報が取得できない
aws rds --profile tmp describe-db-instances \
| jq -r ".DBInstances[] | select(.DBInstanceStatus==\"available\") | \"$profile,$account_id,\"+ .Engine +\",\"+ .DBInstanceClass +\",1,\"+ .DBInstanceIdentifier"

aws elasticache --profile tmp describe-cache-clusters \
| jq -r ".CacheClusters[] | \"$profile,$account_id,\"+ .Engine +\",\"+ .CacheNodeType +\",\"+ (.NumCacheNodes|tostring) +\",\"+ .CacheClusterId"

aws redshift --profile tmp describe-clusters \
| jq -r ".Clusters[] | select(.ClusterStatus==\"available\") | \"$profile,$account_id,redshift,\"+ .NodeType +\",\"+ (.NumberOfNodes|tostring) +\",\"+ .ClusterIdentifier"
done

AWS CLI で EC2 インスタンス名一覧を取得

AWS CLI で EC2 に設定されたタグから特定のキーを指定し、その値をリストするスクリプトです。
以下は Key = Name でその値を取得しています。

EC2 インスタンス名の一覧を取得したい意図です。

1
aws ec2 describe-instances --query 'Reservations[*].Instances[*].Tags[?Key == `Name`].Value' --output text

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

dependabot が pull request を作成しているか確認するスクリプト

dependabot が pull request を作成しているか確認するスクリプト


概要

terraform provider の更新等、 dependabot で Pull Request の作成をしていると
自分がアサインされていないので気づきにくいです。

その為、定期的に見ておく必要があります。

ですが、管理するリポジトリが多いと全て見に行くのは手間なのでまとめてスクリプトで見れる様にします。

続きを読む
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 にインポートする為です。

続きを読む

fix: Could not install packages due to an EnvironmentError: [Errno 28] No space left on device

RPi 4B で以下エラーで詰まった時の備忘録です。

1
2
3
$ pip3 install xxx

Could not install packages due to an EnvironmentError: [Errno 28] No space left on device

一時的に tmp ディレクトリを指定してからインストールを再度実行することで回避してみます。

1
2
3
4
$ mkdir $HOME/tmp
$ export TMPDIR=$HOME/tmp

$ pip3 install xxx

これでうまくいきました ♪

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

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 を買う必要がない

ということでした。

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