erlcloud:适用于Erlang 的 AWS API 库
此库不是由 AWS 开发或维护的, 因此与所有的 aws-cli 或 boto 相比, 仍然缺少大量的功能。根据要求添加所需的功能。
实施的服务API:
- Amazon Elastic Compute Cloud(EC2)
- Amazon EC2容器服务(ECS)
- Amazon Simple Storage Service(S3)
- 亚马逊简单队列服务(SQS)
- Amazon SimpleDB
- Amazon Mechanical Turk
- Amazon CloudWatch(MON)
- Amazon CloudSearch
- Amazon Inspector
- 亚马逊密钥管理服务(KMS)
- Amazon DirectConnect
- Amazon DynamoDB& DDB流(ddb2)
- Amazon Autoscaling(AS)
- Amazon CloudTrail(CT)
- Cloud Formation(CFN)
- ElasticLoadBalancing(ELB)
- 身份和访问管理(IAM)
- 室壁运动
- 胶水(目录表,抓取工具和作业API支持)
- 雅典娜
- CloudWatch的
- MechanicalTurk
- 简单数据库(SDB)
- 关系数据服务(RDS)
- 简单电子邮件服务(SES)
- 短令牌服务(STS)
- 简易通知服务(SNS)
- Web应用程序防火墙(WAF)
- 以及更多来
大部分API函数已经实现。 并非所有功能都经过全面测试,因此在将此库集成到生产代码时应特别小心。 请发送问题和补丁。
这些库可以使用两种方式:
- 您可以在流程字典中指定配置参数。对简单任务很有用
- 您可以创建一个配置对象,并将其作为最终参数传递给每个请求。对跨AWS账户访问有用
路线图
以下是该库的路线图更新以及常规功能和修补程序。
- 3.0.x的
-
删除R16支持完成 - 支持地图
-
- 3.X.X
- 修复透析器检查结果并将其强制存入库
- 只有 SigV4 签名并在一个模块中推广。仅在 SBD 部分保留 SigV2
- 不再有
主要API兼容性在0.13.X和2.0.x之间变化
- ELB API
- ...即将填写名单
支持的Erlang版本
目前我们支持以下OTP版本:
- 17.5
- 18.1
- 19.1
- 20.0
开始
您需要克隆存储库并下载钢筋/rebar3(如果它不在您的路径中)。
git clone https://github.com/erlcloud/erlcloud.git cd erlcloud wget https://s3.amazonaws.com/rebar3/rebar3 chmod a+x rebar3
编译并运行erlcloud
make make run
如果您在应用程序中使用erlcloud,请将其作为应用程序配置文件中的依赖项添加。 要在shell中使用erlcloud,可以通过调用以下命令启动它:
application:ensure_all_started(erlcloud).
使用临时安全证书
访问AWS资源可能通过第三方身份提供商。 使用 临时安全证书管理访问。
您可以在OS环境变量中提供您的亚马逊凭证
export AWS_ACCESS_KEY_ID=<Your AWS Access Key> export AWS_SECRET_ACCESS_KEY=<Your AWS Secret Access Key> export AWS_SESSION_TOKEN=<Your AWS Security Token> export AWS_DEFAULT_REGION=<Your region>
如果您没有在操作系统环境变量中提供您的亚马逊凭据,那么您需要提供从您的配置文件读取配置:
{ok, Conf} = erlcloud_aws:profile(). erlcloud_s3:list_buckets(Conf).
或者您可以通过 erlcloud 应用程序环境变量提供它们。
application:set_env(erlcloud, aws_access_key_id, "your key"), application:set_env(erlcloud, aws_secret_access_key, "your secret key"), application:set_env(erlcloud, aws_security_token, "your token"), application:set_env(erlcloud, aws_region, "your region"),
使用访问密钥
您可以在环境变量中提供您的亚马逊凭证。
export AWS_ACCESS_KEY_ID=<Your AWS Access Key> export AWS_SECRET_ACCESS_KEY=<Your AWS Secret Access Key>
如果您没有在环境变量中提供您的亚马逊凭据,那么您需要提供每个进程的配置:
erlcloud_ec2:configure(AccessKeyId, SecretAccessKey [, Hostname]).
主机名默认为不存在的“ec2.amazonaws.com”故意避免与US-East-1混合 有关所有服务配置的完整说明,请参阅 aws_config 。
配置对象的用法:
EC2 = erlcloud_ec2:new(AccessKeyId, SecretAccessKey [, Hostname]) erlcloud_ec2:describe_images(EC2).
aws_config
aws_config记录包含许多有价值的默认值,例如AWS服务的协议和端口。 您始终可以通过创建新的#aws_config {}记录并更改特定字段,然后将结果传递给任何erlcloud函数来重新定义它们。 但是如果你想在运行时改变一些东西,这可能是乏味的和/或不够灵活。
另一种方法是在 app.config -> erlcloud -> aws_config 部分中设置默认字段,并依赖默认情况下所有函数使用的配置。
这样的app.config示例:
[ {erlcloud, [ {aws_config, [ {s3_scheme, "http://"}, {s3_host, "s3.example.com"} ]} ]} ].
基本使用
然后你就可以开始进行api调用了,如:
erlcloud_ec2:describe_images(). % list buckets of Account stored in config in process dict % of of the account you are running in. erlcloud_s3:list_buckets(). erlcloud_s3:list_buckets(erlcloud_aws:default_cfg()). % List buckets on 3d Account from Conf erlcloud_s3:list_buckets(Conf).
创建EC2实例可能如下所示:
start_instance(Ami, KeyPair, UserData, Type, Zone) -> Config = #aws_config{ access_key_id = application:get_env(aws_key), secret_access_key = application:get_env(aws_secret) }, InstanceSpec = #ec2_instance_spec{image_id = Ami, key_name = KeyPair, instance_type = Type, availability_zone = Zone, user_data = UserData}, erlcloud_ec2:run_instances(InstanceSpec, Config).
有关使用信息,请查阅源代码和 https://hexdocs.pm/erlcloud 。 有关详细的API描述,请参阅以下位置的AWS参考资料:
- http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome html的
- http://docs.aws.amazon.com/AmazonS3/latest/API/Welcome html的
- 和其他服务 https://aws.amazon.com/documentation/
备注
缩进的贡献应该遵循缩进式的周围文本。 一般来说,它遵循由OTP团队提供的官方erlang模式的默认缩进规则。
最佳实践
- 所有接口都应提供使用非默认配置的方法。
- 具有分页逻辑的公共接口应该在某些模块中找到的 {{paged,Marker},Results} 更喜欢 {ok,Results,Marker} 样式。 在记录输出的情况下,令牌应该是记录的一部分。
- 传递下一页 NextToken 时, NextMarker 优先于 Opts ,而不是许多模块中的有趣参数。
- 公共接口通常应该将proplists暴露在记录之上。所有新模块都有优先考虑。
- 暴露的记录只能用于复杂的输出。示例如下:ddb2,ecs。
- 库不应该公开任何长时间运行或有状态的进程 - 没有gen_servers,没有缓存等。