Amazon EC2 - 从S3读取数据?

时间:2011-06-30 22:50:18

标签: amazon-s3 amazon-ec2

我有许多存储在input_files的数据文件(我们称之为Amazon S3)。

我想开始大约15个独立的Amazon EC2 linux实例。这些实例应加载input_files(存储在S3中)并单独处理。

我希望所有15个独立的Amazon EC2 linux实例都写入相同的输出文件

完成后,此输出文件将保存在S3

两个问题:

(1) Amazon EC2 linux实例是否可以连接到S3并从中读取数据?

(2)如何安排所有15个独立的Amazon EC2 linux实例写入同一个输出文件?我可以在S3中拥有此文件,并且所有实例都会写入该文件吗?

2 个答案:

答案 0 :(得分:4)

(1)是的。您可以使用S3公共API

从互联网上的任何位置访问S3

(2)您正在描述一个数据库。 S3只是一个文件存储,你不会写入S3上的文件 - 你将文件保存到S3。

也许你应该考虑某种类型的数据库。

答案 1 :(得分:0)

我建议你看看这个: http://docs.aws.amazon.com/IAM/latest/UserGuide/role-usecase-ec2app.html

  

想象一下,您是管理组织的AWS资源的管理员。您组织中的开发人员拥有   在Amazon EC2实例上运行的应用程序。这些应用   需要访问其他AWS资源 - 例如,进行更新   亚马逊S3桶。

     

在Amazon EC2实例上运行的应用程序必须在其AWS上签名   使用AWS凭据的API请求。一种方法是做到这一点   开发人员将他们的AWS凭证传递给Amazon EC2实例,   允许应用程序使用凭据对请求进行签名。

     

但是,当AWS凭据轮换时,开发人员必须更新   每个使用其凭据的Amazon EC2实例。

并了解如何使用python执行此操作: https://groups.google.com/forum/?fromgroups=#!topic/boto-users/RPoFskVw1gc

  

基本程序如下:

     

首先,您必须创建一个代表内容的JSON策略文档   IAM角色应该有权访问的服务和资源。对于   例如,此策略为存储桶“my_bucket”授予所有S3操作。   您可以使用适合您的应用程序的任何策略。   BUCKET_POLICY =“”“{

     

“声明”:[{

"Effect":"Allow",

"Action":["s3:*"],

"Resource":["arn:aws:s3:::my_bucket"]}]}"""
     

接下来,您需要在IAM中创建实例配置文件。

     
    
      
        

导入boto

                 

c = boto.connect_iam()

                 

instance_profile = c.create_instance_profile('myinstanceprofile')

      
    
  
     

获得实例配置文件后,您需要创建角色add   实例配置文件的角色并将策略与策略关联   作用。

     
    
      
        

role = c.create_role('myrole')

                 

c.add_role_to_instance_profile('myinstanceprofile','myrole')

                 

c.put_role_policy('myrole','mypolicy',BUCKET_POLICY)

      
    
  
     

现在,您可以在启动实例时使用该实例配置文件:

     
    
      
        

ec2 = boto.connect_ec2()         ec2.run_instances('ami-xxxxxxx',...,instance_profile_name ='myinstanceprofile')

      
    
  
     

新实例应具有适当的角色和凭据   一旦启动就与之相关联。

有相同的Java,Ruby,...亚马逊网站教程。你可以参考第一个网址看其他教程。