【问题标题】:How to programmatically download data to AWS EC2 instance?如何以编程方式将数据下载到 AWS EC2 实例?
【发布时间】:2023-03-27 15:36:01
【问题描述】:

我的任务涉及 3 台机器

  • A:我的桌面
  • B:EC2 实例由 A 启动
  • C: 远程 linux 服务器,数据所在,我只有读取权限

任务基本上有3个步骤

  1. A 启动B
  2. 将数据从C 下载到B 到特定位置
  3. 更改B上的部分下载数据

我知道如何使用 awscli 或 boto3 执行 1。如果我手动 ssh 到 EC2 实例,步骤 2 和 3 很容易。问题是如果这个任务需要自动化,我该如何处理登录凭据。

具体来说,我想在EC2实例出生后使用user_data运行shell脚本,但是数据下载使用scp需要密码。然后我可以将 ssh 凭证文件上传到 EC2 实例,但我无法利用 user_data 运行第 2 步和第 3 步的脚本。

所以我目前的解决方案都是来自 shell 脚本

  1. A 启动B
  2. A上传ssh凭证到B
  3. ssh 从AB 附带shell 命令,其中执行任务的步骤2 和3

这个解决方案对我来说真的很难看。在这种情况下有更好的做法吗?

【问题讨论】:

  • 你在 B 上尝试过 ec2-roles 吗?
  • 如果 C 不是 aws 实例,ec2-roles 会起作用吗?

标签: linux shell amazon-web-services amazon-ec2 ssh


【解决方案1】:

有很多方法可以解决您的任务。我不会说任务 1(从 A 启动 B),因为您已经完成了它。

选项 1:使用 EC2 Run command 将命令推送到服务器 B。流程:A -> EC2 Run Command service -> B -> C 无需将凭据(SSH 密钥/密码)推送到服务器 B
选项 2:在 bash shell 文件中定义所有命令,将此 shell 文件推送到 S3。使用服务器 BUser Data 从 S3 下载该文件。流量:A -> S3. B get file from S3. B -> C

使用以上 2 个选项,您无需将任何凭据推送到服务器 B。服务器C 可以是您在BC 之间建立连接以下载任务的任何位置。

【讨论】:

  • 我不明白为什么选项 1 和 2 可以免除我将凭据推送到 B。当BC 获取数据时,需要该凭证。假设 shell 脚本 B 运行有 ssh,选项 1 和 2 如何提供凭据?
  • 很抱歉,我想了解您的凭据是访问C 所必需的。如果是这样,为什么不使用A 访问C 并下载到A,因为A 已经有凭据?然后,将A 复制到B 并执行其他任务
  • 我需要下载非常大的东西,这样传输两次会很浪费。
【解决方案2】:

3 个选项

  1. 将加密/编码密码作为用户数据的一部分传递。 userdata 脚本将首先解密/解码密码并将其用于scp C 中的文件。然后删除 userdata 或以某种方式删除加密/编码的密码
  2. 使用 ssh 密钥代替 ssh 密码。但风险是您必须在用户数据中传递私钥。不是一种安全的方式。
  3. 使用 Ansible 和 ssh 密钥。但是对于一项简单的任务来说工作量太大了。

【讨论】:

    【解决方案3】:

    试试ansible,它可以通过创建playbook来帮助您自动执行此任务

    要创建实例,您可以使用文档示例中的ec2 module

    # Basic provisioning example
    - ec2:
        key_name: mykey
        instance_type: t2.micro
        image: ami-123456
        wait: yes
        group: webserver
        count: 3
        vpc_subnet_id: subnet-29e63245
        assign_public_ip: yes
    

    要下载数据,get_url 模块,例如:

    - name: Download file with check (md5)
      get_url:
        url: http://example.com/path/file.conf
        dest: /etc/foo.conf
        checksum: md5:66dffb5228a211e61d6d7ef4a86f5758
    

    对于modifying files,可以在http://docs.ansible.com/ 中找到多个模块。

    总的来说是一个可以帮助自动化很多事情的工具,但是需要一些时间来获得基础,查看Getting started guide,希望它可以帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2019-11-06
    • 2017-05-22
    • 2014-01-17
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多