跳转到主要内容

AWS Cloud Provider for Idem

项目描述

Made with pop, a Python implementation of Plugin Oriented Programming Made with idem, a Python implementation of Plugin Oriented Programming Documentation is published with Sphinx on docs.idemproject.io Made with Python

AWS Cloud Provider for Idem.

关于

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

什么是POP?

本项目使用 pop 构建,pop 是基于 Python 的 面向插件编程 (POP) 实现。POP 旨在以新的方式将计算机历史中的概念和智慧结合在一起,以解决现代计算问题。

更多信息

什么是 Idem?

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

更多信息

入门

先决条件

  • Python 3.8+

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

  • Idem

安装

您可以从 PyPI、源存储库或本地目录安装 idem-aws

在安装 idem-aws 之前,请确保您位于与您的 pyproject.toml 文件相同的目录中。您还可以通过使用 --directory=DIRECTORY (-C) 选项来指定包含您的 pyproject.toml 文件的目录。

从 PyPI 安装

要从 PyPI 安装 idem-aws,请运行以下命令

poetry add idem-aws

从源代码安装

您还可以直接从源存储库安装 idem-aws

poetry add git+https://gitlab.com/vmware/idem/idem-aws.git

如果您没有指定分支,Poetry 将使用 master 分支上的最新提交。

从本地目录安装

克隆 idem-aws 存储库。然后运行以下命令从克隆的目录安装

poetry add ~/path/to/idem-aws

设置

安装完成后,AWS Idem 提供程序的执行和状态模块将可用于 pop hub。为了使用它们,我们需要设置我们的凭证。

创建一个名为 credentials.yaml 的新文件,并用凭证填充它。如果您正在使用 localstack,则 idkey 可以是无效值。默认配置文件将由 idem 自动选择。

aws 提供程序/配置文件可以存储在多种方式中。有关更多信息,请参阅 acct backends

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

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

credentials.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

您还可以使用 Idem 与 aws_session_token 一起使用,以获取临时安全凭证。

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_session_token: my_token

此外,您还可以使用 Idem 与 AWS AssumeRole。

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,它可以从 idem 配置文件中的 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

Google 配置文件示例的名称不是 default。要使用它,需要在 idem 状态中明确指定。

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 命令应作为 acct 可用,因为它是 idemidem-aws 的必需项。加密凭证文件。

acct encrypt credentials.yaml

输出

-A9ZkiCSOjWYG_lbGmmkVh4jKLFDyOFH4e4S1HNtNwI=

将这些添加到您的环境中

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

如果没有提供 acct_file,则将使用 botocore 捕获的默认 awscli 凭据。缺少的 CLI 选项将由 botocore 从 awscli 配置中填充。配置优先级顺序为:

  1. acct 配置文件

  2. idem 配置文件

  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 包含一个函数 absent()。在我的状态文件中,我可以创建一个使用 absent 函数的状态,如下所示。

my_state.sls

idem_aws_test_vpc:
  aws.ec2.vpc.absent:
    - name: "idem_aws_test_vpc"

可以使用以下方式执行此状态:

idem state my_state.sls

idem state 还有一些标志可以显着提高运行的扩展性和性能。让我们使用这个新状态,它验证是否有 100 个 vpc 不存在。

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

可以通过 --runtime parallel 执行状态,以充分利用 idem 的异步执行调用。

idem state --runtime parallel my_state.sls

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

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

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

此esm文件表示Idem将使用AWS S3桶“idem-state-storage-bucket”和DynamoDB表“idem-state-storage-table”,位于eu-west-2区域。 “key”是esm数据将要读取和存储的文件路径。在使用此功能之前,需要先创建S3桶和DynamoDB表。DynamoDB表应以字符串“LockID”为主键,不包含其他内容。

项目详情


发布历史 发布通知 | RSS订阅

下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

idem-aws-6.2.1.tar.gz (818.6 kB 查看哈希值)

上传时间 源代码

构建分发

idem_aws-6.2.1-py3-none-any.whl (1.2 MB 查看哈希值)

上传时间 Python 3

支持