Skip to main content

适用于 Idem 的 AWS 云提供商

项目描述

用 pop 制作,一个面向插件编程的 Python 实现 用 idem 制作,一个面向插件编程的 Python 实现 用 Python 制作

适用于 Idem 的 AWS 云提供商。

关于

idem-aws使用idem帮助管理 AWS。

什么是流行音乐?

这个项目是用pop构建的,一个基于 Python 的Plugin Oriented Programming (POP)实现。POP 旨在以新的方式将计算历史中的概念和智慧结合起来,以解决现代计算问题。

了解更多信息:

什么是同上?

这个项目是用idem构建的,idem是一种幂等的、命令式执行的、用 Python 编写的声明性编程语言。这个项目扩展了同上!

了解更多信息:

入门

先决条件

  • Python 3.7+

  • git (如果从源代码安装,或为项目做出贡献)

安装

如果想使用idem-aws,您可以通过从 PyPI 或源代码安装来实现。

从 PyPI 安装

如果包可通过 PyPI 获得,请包括说明。

pip install "idem-aws [full]"

从源安装

克隆idem-aws存储库并使用 pip 安装。通过在括号中指定“localstack”或“full”来安装额外的要求(在 ZSH 中,您必须转义括号)。

# clone repo
git clone git@<your-project-path>/idem-aws.git
cd idem-aws

# Setup venv
python3 -m venv .venv
source .venv/bin/activate
pip install -e idem-aws[full] # [google_auth,localstack,full]

设置

安装后,pop hub可以访问 AWS Idem Provider 执行和状态模块。为了使用它们,我们需要设置我们的凭据。

创建一个名为credentials.yaml的新文件并使用凭据填充它。如果您使用的是 localstack,则idkey可能是虚假值。默认配置文件将由idem自动获取。

可以通过多种方式存储 aws 提供程序/配置文件。有关更多信息,请参阅账户后端

idem-aws有多个身份验证后端,每个后端都有自己独特的参数集。以下示例显示了可在这些后端中用于定义配置文件的一些参数。所有后端最终都会在后台创建一个 boto3 会话并将其存储在ctx变量中,该变量将传递给所有 idem execstate函数。

所有身份验证后端都支持两个可选参数,endpoint_urlprovider_tag_key端点 url用于指定 boto3 调用的 备用目的地,例如 localstack 服务器或自定义 dynamodb 服务器。provider_tag_key在创建新资源时使用。idem-aws只会与使用可自定义的provider_tag_key键标记的资源交互。

凭据.yaml:

aws:
  default:
    endpoint_url: http://localhost:4566
    use_ssl: False
    aws_access_key_id: localstack
    aws_secret_access_key: _
    region_name: us-west-1

此外,您可以将 AWS AssumeRole 与 Idem 结合使用

aws:
  default:
    endpoint_url: http://localhost:4566
    use_ssl: False
    aws_access_key_id: localstack
    aws_secret_access_key: _
    region_name: us-west-1
    assume_role:
      role_arn: arn:aws:iam::999999999999999:role/xacct/developer
      role_session_name: IdemSessionName

如果在 acct 配置文件中未指定region_name,它可以来自同上配置文件中的acct.extras :

# idem.cfg
acct:
  extras:
    aws:
      region_name: us-west-1

如果已安装,您还可以使用aws-google-auth 进行身份验证。

aws.gsuite:
  my-staging-env:
    username: user@gmail.com
    password: this_is_available_but_avoid_it
    role_arn: arn:aws:iam::999999999999999:role/xacct/developer
    idp_id: 9999999
    sp_id: 999999999999
    region: us-east-1
    duration: 36000
    account: developer

谷歌配置文件示例未命名为default。要使用它,需要在同上状态中明确指定。

ensure_resource_exists:
  aws.ec2.vpc.present:
    - acct_profile: my-staging-env
    - name: idem_aws_vpc
    - cidr_block: 10.0.0.0/24

也可以在执行状态时从命令行指定。

idem state --acct-profile my-staging-env my_state.sls

也可以在直接调用 exec 模块时从命令行指定。

idem exec --acct-profile my-staging-env boto3.client.ec2.describe_vpcs

启动和运行的最后一步是加密凭证文件并将加密密钥和加密文件路径添加到 ENVIRONMENT。

acct命令应该可用,因为acctidemidem -aws的必要条件。加密凭证文件。

acct encrypt credentials.yaml

输出:

-A9ZkiCSOjWYG_lbGmmkVh4jKLFDyOFH4e4S1HNtNwI=

将这些添加到您的环境中:

export ACCT_KEY="-A9ZkiCSOjWYG_lbGmmkVh4jKLFDyOFH4e4S1HNtNwI="
export ACCT_FILE=$PWD/credentials.yaml.fernet

如果未提供 acct_file,则将使用 botocore 获取的默认 awscli 凭据。缺少的 cli 选项将由 awscli 配置中的 botocore 填充。配置优先级的顺序是:

  1. 账户资料

  2. 同上配置文件

  3. awscli 配置

您已准备好使用 idem-aws!

执行模块

一旦一切都正确设置,执行模块可以直接由idem调用。执行模块镜像 boto3.client 和 boto3.resource 模块的命名空间并具有相同的参数。

例如,您可以通过以下方式使用 idem 从命令行列出 Vpc:

idem exec boto3.client.ec2.describe_vpcs

您也可以指定参数。对于 boto3 资源,args 将被传递给资源构造函数,而 kwargs 将被传递给操作,如下所示:

idem exec boto3.resource.ec2.Vpc.create_subnet vpc-71d00419 CidrBlock="10.0.0.0/24"

状态

状态也可以通过它们在idem-aws/idem_aws/states中的相对位置来访问。例如,idem-aws/idem_aws/states/aws/ec2/vpc.py包含一个函数缺席()。在我的状态文件中,我可以像这样创建一个使用缺席函数的状态。

我的状态.sls:

idem_aws_test_vpc:
  aws.ec2.vpc.absent:
    - name: <s>"idem_aws_test_vpc"</s>

此状态可以通过以下方式执行:

idem state my_state.sls

同上状态也有一些标志可以显着提高运行的可扩展性和性能。让我们使用这个新状态来验证 100 个 vpc 不存在:

{% for i in range(100) %}
idem_aws_test_vpc_{{i}}:
  aws.ec2.vpc.absent:
    - name: <s>"idem_aws_test_vpc_</s>{{i}}<s>"</s>
{% endfor -%}

可以使用--runtime parallel来执行状态,以充分利用 idem 的异步执行调用:

idem state --runtime parallel my_state.sls

用于强制状态管理的远程存储

Idem-aws 支持 Idem 强制状态管理功能的远程存储。也就是说,Idem 可以将 esm 数据存储在 AWS S3 存储桶上。DynamoDB 将用作文件锁,以防止多个用户/进程同时访问同一个存储文件。要使用远程存储,需要将 esm 配置文件添加到凭证配置文件中,如下所示:

aws:
  default:
    use_ssl: True
    aws_access_key_id: AAAAAAAAA5CDFSDER3UQ
    aws_secret_access_key: eHjPASFWERSFwVXKlsdfS4afD
    region_name: eu-west-2
    esm:
      bucket: <s>"idem-state-storage-bucket"</s>
      dynamodb_table: <s>"idem-state-storage-table"</s>
      key: <s>"/idem-state/demo-storage.json"</s>

此 esm 文件意味着 Idem 将使用区域 eu-west-2 中的 AWS S3 存储桶“idem-state-storage-bucket”和 DynamoDB 表“idem-state-storage-table”。“key”是读取和存储 esm 数据的文件路径。在使用该功能之前,需要创建 S3 存储桶和 DynamoDB 表。DynamoDB 表的主键应为字符串“LockID”,仅此而已。