#ec2 #instance #aws #run-command #key #group #resources

nightly app aws-ec2

在AWS EC2实例上运行命令的工具

5个版本 (重大更改)

0.5.0 2024年2月19日
0.4.0 2024年1月19日
0.3.0 2023年10月7日
0.2.0 2023年10月7日
0.1.0 2023年10月7日

#16 in #ec2

每月47次下载

Apache-2.0

33KB
642

aws-ec2

Crates.io

在AWS EC2实例上运行命令的工具。

目的

在开发实际软件时,我们通常希望在我们的代码上测试许多特定环境;这些环境往往是它将被部署的环境,这通常将是AWS EC2。

这可能需要像buildjet这样的服务,或者更复杂的基设,这可能需要消耗开发者时间。

这个项目是从我对firecrackernix的工作中激发出来的,并思考如何简化它们的CI以及保持相同级别的平台覆盖率。

与上述解决方案不同,它可以在任何地方运行,无需任何设置*。贡献者可以自己测试代码,无需维护者干预。

*)不幸的是,某些事情(如AWS EC2 vcpu限制)是无法避免的,所以在像firecracker这样的应用程序中,它将启动多个非常大的.metal实例,需要具有特定设置的AWS账户来支持此功能。

概述

它创建自己的资源并在完成后清理。

过程大致如下

  1. 创建密钥对。
  2. 创建安全组。
  3. 如果提供了--path,将目录压缩成一个.tar.gz存档。
  4. 启动实例。
  5. 如果提供了--path,将.tar.gz存档复制过去。
  6. 如果提供了--path,解压.tar.gz存档。
  7. 运行--command
  8. 终止实例。
  9. 删除密钥对。
  10. 删除安全组。

安装

cargo +nightly install aws-ec2

示例

默认

默认情况下,它运行以下命令:cat /proc/cpuinfo && uname -a && ls

AWS_ACCESS_KEY_ID=<public key> \
AWS_SECRET_ACCESS_KEY=<private key> \
AWS_DEFAULT_REGION=eu-west-2 \
aws-ec2 --instance t2.medium --ami ami-0eb260c4d5475b901

Rust Hello World!

t2.medium Ubuntu 22.04 系统上,使用 32gb EBS 卷运行 Hello World!

AWS_ACCESS_KEY_ID=<public key> \
AWS_SECRET_ACCESS_KEY=<private key> \
AWS_DEFAULT_REGION=eu-west-2 \
aws-ec2 \
--size 32 \
--instance t2.medium \
--ami ami-0eb260c4d5475b901 \
--command "\
    echo \"debconf debconf/frontend select Noninteractive\" | sudo debconf-set-selections \
    && sudo apt-get -y update \
    && sudo apt-get -y install build-essential \
    && curl https://sh.rustup.rs -sSf | sh -s -- -y \
    && \$HOME/.cargo/bin/cargo new hello-world \
    && cd hello-world \
    && \$HOME/.cargo/bin/cargo run \
"

测试 Rust 项目

如果您想在 t2.medium Ubuntu 22.04 和 t4g.medium Ubuntu 22.04 上使用 32gb EBS 卷测试您的代码,您可以运行:

AWS_ACCESS_KEY_ID=<public key> \
AWS_SECRET_ACCESS_KEY=<private key> \
AWS_DEFAULT_REGION=eu-west-2 \
aws-ec2 \
--size 32 \
--instance t2.medium \
--ami ami-0eb260c4d5475b901 \
--command "\
    echo \"debconf debconf/frontend select Noninteractive\" | sudo debconf-set-selections \
    && sudo apt-get -y update \
    && sudo apt-get -y install git build-essential \
    && curl https://sh.rustup.rs -sSf | sh -s -- -y \
    && git clone --depth 1 --branch <branch> <repo> <directory> \
    && cd <directory> \
    && \$HOME/.cargo/bin/cargo test \
"

如果您想使用本地文件,可以运行:

AWS_ACCESS_KEY_ID=<public key> \
AWS_SECRET_ACCESS_KEY=<private key> \
AWS_DEFAULT_REGION=eu-west-2 \
aws-ec2 \
--size 32 \
--instance t2.medium,t4g.medium \
--ami ami-0eb260c4d5475b901,ami-0e3f80b3d2a794117 \
--path <path to your project>
--command "\
    echo \"debconf debconf/frontend select Noninteractive\" | sudo debconf-set-selections \
    && sudo apt-get -y update \
    && sudo apt-get -y install build-essential \
    && curl https://sh.rustup.rs -sSf | sh -s -- -y \
    && \$HOME/.cargo/bin/cargo test \
"

依赖关系

~81MB
~1M SLoC