#aws #networking #elastic #delete #interface #terraform #eni

app available-enis

统计可用的 AWS 弹性网络接口(ENI),可选地删除每个状态为“可用”的 ENI。

4 个版本

0.3.1 2024 年 2 月 13 日
0.3.0 2024 年 2 月 11 日
0.2.1 2024 年 1 月 15 日
0.2.0 2024 年 1 月 15 日

#437网络编程

MIT/Apache

30KB
139

可用的 AWS 弹性网络接口(ENI)

总结每个 AWS 弹性网络接口(ENI)的状态。可选地删除每个状态为“可用”的 ENI。

这是一个非常小巧的工具,基本上只做一件事:清理那些似乎从我们定期构建和拆除的非常复杂的 terraform 配置中落出的散弹网络接口。

这个工具非常快。它并发地删除所有可用的 ENI。

内置帮助

简洁

available-enis -h
Count and optionally delete available AWS Elastic Networks

Usage: available-enis [OPTIONS]

Options:
  -d, --delete             Delete "available" ENIs
  -p, --profile <PROFILE>  AWS profile to use
  -r, --region <REGION>    AWS region to target
  -h, --help               Print help (see more with '--help')
  -V, --version            Print version

完整

available-enis --help
Summarize the status of every AWS Elastic Network Interface,
ENI. Optionally, delete every ENI with a status of "available".

You can set the environment variable `RUST_LOG` to adjust
logging, for example `RUST_LOG=trace available-enis`

Usage: available-enis [OPTIONS]

Options:
  -d, --delete
          Delete "available" ENIs

  -p, --profile <PROFILE>
          AWS profile to use.

          This overrides the standard (and complex!) AWS
          profile handling.

  -r, --region <REGION>
          AWS region to target.

          This override the standard (and complex!) AWS region
          handling.

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

安装

通过 shell 脚本安装预构建的二进制文件

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/bruceadams/available-enis/releases/latest/download/available-enis-installer.sh | sh

通过 powershell 脚本安装预构建的二进制文件

irm https://github.com/bruceadams/available-enis/releases/latest/download/available-enis-installer.ps1 | iex

将预构建的二进制文件安装到您的 npm 项目中

npm install available-enis

或使用 npx 安装和运行二进制文件

npx available-enis --help

通过 Homebrew 安装预构建的二进制文件

brew install bruceadams/homebrew-utilities/available-enis

通过 cargo binstall 安装预构建的二进制文件

cargo binstall available-enis

下载

文件 平台 校验和
available-enis-aarch64-apple-darwin.tar.gz macOS Apple Silicon 校验和
available-enis-x86_64-apple-darwin.tar.gz macOS Intel 校验和
available-enis-x86_64-pc-windows-msvc.zip Windows x64 校验和
available-enis-x86_64-unknown-linux-gnu.tar.gz Linux x64 校验和
available-enis-x86_64-unknown-linux-musl.tar.gz musl Linux x64 校验和
available-enis-x86_64-pc-windows-msvc.msi Windows x64 校验和

构建

这是一个简单的 Rust 项目,使用 Cargo。在安装 Rust(我强烈推荐使用 Rustup)之后,cargo build 应该“只需工作”。

背景

我一直使用以下 Bash 脚本,它使用 AWS CLI。这个脚本很慢,每秒删除约两个 ENI,并且信息不多。

用 Rust 编写一个坚实的程序可能有点过度设计问题。我很高兴有一个实用的用例来编写另一个 Rust CLI。我很高兴这个工具默认不进行任何更改,只是报告它找到的 ENI 状态的数量。

#!/usr/bin/env bash

set -euo pipefail

available_enis=$(
    aws ec2 describe-network-interfaces |
        jq -r '.NetworkInterfaces[] | select( .Status == "available" ) | .NetworkInterfaceId'
)

if [[ "$available_enis" ]]; then
    echo "Found $(echo -n "$available_enis" | wc -l) available enis"

    for eni in $available_enis; do
        echo "$eni"
        aws ec2 delete-network-interface --network-interface-id "$eni"
    done
else
    echo No available enis found
fi

依赖项

~79MB
~1M SLoC