aws-sdk-v1 1.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/LICENSE.txt +12 -0
  4. data/README.md +337 -0
  5. data/bin/aws-rb +179 -0
  6. data/ca-bundle.crt +3554 -0
  7. data/endpoints.json +1671 -0
  8. data/lib/aws-sdk-v1.rb +2 -0
  9. data/lib/aws-sdk.rb +1 -0
  10. data/lib/aws.rb +14 -0
  11. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +1070 -0
  12. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +372 -0
  13. data/lib/aws/api_config/CloudFront-2013-05-12.yml +2448 -0
  14. data/lib/aws/api_config/CloudFront-2013-08-26.yml +2599 -0
  15. data/lib/aws/api_config/CloudFront-2013-09-27.yml +2765 -0
  16. data/lib/aws/api_config/CloudFront-2013-11-11.yml +2886 -0
  17. data/lib/aws/api_config/CloudFront-2013-11-22.yml +2918 -0
  18. data/lib/aws/api_config/CloudFront-2014-01-31.yml +2934 -0
  19. data/lib/aws/api_config/CloudFront-2014-05-31.yml +3100 -0
  20. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  21. data/lib/aws/api_config/CloudSearch-2013-01-01.yml +1164 -0
  22. data/lib/aws/api_config/CloudTrail-2013-11-01.yml +130 -0
  23. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  24. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  25. data/lib/aws/api_config/DirectConnect-2012-10-25.yml +735 -0
  26. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1168 -0
  27. data/lib/aws/api_config/DynamoDB-2012-08-10.yml +2105 -0
  28. data/lib/aws/api_config/EC2-2013-08-15.yml +4708 -0
  29. data/lib/aws/api_config/EC2-2013-10-01.yml +4726 -0
  30. data/lib/aws/api_config/EC2-2013-10-15.yml +4651 -0
  31. data/lib/aws/api_config/EC2-2014-02-01.yml +4755 -0
  32. data/lib/aws/api_config/EC2-2014-05-01.yml +4812 -0
  33. data/lib/aws/api_config/ELB-2012-06-01.yml +766 -0
  34. data/lib/aws/api_config/EMR-2009-03-31.yml +972 -0
  35. data/lib/aws/api_config/ElastiCache-2013-06-15.yml +1188 -0
  36. data/lib/aws/api_config/ElastiCache-2014-03-24.yml +1375 -0
  37. data/lib/aws/api_config/ElastiCache-2014-07-15.yml +1385 -0
  38. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +854 -0
  39. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +3082 -0
  40. data/lib/aws/api_config/Glacier-2012-06-01.yml +649 -0
  41. data/lib/aws/api_config/IAM-2010-05-08.yml +1339 -0
  42. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  43. data/lib/aws/api_config/Kinesis-2013-12-02.yml +201 -0
  44. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +2025 -0
  45. data/lib/aws/api_config/RDS-2013-05-15.yml +2464 -0
  46. data/lib/aws/api_config/RDS-2013-09-09.yml +2640 -0
  47. data/lib/aws/api_config/Redshift-2012-12-01.yml +2161 -0
  48. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  49. data/lib/aws/api_config/Route53-2013-04-01.yml +889 -0
  50. data/lib/aws/api_config/SNS-2010-03-31.yml +448 -0
  51. data/lib/aws/api_config/SQS-2012-11-05.yml +404 -0
  52. data/lib/aws/api_config/STS-2011-06-15.yml +151 -0
  53. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  54. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  55. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2388 -0
  56. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  57. data/lib/aws/api_config/StorageGateway-2013-06-30.yml +1025 -0
  58. data/lib/aws/api_config/Support-2013-04-15.yml +489 -0
  59. data/lib/aws/auto_scaling.rb +163 -0
  60. data/lib/aws/auto_scaling/activity.rb +102 -0
  61. data/lib/aws/auto_scaling/activity_collection.rb +81 -0
  62. data/lib/aws/auto_scaling/client.rb +48 -0
  63. data/lib/aws/auto_scaling/config.rb +18 -0
  64. data/lib/aws/auto_scaling/errors.rb +22 -0
  65. data/lib/aws/auto_scaling/group.rb +421 -0
  66. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  67. data/lib/aws/auto_scaling/group_options.rb +155 -0
  68. data/lib/aws/auto_scaling/instance.rb +192 -0
  69. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  70. data/lib/aws/auto_scaling/launch_configuration.rb +162 -0
  71. data/lib/aws/auto_scaling/launch_configuration_collection.rb +160 -0
  72. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  73. data/lib/aws/auto_scaling/notification_configuration_collection.rb +183 -0
  74. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  75. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  76. data/lib/aws/auto_scaling/scaling_policy_options.rb +65 -0
  77. data/lib/aws/auto_scaling/scheduled_action.rb +141 -0
  78. data/lib/aws/auto_scaling/scheduled_action_collection.rb +202 -0
  79. data/lib/aws/auto_scaling/tag.rb +59 -0
  80. data/lib/aws/auto_scaling/tag_collection.rb +114 -0
  81. data/lib/aws/cloud_formation.rb +272 -0
  82. data/lib/aws/cloud_formation/client.rb +48 -0
  83. data/lib/aws/cloud_formation/config.rb +18 -0
  84. data/lib/aws/cloud_formation/errors.rb +22 -0
  85. data/lib/aws/cloud_formation/stack.rb +266 -0
  86. data/lib/aws/cloud_formation/stack_collection.rb +232 -0
  87. data/lib/aws/cloud_formation/stack_event.rb +73 -0
  88. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  89. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  90. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  91. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  92. data/lib/aws/cloud_formation/stack_resource_collection.rb +83 -0
  93. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  94. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  95. data/lib/aws/cloud_front.rb +72 -0
  96. data/lib/aws/cloud_front/client.rb +57 -0
  97. data/lib/aws/cloud_front/config.rb +18 -0
  98. data/lib/aws/cloud_front/errors.rb +22 -0
  99. data/lib/aws/cloud_search.rb +73 -0
  100. data/lib/aws/cloud_search/client.rb +40 -0
  101. data/lib/aws/cloud_search/config.rb +18 -0
  102. data/lib/aws/cloud_search/errors.rb +22 -0
  103. data/lib/aws/cloud_trail.rb +72 -0
  104. data/lib/aws/cloud_trail/client.rb +35 -0
  105. data/lib/aws/cloud_trail/config.rb +18 -0
  106. data/lib/aws/cloud_trail/errors.rb +22 -0
  107. data/lib/aws/cloud_watch.rb +118 -0
  108. data/lib/aws/cloud_watch/alarm.rb +293 -0
  109. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  110. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  111. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  112. data/lib/aws/cloud_watch/client.rb +40 -0
  113. data/lib/aws/cloud_watch/config.rb +18 -0
  114. data/lib/aws/cloud_watch/errors.rb +22 -0
  115. data/lib/aws/cloud_watch/metric.rb +135 -0
  116. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  117. data/lib/aws/cloud_watch/metric_collection.rb +129 -0
  118. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  119. data/lib/aws/core.rb +716 -0
  120. data/lib/aws/core/async_handle.rb +90 -0
  121. data/lib/aws/core/cacheable.rb +77 -0
  122. data/lib/aws/core/client.rb +787 -0
  123. data/lib/aws/core/collection.rb +263 -0
  124. data/lib/aws/core/collection/simple.rb +82 -0
  125. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  126. data/lib/aws/core/collection/with_next_token.rb +97 -0
  127. data/lib/aws/core/configuration.rb +542 -0
  128. data/lib/aws/core/credential_providers.rb +639 -0
  129. data/lib/aws/core/data.rb +247 -0
  130. data/lib/aws/core/deprecations.rb +84 -0
  131. data/lib/aws/core/endpoints.rb +37 -0
  132. data/lib/aws/core/http/connection_pool.rb +369 -0
  133. data/lib/aws/core/http/curb_handler.rb +148 -0
  134. data/lib/aws/core/http/handler.rb +89 -0
  135. data/lib/aws/core/http/net_http_handler.rb +144 -0
  136. data/lib/aws/core/http/patch.rb +102 -0
  137. data/lib/aws/core/http/request.rb +259 -0
  138. data/lib/aws/core/http/response.rb +81 -0
  139. data/lib/aws/core/indifferent_hash.rb +88 -0
  140. data/lib/aws/core/inflection.rb +56 -0
  141. data/lib/aws/core/ini_parser.rb +42 -0
  142. data/lib/aws/core/json_client.rb +47 -0
  143. data/lib/aws/core/json_parser.rb +76 -0
  144. data/lib/aws/core/json_request_builder.rb +35 -0
  145. data/lib/aws/core/json_response_parser.rb +79 -0
  146. data/lib/aws/core/lazy_error_classes.rb +108 -0
  147. data/lib/aws/core/log_formatter.rb +428 -0
  148. data/lib/aws/core/managed_file.rb +32 -0
  149. data/lib/aws/core/meta_utils.rb +45 -0
  150. data/lib/aws/core/model.rb +62 -0
  151. data/lib/aws/core/naming.rb +30 -0
  152. data/lib/aws/core/option_grammar.rb +738 -0
  153. data/lib/aws/core/options/json_serializer.rb +82 -0
  154. data/lib/aws/core/options/validator.rb +155 -0
  155. data/lib/aws/core/options/xml_serializer.rb +118 -0
  156. data/lib/aws/core/page_result.rb +75 -0
  157. data/lib/aws/core/policy.rb +941 -0
  158. data/lib/aws/core/query_client.rb +41 -0
  159. data/lib/aws/core/query_error_parser.rb +24 -0
  160. data/lib/aws/core/query_request_builder.rb +47 -0
  161. data/lib/aws/core/query_response_parser.rb +35 -0
  162. data/lib/aws/core/region.rb +85 -0
  163. data/lib/aws/core/region_collection.rb +80 -0
  164. data/lib/aws/core/resource.rb +413 -0
  165. data/lib/aws/core/resource_cache.rb +40 -0
  166. data/lib/aws/core/response.rb +215 -0
  167. data/lib/aws/core/response_cache.rb +50 -0
  168. data/lib/aws/core/rest_error_parser.rb +24 -0
  169. data/lib/aws/core/rest_json_client.rb +40 -0
  170. data/lib/aws/core/rest_request_builder.rb +154 -0
  171. data/lib/aws/core/rest_response_parser.rb +66 -0
  172. data/lib/aws/core/rest_xml_client.rb +47 -0
  173. data/lib/aws/core/service_interface.rb +83 -0
  174. data/lib/aws/core/signers/base.rb +46 -0
  175. data/lib/aws/core/signers/cloud_front.rb +56 -0
  176. data/lib/aws/core/signers/s3.rb +159 -0
  177. data/lib/aws/core/signers/version_2.rb +72 -0
  178. data/lib/aws/core/signers/version_3.rb +86 -0
  179. data/lib/aws/core/signers/version_3_https.rb +61 -0
  180. data/lib/aws/core/signers/version_4.rb +228 -0
  181. data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +191 -0
  182. data/lib/aws/core/uri_escape.rb +44 -0
  183. data/lib/aws/core/xml/frame.rb +245 -0
  184. data/lib/aws/core/xml/frame_stack.rb +85 -0
  185. data/lib/aws/core/xml/grammar.rb +307 -0
  186. data/lib/aws/core/xml/parser.rb +70 -0
  187. data/lib/aws/core/xml/root_frame.rb +65 -0
  188. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  189. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +56 -0
  190. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  191. data/lib/aws/core/xml/sax_handlers/rexml.rb +47 -0
  192. data/lib/aws/core/xml/stub.rb +123 -0
  193. data/lib/aws/data_pipeline.rb +72 -0
  194. data/lib/aws/data_pipeline/client.rb +36 -0
  195. data/lib/aws/data_pipeline/config.rb +18 -0
  196. data/lib/aws/data_pipeline/errors.rb +20 -0
  197. data/lib/aws/direct_connect.rb +73 -0
  198. data/lib/aws/direct_connect/client.rb +36 -0
  199. data/lib/aws/direct_connect/config.rb +18 -0
  200. data/lib/aws/direct_connect/errors.rb +22 -0
  201. data/lib/aws/dynamo_db.rb +230 -0
  202. data/lib/aws/dynamo_db/attribute_collection.rb +456 -0
  203. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  204. data/lib/aws/dynamo_db/batch_write.rb +254 -0
  205. data/lib/aws/dynamo_db/binary.rb +35 -0
  206. data/lib/aws/dynamo_db/client.rb +129 -0
  207. data/lib/aws/dynamo_db/client/v20111205.rb +1266 -0
  208. data/lib/aws/dynamo_db/client/v20120810.rb +1409 -0
  209. data/lib/aws/dynamo_db/client_v2.rb +44 -0
  210. data/lib/aws/dynamo_db/config.rb +24 -0
  211. data/lib/aws/dynamo_db/errors.rb +20 -0
  212. data/lib/aws/dynamo_db/expectations.rb +40 -0
  213. data/lib/aws/dynamo_db/item.rb +133 -0
  214. data/lib/aws/dynamo_db/item_collection.rb +856 -0
  215. data/lib/aws/dynamo_db/item_data.rb +31 -0
  216. data/lib/aws/dynamo_db/keys.rb +41 -0
  217. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  218. data/lib/aws/dynamo_db/resource.rb +33 -0
  219. data/lib/aws/dynamo_db/table.rb +492 -0
  220. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  221. data/lib/aws/dynamo_db/types.rb +111 -0
  222. data/lib/aws/ec2.rb +428 -0
  223. data/lib/aws/ec2/attachment.rb +135 -0
  224. data/lib/aws/ec2/attachment_collection.rb +54 -0
  225. data/lib/aws/ec2/availability_zone.rb +86 -0
  226. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  227. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  228. data/lib/aws/ec2/client.rb +154 -0
  229. data/lib/aws/ec2/collection.rb +36 -0
  230. data/lib/aws/ec2/config.rb +21 -0
  231. data/lib/aws/ec2/customer_gateway.rb +90 -0
  232. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  233. data/lib/aws/ec2/dhcp_options.rb +106 -0
  234. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  235. data/lib/aws/ec2/elastic_ip.rb +209 -0
  236. data/lib/aws/ec2/elastic_ip_collection.rb +93 -0
  237. data/lib/aws/ec2/errors.rb +32 -0
  238. data/lib/aws/ec2/export_task.rb +120 -0
  239. data/lib/aws/ec2/export_task_collection.rb +67 -0
  240. data/lib/aws/ec2/filtered_collection.rb +87 -0
  241. data/lib/aws/ec2/has_permissions.rb +44 -0
  242. data/lib/aws/ec2/image.rb +270 -0
  243. data/lib/aws/ec2/image_collection.rb +219 -0
  244. data/lib/aws/ec2/instance.rb +803 -0
  245. data/lib/aws/ec2/instance_collection.rb +402 -0
  246. data/lib/aws/ec2/internet_gateway.rb +122 -0
  247. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  248. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  249. data/lib/aws/ec2/key_pair.rb +82 -0
  250. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  251. data/lib/aws/ec2/network_acl.rb +256 -0
  252. data/lib/aws/ec2/network_acl/association.rb +56 -0
  253. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  254. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  255. data/lib/aws/ec2/network_interface.rb +237 -0
  256. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  257. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  258. data/lib/aws/ec2/permission_collection.rb +174 -0
  259. data/lib/aws/ec2/region.rb +106 -0
  260. data/lib/aws/ec2/region_collection.rb +51 -0
  261. data/lib/aws/ec2/reserved_instances.rb +57 -0
  262. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  263. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  264. data/lib/aws/ec2/reserved_instances_offering_collection.rb +45 -0
  265. data/lib/aws/ec2/resource.rb +161 -0
  266. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  267. data/lib/aws/ec2/route_table.rb +205 -0
  268. data/lib/aws/ec2/route_table/association.rb +119 -0
  269. data/lib/aws/ec2/route_table/route.rb +119 -0
  270. data/lib/aws/ec2/route_table_collection.rb +72 -0
  271. data/lib/aws/ec2/security_group.rb +482 -0
  272. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  273. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  274. data/lib/aws/ec2/security_group_collection.rb +133 -0
  275. data/lib/aws/ec2/snapshot.rb +143 -0
  276. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  277. data/lib/aws/ec2/subnet.rb +161 -0
  278. data/lib/aws/ec2/subnet_collection.rb +119 -0
  279. data/lib/aws/ec2/tag.rb +81 -0
  280. data/lib/aws/ec2/tag_collection.rb +107 -0
  281. data/lib/aws/ec2/tagged_collection.rb +67 -0
  282. data/lib/aws/ec2/tagged_item.rb +85 -0
  283. data/lib/aws/ec2/volume.rb +185 -0
  284. data/lib/aws/ec2/volume_collection.rb +102 -0
  285. data/lib/aws/ec2/vpc.rb +174 -0
  286. data/lib/aws/ec2/vpc_collection.rb +70 -0
  287. data/lib/aws/ec2/vpn_connection.rb +99 -0
  288. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  289. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  290. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  291. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  292. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  293. data/lib/aws/elastic_beanstalk.rb +49 -0
  294. data/lib/aws/elastic_beanstalk/client.rb +36 -0
  295. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  296. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  297. data/lib/aws/elastic_transcoder.rb +29 -0
  298. data/lib/aws/elastic_transcoder/client.rb +48 -0
  299. data/lib/aws/elastic_transcoder/config.rb +18 -0
  300. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  301. data/lib/aws/elasticache.rb +49 -0
  302. data/lib/aws/elasticache/client.rb +41 -0
  303. data/lib/aws/elasticache/config.rb +18 -0
  304. data/lib/aws/elasticache/errors.rb +22 -0
  305. data/lib/aws/elb.rb +66 -0
  306. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  307. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  308. data/lib/aws/elb/client.rb +35 -0
  309. data/lib/aws/elb/config.rb +18 -0
  310. data/lib/aws/elb/errors.rb +26 -0
  311. data/lib/aws/elb/instance_collection.rb +168 -0
  312. data/lib/aws/elb/listener.rb +190 -0
  313. data/lib/aws/elb/listener_collection.rb +113 -0
  314. data/lib/aws/elb/listener_opts.rb +45 -0
  315. data/lib/aws/elb/load_balancer.rb +280 -0
  316. data/lib/aws/elb/load_balancer_collection.rb +146 -0
  317. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  318. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  319. data/lib/aws/emr.rb +87 -0
  320. data/lib/aws/emr/client.rb +35 -0
  321. data/lib/aws/emr/config.rb +18 -0
  322. data/lib/aws/emr/errors.rb +22 -0
  323. data/lib/aws/emr/instance_group.rb +138 -0
  324. data/lib/aws/emr/instance_group_collection.rb +82 -0
  325. data/lib/aws/emr/job_flow.rb +307 -0
  326. data/lib/aws/emr/job_flow_collection.rb +183 -0
  327. data/lib/aws/errors.rb +162 -0
  328. data/lib/aws/glacier.rb +79 -0
  329. data/lib/aws/glacier/archive.rb +56 -0
  330. data/lib/aws/glacier/archive_collection.rb +146 -0
  331. data/lib/aws/glacier/client.rb +49 -0
  332. data/lib/aws/glacier/config.rb +19 -0
  333. data/lib/aws/glacier/errors.rb +22 -0
  334. data/lib/aws/glacier/resource.rb +30 -0
  335. data/lib/aws/glacier/vault.rb +145 -0
  336. data/lib/aws/glacier/vault_collection.rb +75 -0
  337. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  338. data/lib/aws/iam.rb +408 -0
  339. data/lib/aws/iam/access_key.rb +185 -0
  340. data/lib/aws/iam/access_key_collection.rb +128 -0
  341. data/lib/aws/iam/account_alias_collection.rb +79 -0
  342. data/lib/aws/iam/client.rb +49 -0
  343. data/lib/aws/iam/collection.rb +83 -0
  344. data/lib/aws/iam/config.rb +18 -0
  345. data/lib/aws/iam/errors.rb +22 -0
  346. data/lib/aws/iam/group.rb +111 -0
  347. data/lib/aws/iam/group_collection.rb +132 -0
  348. data/lib/aws/iam/group_policy_collection.rb +47 -0
  349. data/lib/aws/iam/group_user_collection.rb +84 -0
  350. data/lib/aws/iam/login_profile.rb +111 -0
  351. data/lib/aws/iam/mfa_device.rb +52 -0
  352. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  353. data/lib/aws/iam/policy.rb +46 -0
  354. data/lib/aws/iam/policy_collection.rb +188 -0
  355. data/lib/aws/iam/resource.rb +62 -0
  356. data/lib/aws/iam/server_certificate.rb +148 -0
  357. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  358. data/lib/aws/iam/signing_certificate.rb +186 -0
  359. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  360. data/lib/aws/iam/user.rb +200 -0
  361. data/lib/aws/iam/user_collection.rb +133 -0
  362. data/lib/aws/iam/user_group_collection.rb +98 -0
  363. data/lib/aws/iam/user_policy.rb +90 -0
  364. data/lib/aws/iam/user_policy_collection.rb +45 -0
  365. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  366. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  367. data/lib/aws/import_export.rb +73 -0
  368. data/lib/aws/import_export/client.rb +35 -0
  369. data/lib/aws/import_export/config.rb +19 -0
  370. data/lib/aws/import_export/errors.rb +22 -0
  371. data/lib/aws/kinesis.rb +53 -0
  372. data/lib/aws/kinesis/client.rb +35 -0
  373. data/lib/aws/kinesis/config.rb +18 -0
  374. data/lib/aws/kinesis/errors.rb +20 -0
  375. data/lib/aws/ops_works.rb +29 -0
  376. data/lib/aws/ops_works/client.rb +35 -0
  377. data/lib/aws/ops_works/config.rb +18 -0
  378. data/lib/aws/ops_works/errors.rb +20 -0
  379. data/lib/aws/rails.rb +195 -0
  380. data/lib/aws/rds.rb +70 -0
  381. data/lib/aws/rds/client.rb +42 -0
  382. data/lib/aws/rds/config.rb +18 -0
  383. data/lib/aws/rds/db_instance.rb +215 -0
  384. data/lib/aws/rds/db_instance_collection.rb +75 -0
  385. data/lib/aws/rds/db_snapshot.rb +163 -0
  386. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  387. data/lib/aws/rds/errors.rb +22 -0
  388. data/lib/aws/record.rb +139 -0
  389. data/lib/aws/record/abstract_base.rb +689 -0
  390. data/lib/aws/record/attributes.rb +388 -0
  391. data/lib/aws/record/conversion.rb +38 -0
  392. data/lib/aws/record/dirty_tracking.rb +287 -0
  393. data/lib/aws/record/errors.rb +143 -0
  394. data/lib/aws/record/exceptions.rb +51 -0
  395. data/lib/aws/record/hash_model.rb +204 -0
  396. data/lib/aws/record/hash_model/attributes.rb +195 -0
  397. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  398. data/lib/aws/record/hash_model/scope.rb +108 -0
  399. data/lib/aws/record/model.rb +453 -0
  400. data/lib/aws/record/model/attributes.rb +377 -0
  401. data/lib/aws/record/model/finder_methods.rb +232 -0
  402. data/lib/aws/record/model/scope.rb +212 -0
  403. data/lib/aws/record/naming.rb +31 -0
  404. data/lib/aws/record/scope.rb +203 -0
  405. data/lib/aws/record/validations.rb +694 -0
  406. data/lib/aws/record/validator.rb +246 -0
  407. data/lib/aws/record/validators/acceptance.rb +49 -0
  408. data/lib/aws/record/validators/block.rb +36 -0
  409. data/lib/aws/record/validators/confirmation.rb +41 -0
  410. data/lib/aws/record/validators/count.rb +106 -0
  411. data/lib/aws/record/validators/exclusion.rb +41 -0
  412. data/lib/aws/record/validators/format.rb +55 -0
  413. data/lib/aws/record/validators/inclusion.rb +54 -0
  414. data/lib/aws/record/validators/length.rb +105 -0
  415. data/lib/aws/record/validators/method.rb +31 -0
  416. data/lib/aws/record/validators/numericality.rb +136 -0
  417. data/lib/aws/record/validators/presence.rb +43 -0
  418. data/lib/aws/redshift.rb +51 -0
  419. data/lib/aws/redshift/client.rb +35 -0
  420. data/lib/aws/redshift/config.rb +18 -0
  421. data/lib/aws/redshift/errors.rb +22 -0
  422. data/lib/aws/route_53.rb +86 -0
  423. data/lib/aws/route_53/change_batch.rb +161 -0
  424. data/lib/aws/route_53/change_info.rb +72 -0
  425. data/lib/aws/route_53/client.rb +38 -0
  426. data/lib/aws/route_53/config.rb +18 -0
  427. data/lib/aws/route_53/errors.rb +22 -0
  428. data/lib/aws/route_53/hosted_zone.rb +134 -0
  429. data/lib/aws/route_53/hosted_zone_collection.rb +101 -0
  430. data/lib/aws/route_53/resource_record_set.rb +251 -0
  431. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  432. data/lib/aws/s3.rb +156 -0
  433. data/lib/aws/s3/access_control_list.rb +265 -0
  434. data/lib/aws/s3/acl_object.rb +264 -0
  435. data/lib/aws/s3/acl_options.rb +204 -0
  436. data/lib/aws/s3/bucket.rb +742 -0
  437. data/lib/aws/s3/bucket_collection.rb +162 -0
  438. data/lib/aws/s3/bucket_lifecycle_configuration.rb +473 -0
  439. data/lib/aws/s3/bucket_tag_collection.rb +111 -0
  440. data/lib/aws/s3/bucket_version_collection.rb +79 -0
  441. data/lib/aws/s3/cipher_io.rb +120 -0
  442. data/lib/aws/s3/client.rb +2067 -0
  443. data/lib/aws/s3/client/xml.rb +266 -0
  444. data/lib/aws/s3/config.rb +48 -0
  445. data/lib/aws/s3/cors_rule.rb +108 -0
  446. data/lib/aws/s3/cors_rule_collection.rb +194 -0
  447. data/lib/aws/s3/data_options.rb +191 -0
  448. data/lib/aws/s3/encryption_utils.rb +146 -0
  449. data/lib/aws/s3/errors.rb +94 -0
  450. data/lib/aws/s3/multipart_upload.rb +353 -0
  451. data/lib/aws/s3/multipart_upload_collection.rb +76 -0
  452. data/lib/aws/s3/object_collection.rb +353 -0
  453. data/lib/aws/s3/object_metadata.rb +103 -0
  454. data/lib/aws/s3/object_upload_collection.rb +77 -0
  455. data/lib/aws/s3/object_version.rb +154 -0
  456. data/lib/aws/s3/object_version_collection.rb +89 -0
  457. data/lib/aws/s3/paginated_collection.rb +75 -0
  458. data/lib/aws/s3/policy.rb +74 -0
  459. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  460. data/lib/aws/s3/prefixed_collection.rb +85 -0
  461. data/lib/aws/s3/presign_v4.rb +136 -0
  462. data/lib/aws/s3/presigned_post.rb +554 -0
  463. data/lib/aws/s3/request.rb +62 -0
  464. data/lib/aws/s3/s3_object.rb +1784 -0
  465. data/lib/aws/s3/tree.rb +116 -0
  466. data/lib/aws/s3/tree/branch_node.rb +68 -0
  467. data/lib/aws/s3/tree/child_collection.rb +104 -0
  468. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  469. data/lib/aws/s3/tree/node.rb +22 -0
  470. data/lib/aws/s3/tree/parent.rb +87 -0
  471. data/lib/aws/s3/uploaded_part.rb +82 -0
  472. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  473. data/lib/aws/s3/website_configuration.rb +102 -0
  474. data/lib/aws/simple_db.rb +218 -0
  475. data/lib/aws/simple_db/attribute.rb +156 -0
  476. data/lib/aws/simple_db/attribute_collection.rb +240 -0
  477. data/lib/aws/simple_db/client.rb +67 -0
  478. data/lib/aws/simple_db/config.rb +20 -0
  479. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  480. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  481. data/lib/aws/simple_db/domain.rb +123 -0
  482. data/lib/aws/simple_db/domain_collection.rb +86 -0
  483. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  484. data/lib/aws/simple_db/errors.rb +55 -0
  485. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  486. data/lib/aws/simple_db/item.rb +93 -0
  487. data/lib/aws/simple_db/item_collection.rb +654 -0
  488. data/lib/aws/simple_db/item_data.rb +73 -0
  489. data/lib/aws/simple_db/put_attributes.rb +60 -0
  490. data/lib/aws/simple_email_service.rb +443 -0
  491. data/lib/aws/simple_email_service/client.rb +37 -0
  492. data/lib/aws/simple_email_service/config.rb +18 -0
  493. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  494. data/lib/aws/simple_email_service/errors.rb +22 -0
  495. data/lib/aws/simple_email_service/identity.rb +230 -0
  496. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  497. data/lib/aws/simple_email_service/quotas.rb +66 -0
  498. data/lib/aws/simple_workflow.rb +227 -0
  499. data/lib/aws/simple_workflow/activity_task.rb +178 -0
  500. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  501. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  502. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  503. data/lib/aws/simple_workflow/client.rb +69 -0
  504. data/lib/aws/simple_workflow/config.rb +18 -0
  505. data/lib/aws/simple_workflow/count.rb +49 -0
  506. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  507. data/lib/aws/simple_workflow/decision_task_collection.rb +223 -0
  508. data/lib/aws/simple_workflow/domain.rb +122 -0
  509. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  510. data/lib/aws/simple_workflow/errors.rb +20 -0
  511. data/lib/aws/simple_workflow/history_event.rb +276 -0
  512. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  513. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  514. data/lib/aws/simple_workflow/resource.rb +94 -0
  515. data/lib/aws/simple_workflow/type.rb +89 -0
  516. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  517. data/lib/aws/simple_workflow/workflow_execution.rb +384 -0
  518. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  519. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  520. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  521. data/lib/aws/sns.rb +76 -0
  522. data/lib/aws/sns/client.rb +35 -0
  523. data/lib/aws/sns/config.rb +18 -0
  524. data/lib/aws/sns/errors.rb +22 -0
  525. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  526. data/lib/aws/sns/message.rb +204 -0
  527. data/lib/aws/sns/originators/from_auto_scaling.rb +68 -0
  528. data/lib/aws/sns/policy.rb +47 -0
  529. data/lib/aws/sns/subscription.rb +165 -0
  530. data/lib/aws/sns/subscription_collection.rb +78 -0
  531. data/lib/aws/sns/topic.rb +403 -0
  532. data/lib/aws/sns/topic_collection.rb +62 -0
  533. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  534. data/lib/aws/sqs.rb +80 -0
  535. data/lib/aws/sqs/client.rb +53 -0
  536. data/lib/aws/sqs/config.rb +20 -0
  537. data/lib/aws/sqs/errors.rb +125 -0
  538. data/lib/aws/sqs/policy.rb +48 -0
  539. data/lib/aws/sqs/queue.rb +856 -0
  540. data/lib/aws/sqs/queue_collection.rb +186 -0
  541. data/lib/aws/sqs/received_message.rb +190 -0
  542. data/lib/aws/sqs/received_sns_message.rb +116 -0
  543. data/lib/aws/storage_gateway.rb +72 -0
  544. data/lib/aws/storage_gateway/client.rb +42 -0
  545. data/lib/aws/storage_gateway/config.rb +18 -0
  546. data/lib/aws/storage_gateway/errors.rb +22 -0
  547. data/lib/aws/sts.rb +164 -0
  548. data/lib/aws/sts/client.rb +55 -0
  549. data/lib/aws/sts/config.rb +18 -0
  550. data/lib/aws/sts/errors.rb +22 -0
  551. data/lib/aws/sts/federated_session.rb +56 -0
  552. data/lib/aws/sts/policy.rb +30 -0
  553. data/lib/aws/sts/session.rb +48 -0
  554. data/lib/aws/support.rb +29 -0
  555. data/lib/aws/support/client.rb +35 -0
  556. data/lib/aws/support/config.rb +18 -0
  557. data/lib/aws/support/errors.rb +20 -0
  558. data/lib/aws/version.rb +17 -0
  559. data/rails/init.rb +15 -0
  560. metadata +634 -0
@@ -0,0 +1,160 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ class CloudWatch
16
+
17
+ # # MetricAlarmCollection
18
+ #
19
+ # Represents all alarms for a single metric.
20
+ #
21
+ # ## Getting an alarm by name
22
+ #
23
+ # If you know the name of the alarm, you can get a reference using
24
+ # the {#[]} method.
25
+ #
26
+ # metric.alarms['alarm-name']
27
+ #
28
+ # ## Enumerating Alarms
29
+ #
30
+ # You can enumerate all alarms for a metric using each (or any of the
31
+ # methods defined in {Core::Collection}).
32
+ #
33
+ # metric.alarms.each do |alarm|
34
+ # puts alarm.name
35
+ # end
36
+ #
37
+ # ## Filtering Alarms
38
+ #
39
+ # Use one of the filtering methods to reduce the number of alarms
40
+ # returned.
41
+ #
42
+ # metric.alarms.with_unit('Seconds').each {|alarm| ... }
43
+ #
44
+ class MetricAlarmCollection < AlarmCollection
45
+
46
+ include Core::Collection::Simple
47
+
48
+ # @api private
49
+ def initialize metric, options = {}
50
+ @metric = metric
51
+ super(options.merge(:config => metric.config))
52
+ end
53
+
54
+ # @return [Metric]
55
+ attr_reader :metric
56
+
57
+ # @param [String] alarm_name
58
+ # @return [Alarm]
59
+ def [] alarm_name
60
+ options = {}
61
+ options[:namespace] = metric.namespace
62
+ options[:metric_name] = metric.name
63
+ options[:dimensions] = metric.dimensions unless metric.dimensions.empty?
64
+ options[:config] = config
65
+ Alarm.new(alarm_name, options)
66
+ end
67
+
68
+ # Creates an alarm for this metric.
69
+ # @param (see AlarmCollection#create)
70
+ # @option (see MetricAlarm#update)
71
+ # @return (see AlarmCollection#create)
72
+ def create alarm_name, options = {}
73
+ options[:namespace] = metric.namespace
74
+ options[:metric_name] = metric.metric_name
75
+ options[:dimensions] = metric.dimensions unless metric.dimensions.empty?
76
+ super(alarm_name, options)
77
+ end
78
+
79
+ # Returns a new collection that will filter results when enumerated.
80
+ #
81
+ # @example Filtering by a 1 hour period
82
+ #
83
+ # metric.alarms.filter('period', 3600)
84
+ #
85
+ # @example Filtering by statistic
86
+ #
87
+ # my_metric = metrics.filter('statistic', 'maximum')
88
+ #
89
+ # @example Filtering by a unit
90
+ #
91
+ # metrics = metrics.filter('unit', 'Megabits')
92
+ #
93
+ # @param [String,Symbol] name
94
+ # @param [String,Integer] value
95
+ # @return [MetricAlarmCollection]
96
+ def filter name, value
97
+ filters = @filters.merge(name.to_s.to_sym => value)
98
+ MetricAlarmCollection.new(metric, :filters => filters)
99
+ end
100
+
101
+ # Returns a new collection that filters alarms by a period.
102
+ #
103
+ # metric.alarms.with_period(3600).each {|alarm| ... }
104
+ #
105
+ # @param [Integer] period
106
+ # @return [MetricAlarmCollection]
107
+ def with_period period
108
+ filter(:period, period)
109
+ end
110
+
111
+ # Returns a new collection that filters alarms by a statistic.
112
+ #
113
+ # metric.alarms.with_statistic('Average').each {|alarm| ... }
114
+ #
115
+ # @param [String] statistic
116
+ # @return [MetricAlarmCollection]
117
+ def with_statistic statistic
118
+ filter(:statistic, statistic)
119
+ end
120
+
121
+ # Returns a new collection that filters alarms by a unit.
122
+ #
123
+ # metric.alarms.with_unit('Percent').each {|alarm| ... }
124
+ #
125
+ # @param [String] unit
126
+ # @return [MetricAlarmCollection]
127
+ def with_unit unit
128
+ filter(:unit, unit)
129
+ end
130
+
131
+ protected
132
+
133
+ def _each_item options = {}, &block
134
+
135
+ options = @filters.merge(options)
136
+
137
+ options[:namespace] = metric.namespace
138
+ options[:metric_name] = metric.metric_name
139
+ options[:dimensions] = metric.dimensions unless metric.dimensions.empty?
140
+
141
+ resp = client.describe_alarms_for_metric(options)
142
+ resp.data[:metric_alarms].each do |details|
143
+
144
+ alarm = Alarm.new_from(
145
+ :describe_alarms_for_metric,
146
+ details,
147
+ details[:alarm_name],
148
+ :config => config)
149
+
150
+ yield(alarm)
151
+
152
+ end
153
+
154
+ resp.data[:next_token]
155
+
156
+ end
157
+
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,129 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ class CloudWatch
16
+ class MetricCollection
17
+
18
+ include Core::Collection::WithNextToken
19
+
20
+ # @api private
21
+ def initialize options = {}
22
+ @filters = options[:filters] || {}
23
+ super
24
+ end
25
+
26
+ # Returns a new collection that will filter results when enumerated.
27
+ #
28
+ # @example Filtering by a namespace
29
+ #
30
+ # traffic_metrics = metrics.filter('namespace', 'traffic')
31
+ #
32
+ # @example Filtering by a metric name
33
+ #
34
+ # my_metric = metrics.filter('metric_name', 'my-metric').first
35
+ #
36
+ # @example Filtering by one or more dimensions
37
+ #
38
+ # metrics = metrics.filter('dimensions', [
39
+ # { :name => 'n1', :value => 'v1' },
40
+ # { :name => 'n2', :value => 'v2' },
41
+ # { :name => 'n3', :value => 'v3' },
42
+ # ])
43
+ #
44
+ # @param [String,Symbol] name
45
+ # @param [String,Array<String>] value
46
+ # @return [MetricCollection]
47
+ def filter name, value
48
+ filters = @filters.merge(name.to_s.to_sym => value)
49
+ MetricCollection.new(:filters => filters, :config => config)
50
+ end
51
+
52
+ # @param [String] namespace
53
+ # @return [MetricCollection]
54
+ def with_namespace namespace
55
+ filter(:namespace, namespace)
56
+ end
57
+
58
+ # @param [String] name
59
+ # @return [MetricCollection]
60
+ def with_metric_name name
61
+ filter(:metric_name, name)
62
+ end
63
+
64
+ # Returns a collection filtered by the given dimension:
65
+ #
66
+ # metric = metrics.with_dimension('name', 'value').first
67
+ #
68
+ # You can chain calls to #with_dimension. Additional dimensions are
69
+ # added.
70
+ #
71
+ # metrics = metrics.
72
+ # with_dimension('d1', 'v1').
73
+ # with_dimension('d2', 'v2').
74
+ # with_dimension('d3', 'v3')
75
+ #
76
+ # metrics.each{|metric|} # filtered by all three dimensions
77
+ #
78
+ # @param [String] name
79
+ # @param [String] value
80
+ # @return [MetricCollection]
81
+ def with_dimension name, value
82
+ with_dimensions([{ :name => name, :value => value }])
83
+ end
84
+
85
+ # Returns a collection filtered by the given dimensions.
86
+ #
87
+ # metrics.with_dimensions([
88
+ # { :name => 'd1', :value => 'v1' },
89
+ # { :name => 'd2', :value => 'v2' },
90
+ # { :name => 'd3', :value => 'v3' },
91
+ # ]).each do |metric|
92
+ # # ...
93
+ # end
94
+ #
95
+ # Multiple calls to #with_dimensions will add to previous dimensions.
96
+ # @param [Array<Hash>] dimensions An array of dimensions. Each dimension
97
+ # should be a Hash with a `:name` and `:value`.
98
+ # @return [MetricCollection]
99
+ def with_dimensions *dimensions
100
+ filter(:dimensions, (@filters[:dimensions] || []) + dimensions.flatten )
101
+ end
102
+
103
+ protected
104
+
105
+ def _each_item next_token, options = {}, &block
106
+
107
+ options = @filters.merge(options)
108
+ options[:next_token] = next_token if next_token
109
+
110
+ resp = client.list_metrics(options)
111
+ resp.data[:metrics].each do |details|
112
+
113
+ metric = Metric.new_from(
114
+ :list_metrics, details,
115
+ details[:namespace],
116
+ details[:metric_name],
117
+ details.merge(:config => config))
118
+
119
+ yield(metric)
120
+
121
+ end
122
+
123
+ resp.data[:next_token]
124
+
125
+ end
126
+
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,69 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ class CloudWatch
16
+
17
+ # Statistics for a metric.
18
+ #
19
+ # This class is an enumerable collection of data points.
20
+ #
21
+ # ## Enumerating Statistics
22
+ #
23
+ # metric = CloudWatch::Metric.new('my/namepace', 'metric-name')
24
+ #
25
+ # stats = metric.statistics(
26
+ # :start_time => Time.now - 3600,
27
+ # :end_time => Time.now,
28
+ # :statistics => ['Average'])
29
+ #
30
+ # stats.label #=> 'some-label'
31
+ # stats.each do |datapoint|
32
+ # # datapoint is a hash
33
+ # end
34
+ #
35
+ # @see Core::Collection
36
+ #
37
+ class MetricStatistics
38
+
39
+ include Core::Collection::Simple
40
+
41
+ # @param [Metric] metric
42
+ # @param [String] label
43
+ # @param [Array<Hash>] datapoints
44
+ def initialize metric, label, datapoints
45
+ @metric = metric
46
+ @label = label
47
+ @datapoints = datapoints
48
+ end
49
+
50
+ # @return [Metric]
51
+ attr_reader :metric
52
+
53
+ # @return [String]
54
+ attr_reader :label
55
+
56
+ # @return [Array<Hash>]
57
+ attr_reader :datapoints
58
+
59
+ protected
60
+
61
+ def _each_item options = {}
62
+ datapoints.each do |point|
63
+ yield(point)
64
+ end
65
+ end
66
+
67
+ end
68
+ end
69
+ end
data/lib/aws/core.rb ADDED
@@ -0,0 +1,716 @@
1
+ # Copyright 2011-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'set'
15
+ require 'securerandom'
16
+
17
+ # AWS is the root module for all of the Amazon Web Services. It is also
18
+ # where you can configure you access to AWS.
19
+ #
20
+ # # Configuration
21
+ #
22
+ # Call {AWS.config} with a hash of options to configure your
23
+ # access to the Amazon Web Services.
24
+ #
25
+ # At a minimum you need to set your access credentials. See {AWS.config}
26
+ # for additional configuration options.
27
+ #
28
+ # AWS.config(
29
+ # :access_key_id => 'ACCESS_KEY_ID',
30
+ # :secret_access_key => 'SECRET_ACCESS_KEY',
31
+ # :region => 'us-west-2')
32
+ #
33
+ module AWS
34
+
35
+ # @api private
36
+ class SvcDetails
37
+ def initialize class_name, options
38
+ @class_name = class_name
39
+ @full_name = options[:full_name]
40
+ @method_name = options[:method_name]
41
+ @method_alias = options[:method_alias]
42
+ @old_name = @method_alias || @method_name
43
+ end
44
+ attr_reader :class_name, :full_name, :method_name, :method_alias, :old_name
45
+ end
46
+
47
+ # @api private
48
+ SERVICES = [
49
+ SvcDetails.new("CloudFront",
50
+ :full_name => "Amazon CloudFront",
51
+ :method_name => :cloud_front),
52
+ SvcDetails.new("CloudSearch",
53
+ :full_name => "Amazon CloudSearch",
54
+ :method_name => :cloud_search),
55
+ SvcDetails.new("CloudTrail",
56
+ :full_name => "AWS CloudTrail",
57
+ :method_name => :cloud_trail),
58
+ SvcDetails.new("CloudWatch",
59
+ :full_name => "Amazon CloudWatch",
60
+ :method_name => :cloud_watch),
61
+ SvcDetails.new("DynamoDB",
62
+ :full_name => "Amazon DynamoDB",
63
+ :method_name => :dynamo_db),
64
+ SvcDetails.new("EC2",
65
+ :full_name => "Amazon Elastic Compute Cloud",
66
+ :method_name => :ec2),
67
+ SvcDetails.new("EMR",
68
+ :full_name => "Amazon Elastic MapReduce",
69
+ :method_name => :emr),
70
+ SvcDetails.new("ElastiCache",
71
+ :full_name => "Amazon ElastiCache",
72
+ :method_name => :elasticache),
73
+ SvcDetails.new("Glacier",
74
+ :full_name => "Amazon Glacier",
75
+ :method_name => :glacier),
76
+ SvcDetails.new("RDS",
77
+ :full_name => "Amazon Relational Database Service (Beta)",
78
+ :method_name => :rds),
79
+ SvcDetails.new("Route53",
80
+ :full_name => "Amazon Route 53",
81
+ :method_name => :route_53),
82
+ SvcDetails.new("SimpleEmailService",
83
+ :full_name => "Amazon Simple E-mail Service",
84
+ :method_name => :ses,
85
+ :method_alias => :simple_email_service),
86
+ SvcDetails.new("SNS",
87
+ :full_name => "Amazon Simple Notifications Service",
88
+ :method_name => :sns),
89
+ SvcDetails.new("SQS",
90
+ :full_name => "Amazon Simple Queue Service",
91
+ :method_name => :sqs),
92
+ SvcDetails.new("SimpleWorkflow",
93
+ :full_name => "Amazon Simple Workflow Service",
94
+ :method_name => :swf,
95
+ :method_alias => :simple_workflow),
96
+ SvcDetails.new("SimpleDB",
97
+ :full_name => "Amazon SimpleDB",
98
+ :method_name => :simple_db),
99
+ SvcDetails.new("AutoScaling",
100
+ :full_name => "Auto Scaling",
101
+ :method_name => :auto_scaling),
102
+ SvcDetails.new("CloudFormation",
103
+ :full_name => "AWS CloudFormation",
104
+ :method_name => :cloud_formation),
105
+ SvcDetails.new("DataPipeline",
106
+ :full_name => "AWS Data Pipeline",
107
+ :method_name => :data_pipeline),
108
+ SvcDetails.new("DirectConnect",
109
+ :full_name => "AWS Direct Connect",
110
+ :method_name => :direct_connect),
111
+ SvcDetails.new("ElasticBeanstalk",
112
+ :full_name => "AWS Elastic Beanstalk",
113
+ :method_name => :elastic_beanstalk),
114
+ SvcDetails.new("IAM",
115
+ :full_name => "AWS Identity and Access Management",
116
+ :method_name => :iam),
117
+ SvcDetails.new("ImportExport",
118
+ :full_name => "AWS Import/Export",
119
+ :method_name => :import_export),
120
+ SvcDetails.new("Kinesis",
121
+ :full_name => "Amazon Kinesis",
122
+ :method_name => :kinesis),
123
+ SvcDetails.new("OpsWorks",
124
+ :full_name => "AWS OpsWorks",
125
+ :method_name => :ops_works),
126
+ SvcDetails.new("STS",
127
+ :full_name => "AWS Security Token Service",
128
+ :method_name => :sts),
129
+ SvcDetails.new("StorageGateway",
130
+ :full_name => "AWS Storage Gateway",
131
+ :method_name => :storage_gateway),
132
+ SvcDetails.new("Support",
133
+ :full_name => "AWS Support",
134
+ :method_name => :support),
135
+ SvcDetails.new("ELB",
136
+ :full_name => "Elastic Load Balancing",
137
+ :method_name => :elb),
138
+ SvcDetails.new("ElasticTranscoder",
139
+ :full_name => "Amazon Elastic Transcoder",
140
+ :method_name => :elastic_transcoder),
141
+ SvcDetails.new("Redshift",
142
+ :full_name => "Amazon Redshift",
143
+ :method_name => :redshift),
144
+ SvcDetails.new("S3",
145
+ :full_name => "Amazon Simple Storage Service",
146
+ :method_name => :s3)
147
+ ].inject({}) { |h,svc| h[svc.class_name] = svc; h }
148
+
149
+ # @api private
150
+ ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
151
+
152
+ SRC = ROOT + '/lib/aws'
153
+
154
+ autoload :Errors, "#{SRC}/errors"
155
+ autoload :Record, "#{SRC}/record"
156
+ autoload :VERSION, "#{SRC}/version"
157
+
158
+ module Core
159
+
160
+ autoload :AsyncHandle, "#{SRC}/core/async_handle"
161
+ autoload :Cacheable, "#{SRC}/core/cacheable"
162
+ autoload :Client, "#{SRC}/core/client"
163
+ autoload :Collection, "#{SRC}/core/collection"
164
+ autoload :Configuration, "#{SRC}/core/configuration"
165
+ autoload :CredentialProviders, "#{SRC}/core/credential_providers"
166
+ autoload :Data, "#{SRC}/core/data"
167
+ autoload :Deprecations, "#{SRC}/core/deprecations"
168
+ autoload :Endpoints, "#{SRC}/core/endpoints"
169
+ autoload :IndifferentHash, "#{SRC}/core/indifferent_hash"
170
+ autoload :Inflection, "#{SRC}/core/inflection"
171
+ autoload :IniParser, "#{SRC}/core/ini_parser"
172
+ autoload :JSONParser, "#{SRC}/core/json_parser"
173
+
174
+ autoload :JSONClient, "#{SRC}/core/json_client"
175
+ autoload :JSONRequestBuilder, "#{SRC}/core/json_request_builder"
176
+ autoload :JSONResponseParser, "#{SRC}/core/json_response_parser"
177
+
178
+ autoload :LazyErrorClasses, "#{SRC}/core/lazy_error_classes"
179
+ autoload :LogFormatter, "#{SRC}/core/log_formatter"
180
+ autoload :MetaUtils, "#{SRC}/core/meta_utils"
181
+ autoload :ManagedFile, "#{SRC}/core/managed_file"
182
+ autoload :Model, "#{SRC}/core/model"
183
+ autoload :Naming, "#{SRC}/core/naming"
184
+ autoload :OptionGrammar, "#{SRC}/core/option_grammar"
185
+ autoload :PageResult, "#{SRC}/core/page_result"
186
+ autoload :Policy, "#{SRC}/core/policy"
187
+
188
+ autoload :QueryClient, "#{SRC}/core/query_client"
189
+ autoload :QueryRequestBuilder, "#{SRC}/core/query_request_builder"
190
+ autoload :QueryResponseParser, "#{SRC}/core/query_response_parser"
191
+
192
+ autoload :Region, "#{SRC}/core/region"
193
+ autoload :RegionCollection, "#{SRC}/core/region_collection"
194
+
195
+ autoload :Resource, "#{SRC}/core/resource"
196
+ autoload :ResourceCache, "#{SRC}/core/resource_cache"
197
+ autoload :Response, "#{SRC}/core/response"
198
+ autoload :ResponseCache, "#{SRC}/core/response_cache"
199
+
200
+ autoload :RESTClient, "#{SRC}/core/rest_xml_client"
201
+ autoload :RESTJSONClient, "#{SRC}/core/rest_json_client"
202
+ autoload :RESTXMLClient, "#{SRC}/core/rest_xml_client"
203
+ autoload :RESTRequestBuilder, "#{SRC}/core/rest_request_builder"
204
+ autoload :RESTResponseParser, "#{SRC}/core/rest_response_parser"
205
+
206
+ autoload :ServiceInterface, "#{SRC}/core/service_interface"
207
+ autoload :UriEscape, "#{SRC}/core/uri_escape"
208
+
209
+ module Options
210
+ autoload :JSONSerializer, "#{SRC}/core/options/json_serializer"
211
+ autoload :XMLSerializer, "#{SRC}/core/options/xml_serializer"
212
+ autoload :Validator, "#{SRC}/core/options/validator"
213
+ end
214
+
215
+ module Signers
216
+ autoload :Base, "#{SRC}/core/signers/base"
217
+ autoload :CloudFront, "#{SRC}/core/signers/cloud_front"
218
+ autoload :S3, "#{SRC}/core/signers/s3"
219
+ autoload :Version2, "#{SRC}/core/signers/version_2"
220
+ autoload :Version3, "#{SRC}/core/signers/version_3"
221
+ autoload :Version3Https, "#{SRC}/core/signers/version_3_https"
222
+ autoload :Version4, "#{SRC}/core/signers/version_4"
223
+ end
224
+
225
+ module XML
226
+
227
+ autoload :Parser, "#{SRC}/core/xml/parser"
228
+ autoload :Grammar, "#{SRC}/core/xml/grammar"
229
+ autoload :Stub, "#{SRC}/core/xml/stub"
230
+ autoload :Frame, "#{SRC}/core/xml/frame"
231
+ autoload :RootFrame, "#{SRC}/core/xml/root_frame"
232
+ autoload :FrameStack, "#{SRC}/core/xml/frame_stack"
233
+
234
+ module SaxHandlers
235
+ autoload :Nokogiri, "#{SRC}/core/xml/sax_handlers/nokogiri"
236
+ autoload :REXML, "#{SRC}/core/xml/sax_handlers/rexml"
237
+ end
238
+
239
+ end
240
+
241
+ module Http
242
+ autoload :ConnectionPool, "#{SRC}/core/http/connection_pool"
243
+ autoload :Handler, "#{SRC}/core/http/handler"
244
+ autoload :NetHttpHandler, "#{SRC}/core/http/net_http_handler"
245
+ autoload :Request, "#{SRC}/core/http/request"
246
+ autoload :Response, "#{SRC}/core/http/response"
247
+ end
248
+
249
+ end
250
+
251
+ class << self
252
+
253
+ SERVICES.values.each do |svc|
254
+ define_method(svc.method_name) do |*args|
255
+ AWS.const_get(svc.class_name).new(args.first || {})
256
+ end
257
+ alias_method(svc.method_alias, svc.method_name) if svc.method_alias
258
+ end
259
+
260
+ # @api private
261
+ @@config = nil
262
+
263
+ # The global configuration for AWS. Generally you set your preferred
264
+ # configuration operations once after loading the aws-sdk gem.
265
+ #
266
+ # AWS.config({
267
+ # :access_key_id => 'ACCESS_KEY_ID',
268
+ # :secret_access_key => 'SECRET_ACCESS_KEY',
269
+ # :region => 'us-west-2',
270
+ # })
271
+ #
272
+ # When using AWS classes they will always default to use configuration
273
+ # values defined in {AWS.config}.
274
+ #
275
+ # AWS.config(:max_retries => 2)
276
+ #
277
+ # sqs = AWS::SQS.new
278
+ # sqs.config.max_retries #=> 2
279
+ #
280
+ # If you want to change a configuration value for a single instance you
281
+ # pass the new configuration value to that object's initializer:
282
+ #
283
+ # AWS::SQS.new(:max_retries => 0)
284
+ #
285
+ # @note Changing the global configuration does not affect objects
286
+ # that have already been constructed.
287
+ #
288
+ # @param [Hash] options
289
+ #
290
+ # @option options [String] :access_key_id AWS access key id
291
+ # credential.
292
+ #
293
+ # @option options [String] :secret_access_key AWS secret access
294
+ # key credential.
295
+ #
296
+ # @option options [String,nil] :session_token AWS secret token
297
+ # credential.
298
+ #
299
+ # @option options [String] :region ('us-east-1') The default AWS region.
300
+ #
301
+ # @option options [Boolean] :dynamo_db_big_decimals (true) When `true`,
302
+ # {DynamoDB} will convert number values returned by {DynamoDB::Client}
303
+ # from strings to BigDecimal objects. If you set this to `false`,
304
+ # they will be converted from strings into floats (with a potential
305
+ # loss of precision).
306
+ #
307
+ # @option options [Boolean] :dynamo_db_retry_throughput_errors (true) When
308
+ # true, AWS::DynamoDB::Errors::ProvisionedThroughputExceededException
309
+ # errors will be retried.
310
+ #
311
+ # @option options [Float] :http_continue_timeout (1) The number of
312
+ # seconds to wait for a "100-continue" response before sending the request
313
+ # payload. **This option has no effect unless the `:http_continue_threshold`
314
+ # is configured to a positive integer and the payload exeedes the
315
+ # threshold.** NOTE: currently there is a bug in Net::HTTP.
316
+ # You must call `AWS.patch_net_http_100_continue!` for this feature to work.
317
+ # Not supported in Ruby < 1.9.
318
+ #
319
+ # @option options [Integer,false] :http_continue_threshold (false) If a request
320
+ # body exceedes the `:http_continue_threshold` size (in bytes), then
321
+ # an "Expect" header will be added to the request with the value of
322
+ # "100-continue". This will cause the SDK to wait up to
323
+ # `:http_continue_timeout` seconds for a 100 Contiue HTTP response
324
+ # before sending the request payload. By default, this feature
325
+ # is disbled. Set this option to a positive number of bytes
326
+ # to enable 100 continues. NOTE: currently there is a bug in Net::HTTP.
327
+ # You must call `AWS.patch_net_http_100_continue!` for this feature to work.
328
+ # Not supported in Ruby < 1.9.
329
+ #
330
+ # @option options [Object] :http_handler (AWS::Core::Http::NetHttpHandler)
331
+ # The http handler that sends requests to AWS.
332
+ #
333
+ # @option options [Integer] :http_idle_timeout (60) The number of seconds
334
+ # a persistent connection is allowed to sit idle before it should no
335
+ # longer be used.
336
+ #
337
+ # @option options [Integer] :http_open_timeout (15) The number of seconds
338
+ # before the `:http_handler` should timeout while trying to open a new
339
+ # HTTP session.
340
+ #
341
+ # @option options [Integer] :http_read_timeout (60) The number of seconds
342
+ # before the `:http_handler` should timeout while waiting for a HTTP
343
+ # response.
344
+ #
345
+ # @option options [Boolean] :http_wire_trace (false) When `true`, the
346
+ # http handler will log all wire traces to the `:logger`. If a
347
+ # `:logger` is not configured, then wire traces will be sent to
348
+ # standard out.
349
+ #
350
+ # @option options [Logger,nil] :logger (nil) A logger to send
351
+ # log messages to. Here is an example that logs to standard out.
352
+ #
353
+ # require 'logger'
354
+ # AWS.config(:logger => Logger.new($stdout))
355
+ #
356
+ # @option options [Symbol] :log_level (:info) The level log messages are
357
+ # sent to the logger with (e.g. `:notice`, `:info`, `:warn`,
358
+ # `:debug`, etc).
359
+ #
360
+ # @option options [Object] :log_formatter The log formatter is responsible
361
+ # for building log messages from responses. You can quickly change
362
+ # log formats by providing a pre-configured log formatter.
363
+ #
364
+ # AWS.config(:log_formatter => AWS::Core::LogFormatter.colored)
365
+ #
366
+ # Here is a list of pre-configured log formatters:
367
+ #
368
+ # * `AWS::Core::LogFormatter.default`
369
+ # * `AWS::Core::LogFormatter.short`
370
+ # * `AWS::Core::LogFormatter.debug`
371
+ # * `AWS::Core::LogFormatter.colored`
372
+ #
373
+ # You can also create an instance of AWS::Core::LogFormatter
374
+ # with a custom log message pattern. See {Core::LogFormatter} for
375
+ # a complete list of pattern substitutions.
376
+ #
377
+ # pattern = "[AWS :operation :duration] :error_message"
378
+ # AWS.config(:log_formatter => AWS::Core::LogFormatter.new(pattern))
379
+ #
380
+ # Lastly you can pass any object that responds to `#format` accepting
381
+ # and instance of {Core::Response} and returns a string.
382
+ #
383
+ # @option options [Integer] :max_retries (3) The maximum number of times
384
+ # service errors (500) and throttling errors should be retried. There is
385
+ # an exponential backoff in between retries, so the more retries the
386
+ # longer it can take to fail.
387
+ #
388
+ # @option options [String, URI, nil] :proxy_uri (nil) The URI of the proxy
389
+ # to send service requests through. You can pass a URI object or a
390
+ # URI string:
391
+ #
392
+ # AWS.config(:proxy_uri => 'https://user:password@my.proxy:443/path?query')
393
+ #
394
+ # @option options [Boolean] :s3_force_path_style (false) When
395
+ # `true`, requests will always use path style. This can be useful
396
+ # for testing environments.
397
+ #
398
+ # @option options [Integer] :s3_multipart_max_parts (10000) The maximum
399
+ # number of parts to split a file into when uploading in parts to S3.
400
+ #
401
+ # @option options [Integer] :s3_multipart_threshold (16777216) When
402
+ # uploading data to S3, if the number of bytes to send exceeds
403
+ # `:s3_multipart_threshold` then a multi part session is automatically
404
+ # started and the data is sent up in chunks. The size of each part
405
+ # is specified by `:s3_multipart_min_part_size`. Defaults to
406
+ # 16777216 (16MB).
407
+ #
408
+ # @option options [Integer] :s3_multipart_min_part_size (5242880) The
409
+ # absolute minimum size (in bytes) each S3 multipart segment should be.
410
+ # Defaults to 5242880 (5MB).
411
+ #
412
+ # @option options [Symbol] :s3_server_side_encryption (nil) The
413
+ # algorithm to use when encrypting object data on the server
414
+ # side. The only valid value is `:aes256`, which specifies that
415
+ # the object should be stored using the AES encryption algorithm
416
+ # with 256 bit keys. Defaults to `nil`, meaning server side
417
+ # encryption is not used unless specified on each individual
418
+ # call to upload an object. This option controls the default
419
+ # behavior for the following methods:
420
+ #
421
+ # * {S3::S3Object#write}
422
+ # * {S3::S3Object#multipart_upload}
423
+ # * {S3::S3Object#copy_from} and {S3::S3Object#copy_to}
424
+ # * {S3::S3Object#presigned_post}
425
+ # * {S3::Bucket#presigned_post}
426
+ #
427
+ # @option options [OpenSSL::PKey::RSA, String] :s3_encryption_key (nil)
428
+ # If this is set, AWS::S3::S3Object #read and #write methods will always
429
+ # perform client-side encryption with this key. The key can be overridden
430
+ # at runtime by using the :encryption_key option. A value of nil
431
+ # means that client-side encryption will not be used.
432
+ #
433
+ # @option options [Symbol] :s3_encryption_materials_location (:metadata)
434
+ # When set to `:instruction_file`, AWS::S3::S3Object will store
435
+ # encryption materials in a separate object, instead of the object
436
+ # metadata.
437
+ #
438
+ # @option options [Boolean] :simple_db_consistent_reads (false) Determines
439
+ # if all SimpleDB read requests should be done consistently.
440
+ # Consistent reads are slower, but reflect all changes to SDB.
441
+ #
442
+ # @option options [CredentialProviders::Provider] :credential_provider (AWS::Core::CredentialProviders::DefaultProvider.new)
443
+ # Returns the credential provider. The default credential provider
444
+ # attempts to check for statically assigned credentials, ENV credentials
445
+ # and credentials in the metadata service of EC2.
446
+ #
447
+ # @option options [String] :ssl_ca_file The path to a CA cert bundle in
448
+ # PEM format.
449
+ #
450
+ # If `:ssl_verify_peer` is `true` (the default) this bundle will be
451
+ # used to validate the server certificate in each HTTPS request.
452
+ # The AWS SDK for Ruby ships with a CA cert bundle, which is the
453
+ # default value for this option.
454
+ #
455
+ # @option options [String] :ssl_ca_path (nil)
456
+ # The path the a CA cert directory.
457
+ #
458
+ # @option options [Boolean] :ssl_verify_peer (true) When `true`
459
+ # the HTTP handler validate server certificates for HTTPS requests.
460
+ #
461
+ # This option should only be disabled for diagnostic purposes;
462
+ # leaving this option set to `false` exposes your application to
463
+ # man-in-the-middle attacks and can pose a serious security
464
+ # risk.
465
+ #
466
+ # @option options [Boolean] :stub_requests (false) When `true` requests
467
+ # are not sent to AWS, instead empty responses are generated and
468
+ # returned to each service request.
469
+ #
470
+ # @option options [Boolean] :use_ssl (true) When `true`, all requests
471
+ # to AWS are sent using HTTPS instead vanilla HTTP.
472
+ #
473
+ # @option options [String] :user_agent_prefix (nil) A string prefix to
474
+ # append to all requests against AWS services. This should be set
475
+ # for clients and applications built ontop of the aws-sdk gem.
476
+ #
477
+ # @option options [Boolean] :verify_response_body_content_length (true)
478
+ # When `true` all HTTP handlers will perform a check to ensure
479
+ # that response bodies match the content-length specified in the
480
+ # response header, if present. Note that some HTTP handlers will
481
+ # always do this whether or not this value is true.
482
+ #
483
+ # @option options [Boolean] :sqs_verify_checksums (true)
484
+ # When `true` all SQS operations will check body content against
485
+ # MD5 checksums, raising an exception if there is a mismatch.
486
+ #
487
+ # @return [Core::Configuration] Returns the new configuration.
488
+ #
489
+ def config options = {}
490
+ @@config ||= Core::Configuration.new
491
+ @@config = @@config.with(options) unless options.empty?
492
+ @@config
493
+ end
494
+
495
+ # Returns a collection that represents public (non-gov-cloud) AWS
496
+ # regions. You can use this collection to get a specific region by name
497
+ # or to enumerate all regions.
498
+ #
499
+ # When enumerating regions, a single HTTP request is made to get a current
500
+ # list of regions (this is cached). When getting a region by name
501
+ # no requests are made.
502
+ #
503
+ # @example Getting a region by name
504
+ #
505
+ # region = AWS.regions['us-west-1']
506
+ # region.dynamo_db.tables.map(&:name)
507
+ #
508
+ # @example Enumerating all regions
509
+ #
510
+ # AWS.regions.each do |region|
511
+ # puts "EC2 Instances in #{region.name}:"
512
+ # puts region.ec2.instances.map(&:id)
513
+ # end
514
+ #
515
+ # @return [Core::RegionCollection]
516
+ def regions
517
+ Core::RegionCollection.new
518
+ end
519
+
520
+ # @note Memoization is currently only supported for APIs which
521
+ # inherit from the "Resource" class; other APIs are unaffected
522
+ # by the status of memoization.
523
+ #
524
+ # Resets memoizing service requests made in the current thread.
525
+ # See {memoize} for a full discussion of the memoization feature.
526
+ # This has no effect if memoization is already enabled.
527
+ def reset_memoization
528
+ Thread.current[:aws_memoization] = {}
529
+ end
530
+
531
+ # @note Memoization is currently only supported for APIs which
532
+ # inherit from the "Resource" class; other APIs are unaffected
533
+ # by the status of memoization.
534
+ #
535
+ # Starts memoizing service requests made in the current thread.
536
+ # See {memoize} for a full discussion of the memoization feature.
537
+ # This has no effect if memoization is already enabled.
538
+ def start_memoizing
539
+ Thread.current[:aws_memoization] ||= {}
540
+ nil
541
+ end
542
+
543
+ # @note Memoization is currently only supported for APIs which
544
+ # inherit from the "Resource" class; other APIs are unaffected
545
+ # by the status of memoization.
546
+ #
547
+ # Stops memoizing service requests made in the current thread.
548
+ # See {memoize} for a full discussion of the memoization feature.
549
+ # This has no effect if memoization is already disabled.
550
+ def stop_memoizing
551
+ Thread.current[:aws_memoization] = nil
552
+ end
553
+
554
+ # @note Memoization is currently only supported for APIs which
555
+ # inherit from the "Resource" class; other APIs are unaffected
556
+ # by the status of memoization.
557
+ #
558
+ # @return [Boolean] True if memoization is enabled for the current
559
+ # thread. See {memoize} for a full discussion of the
560
+ # memoization feature.
561
+ def memoizing?
562
+ !Thread.current[:aws_memoization].nil?
563
+ end
564
+
565
+ # @note Memoization is currently only supported for APIs which
566
+ # inherit from the "Resource" class; other APIs are unaffected
567
+ # by the status of memoization.
568
+ #
569
+ # Enables memoization for the current thread, within a block.
570
+ # Memoization lets you avoid making multiple requests for the same
571
+ # data by reusing the responses which have already been received.
572
+ # For example, consider the following code to get the most
573
+ # recently launched EC2 instance:
574
+ #
575
+ # latest = ec2.instances.sort_by(&:launch_time).last
576
+ #
577
+ # The above code would make N+1 requests (where N is the number of
578
+ # instances in the account); iterating the collection of instances
579
+ # is one request, and `Enumerable#sort_by` calls
580
+ # {AWS::EC2::Instance#launch_time} for each instance, causing
581
+ # another request per instance. We can rewrite the code as
582
+ # follows to make only one request:
583
+ #
584
+ # latest = AWS.memoize do
585
+ # ec2.instances.sort_by(&:launch_time).last
586
+ # end
587
+ #
588
+ # Iterating the collection still causes a request, but each
589
+ # subsequent call to {AWS::EC2::Instance#launch_time} uses the
590
+ # results from that first request rather than making a new request
591
+ # for the same data.
592
+ #
593
+ # While memoization is enabled, every response that is received
594
+ # from the service is retained in memory. Therefore you should
595
+ # use memoization only for short-lived blocks of code that make
596
+ # relatively small numbers of requests. The cached responses are
597
+ # used in two ways while memoization is enabled:
598
+ #
599
+ # * Before making a request, the SDK checks the cache for a
600
+ # response to a request with the same signature (credentials,
601
+ # service endpoint, operation name, and parameters). If such a
602
+ # response is found, it is used instead of making a new
603
+ # request.
604
+ #
605
+ # * Before retrieving data for an attribute of a resource
606
+ # (e.g. {AWS::EC2::Instance#launch_time}), the SDK attempts to
607
+ # find a cached response that contains the requested data. If
608
+ # such a response is found, the cached data is returned instead
609
+ # of making a new request.
610
+ #
611
+ # When memoization is disabled, all previously cached responses
612
+ # are discarded.
613
+ def memoize
614
+ return yield if memoizing?
615
+ begin
616
+ start_memoizing
617
+ yield if block_given?
618
+ ensure
619
+ stop_memoizing
620
+ end
621
+ end
622
+
623
+ # @api private
624
+ def resource_cache
625
+ if memoizing?
626
+ Thread.current[:aws_memoization][:resource_cache] ||=
627
+ Core::ResourceCache.new
628
+ end
629
+ end
630
+
631
+ # @api private
632
+ def response_cache
633
+ if memoizing?
634
+ Thread.current[:aws_memoization][:response_cache] ||=
635
+ Core::ResponseCache.new
636
+ end
637
+ end
638
+
639
+ # Causes all requests to return empty responses without making any
640
+ # requests against the live services. This does not attempt to
641
+ # mock the services.
642
+ # @return [nil]
643
+ def stub!
644
+ config(:stub_requests => true)
645
+ nil
646
+ end
647
+
648
+ # Eagerly loads all AWS classes/modules registered with autoload.
649
+ # @return [void]
650
+ def eager_autoload! klass_or_module = AWS, visited = Set.new
651
+ klass_or_module.constants.each do |const_name|
652
+ path = klass_or_module.autoload?(const_name)
653
+ require(path) if path
654
+ const = klass_or_module.const_get(const_name)
655
+ if const.is_a?(Module)
656
+ unless visited.include?(const)
657
+ visited << const
658
+ eager_autoload!(const, visited)
659
+ end
660
+ end
661
+ end
662
+ visited
663
+ end
664
+
665
+ # Patches Net::HTTP, fixing a bug in how it handles non 100-continue
666
+ # responses while waiting for a 100-continue.
667
+ def patch_net_http_100_continue!
668
+ require 'aws/core/http/patch'
669
+ AWS::Core::Http.patch_net_http_100_continue!
670
+ nil
671
+ end
672
+
673
+ # @api private
674
+ # @return [Hash]
675
+ def api_versions
676
+ @versions ||= begin
677
+ # get a list of support services/apis from disk
678
+ versions = {}
679
+ pattern = File.join(File.dirname(__FILE__), 'api_config', '*.yml')
680
+ Dir.glob(pattern).each do |path|
681
+ matches = path.match(/(\w+)-(\d{4}-\d{2}-\d{2})/)
682
+ svc = SERVICES[$1].full_name
683
+ versions[svc] ||= []
684
+ versions[svc] << $2
685
+ end
686
+
687
+ # s3 does not have an API configuration, so we have to add it manually
688
+ versions[SERVICES['S3'].full_name] = ['2006-03-01']
689
+
690
+ # sort the services alphabetically
691
+ versions.keys.sort_by(&:downcase).inject({}) do |hash,svc|
692
+ hash[svc] = versions[svc]
693
+ hash
694
+ end
695
+ end
696
+ end
697
+ end
698
+
699
+ SERVICES.values.each do |svc|
700
+ autoload(svc.class_name, "aws/#{svc.old_name}")
701
+ require "aws/#{svc.old_name}/config"
702
+ end
703
+
704
+ end
705
+
706
+ # Backport SecureRandom.uuid for Ruby 1.8
707
+ unless SecureRandom.respond_to?(:uuid)
708
+ module SecureRandom
709
+ def self.uuid
710
+ ary = random_bytes(16).unpack("NnnnnN")
711
+ ary[2] = (ary[2] & 0x0fff) | 0x4000
712
+ ary[3] = (ary[3] & 0x3fff) | 0x8000
713
+ "%08x-%04x-%04x-%04x-%04x%08x" % ary
714
+ end
715
+ end
716
+ end