aws的混沌工具包扩展
chaostoolkit-aws的Python项目详细描述
AWS混沌工具包扩展
>>/p/p>安装
这个包需要python 3.5+
要从实验中使用,此包必须安装在python中 已经存在的环境。
$ pip install -U chaostoolkit-aws
用法
要使用此包中的探测和操作,请将以下内容添加到 实验文件:
{"name":"stop-an-ec2-instance","provider":{"type":"python","module":"chaosaws.ec2.actions","func":"stop_instance","arguments":{"instance_id":"i-123456"}}},{"name":"create-a-new-policy","provider":{"type":"python","module":"chaosaws.iam.actions","func":"create_policy","arguments":{"name":"mypolicy","path":"user/Jane","policy":{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["s3:ListAllMyBuckets","s3:GetBucketLocation"],"Resource":"arn:aws:s3:::*"}]}}}}
或者从az中随机选择一个:
{"name":"stop-an-ec2-instance-in-az-at-random","provider":{"type":"python","module":"chaosaws.ec2.actions","func":"stop_instance","arguments":{"az":"us-west-1"}}}
就这样!
请浏览代码以查看现有的探测和操作。
配置
凭证
此扩展使用引擎盖下的boto3库。此库期望 您已经正确配置了连接和 使用AWS服务进行身份验证。
一般来说,有两种方法可以做到这一点:
您已经配置了运行 从用户范围内的凭证源进行实验(任何 做)。您还可以提供一个配置文件名,以便承担角色
{"configuration":{"aws_profile_name":"dev"}}
你明确地把正确的环境变量传递给实验 定义如下:
{"secrets":{"aws":{"aws_access_key_id":"your key","aws_secret_access_key":"access key","aws_session_token":"token",}}}
请注意,令牌是可选的。 然后,按如下方式使用:
{"name":"stop-an-ec2-instance","provider":{"type":"python","module":"chaosaws.ec2.actions","func":"stop_instance","secrets":["aws"],"arguments":{"instance_id":"i-123456"}}}
其他AWS设置
除了身份验证凭据之外,还可以配置区域 你想用来对付的。在实验的顶层,添加:
{"configuration":{"aws_region":"us-east-1"}}
您还可以指定要承担的aws角色arn。这对aws很有帮助 具有多个帐户的系统,并在这些帐户上运行实验。 为了使用它,您最初使用的aws配置文件必须具有 承担给定角色的权限。如果满足了这些条件, boto3将发出对sts assempt撸role函数的调用。这个罐头 单独使用,或与"aws_profile_name"一起使用,如下所示:
{"configuration":{"aws_profile_name":"dev","aws_assume_role_arn":"arn"}}
贡献
如果您希望为这个包贡献更多的功能,那么 欢迎这么做。请,派生此项目,按照 常规PEP 8代码样式,喷洒测试并提交PR 复习< < /P>
混沌工具包项目要求所有贡献者必须签署 每个通信上的开发者原产地证书如果他们想合并 进入存储库的主分支。请确保你能遵守 提交PR前DCO的规则。
开发
如果您希望在此项目上进行开发,请确保安装开发 依赖关系。但首先,创建一个虚拟环境,然后安装 这些依赖关系。
$ pip install -r requirements-dev.txt -r requirements.txt
然后,将您的环境指向此目录:
$ pip install -U chaostoolkit-aws
0
现在,您可以编辑这些文件,您的
环境,即使在本地从chaos
命令运行时也是如此。
测试
要运行项目的测试,请执行以下操作:
$ pip install -U chaostoolkit-aws
1
添加新的AWS API支持
一旦设置了环境,就可以开始添加新的 通过添加新操作、探测和整个子包,aws api支持 对于那些。
BOTO支持的服务
这个包依赖于boto3将api调用包装成一个流畅的python 应用程序编程接口。一些较新的aws服务在boto3中还不可用,在这种情况下, 你应该读下一节。
假设您希望支持ec2子包中的新操作。
首先在ec2/actions.py中创建一个新函数:
$ pip install -U chaostoolkit-aws
2
如您所见,实际的代码很简单。你首先创建一个 ec2客户端并在该客户端上调用适当的方法 用期望的参数。我们按原样返回动作 由chaostoolkit记录,甚至用作稳态的一部分 假设探测(如果这是探测,而不是实际行动)。
您可以决定进行多个aws api调用,但最好保留 它很简单,所以从实验中作文更容易。尽管如此, 你也可以将它们直接组合成一个单独的动作 用例。
一旦实现了该操作,就必须至少创建一个单元测试
在tests/ec2/test\u ec2\u actions.py
测试模块中。例如:
$ pip install -U chaostoolkit-aws
3
通过使用内置的python模块来模拟对象,我们可以模拟 ec2 client和assert we edo确实调用了正确的方法 论据。我们鼓励您为不同的 条件。
最后,如果您选择完全添加对新aws api资源的支持, 您应该创建相应的子包。
BOTO不支持的服务(新的AWS功能)
如果您想要提供的支持是针对一个新的aws服务,而这个服务在boto中可以执行 尚不支持,这需要通过 请求包。假设我们有一个新的服务,boto3还不支持它
$ pip install -U chaostoolkit-aws
4
下面是一个关于现有api调用的示例(作为一个更具体的片段):
$ pip install -U chaostoolkit-aws
5
当使用signed_api_call
时,您需要负责
传递参数。基本上,查看每个
API调用。
警告:应该注意的是,每当BOTO3实现API时, 包应该相应地更新,因为boto3是更多的版本阿蒂尔和 固体。
使您的新子包可被发现
最后,如果您已经完全创建了一个新的子包,则需要将其
混沌工具箱可以发现的能力。只需修改发现
函数的函数。例如,假设一个新的eks
子包,带有操作和探针:
$ pip install -U chaostoolkit-aws
6