当前位置: 首页 > 知识库问答 >
问题:

在弹性豆茎部署上的ec2微实例上创建交换文件/驱动器

蒲勇
2023-03-14

因此,只要我将应用程序放在比 micro 更大的实例上,我的应用程序就可以很好地安装和部署。

当我在micro上部署composer试图安装时,我得到一个php错误,提示我无法分配足够的内存。所以我做了一些谷歌搜索,似乎你可以在启动/创建实例时创建一个交换文件/磁盘,这里有两个教程一个两个

这些可能会过时,所以第一个问题是这还能做吗?

第二个问题是如何创建.ebextensions文件以在部署时实现这一点?

这是我的尝试,但它的效果并不出所料,因为我对此知之甚少。

commands:
command:dd if=/dev/zero of=/swapfile bs=1M count=3072
command:mkswap /swapfile
command:swapon /swapfile

共有3个答案

田鸿彩
2023-03-14

您可以创建预部署挂钩以通过 eb 扩展来设置交换。在项目根目录中创建一个 .eb 扩展文件夹。在该文件夹中,创建一个包含以下内容的文件 0001_setup_swap.config

commands:
  create-pre-dir:
    command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/pre"
    ignoreErrors: true

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/0001_setup_swap.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash

      SWAPFILE=/var/swapfile
      SWAP_MEGABYTES=2048

      if [ -f $SWAPFILE ]; then
        echo "Swapfile $SWAPFILE found, assuming already setup"
        exit;
      fi

      /bin/dd if=/dev/zero of=$SWAPFILE bs=1M count=$SWAP_MEGABYTES

      /sbin/mkswap $SWAPFILE
      /sbin/swapon $SWAPFILE

      echo 10 | sudo tee /proc/sys/vm/swappiness
      echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf

      /bin/chown root:root $SWAPFILE
      /bin/chmod 600 $SWAPFILE

有关更多信息,请参阅这些:https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-12-04,http://steinn.org/post/elasticbeanstalk-swap/

琴琪
2023-03-14

在机器上运行Composer需要相当多的资源,尤其是RAM。

我了解到,在 EC2 微型实例上使用交换空间会适得其反,因为 a) 交换空间很慢,b) 使用它会计入 IO,而 IO 也必须付费,从而允许在下个月产生意外账单。

部署任何使用Composer的东西的正确方法是在将代码部署到机器上之前安装所有依赖项,然后一次性同步它。这样你就可以独立于实例的有限资源,因为你可以使用一些强大的部署机器(我打赌你的开发机器可以做到这一点)。你还可以防止因为一些必需的库的托管关闭而导致站点损坏(有没有经历过Github停机?),因为你会在部署服务器上检测到这一点,而不是在实时机器上。此外,Composer会缓存下载的任何东西,这也可能超过微实例上的有限资源——或者至少将其用于非生产性的事情。

华泳
2023-03-14

没有尝试创建交换,所以我无法回答你的第一个问题。但是请注意,. eb扩展名文件是一个YAML文件。这意味着空格和语法对于事物的正常工作极其重要……

你的例子的语法有点不对。应该大致如下(参见此处):

commands:
    000_dd:
        command: dd if=/dev/zero of=/swapfile bs=1M count=3072
    001_mkswap:
        command: mkswap /swapfile
    002_swapon:
        command: swapon /swapfile

命令是按字母顺序执行的,因此在它们前面加上数字是一个好主意。

确保您能够登录到EC2实例,并关注/var/log/cfn init。日志文件。这会告诉你发生了什么。还有什么没有按预期工作…;-)

祝你好运

 类似资料:
  • 假设我在Wordpress中创建了一个站点,它运行在Elastic Beanstalk上。现在,在运行的应用程序上,我将创建帖子/页面,上传图像等。也就是说,数据库中的一些数据、视频、文件和记录将被添加到运行的应用程序中。 从我在AWS控制台中看到的情况来看,我可以部署一个应用程序的不同版本--但是根据上面的场景,如果我部署了一个新版本,我会不会丢失直接上传到正在运行的应用程序中的所有文件(即文件

  • 我是AWS的新手,这个问题似乎很基本。然而,我需要看看我是否能找到解决方案。 我首先创建并启动了一个 EC2 实例,然后创建了一个弹性 Beanstalk 实例,并在该实例上部署了一个示例应用程序。默认情况下,弹性 Beanstalk 会将“默认环境”附加到此实例,我无法将其更改为我的 EC2 实例。如何将我的 EC2 实例(我之前创建的实例)附加到此弹性豆茎实例?我正在使用亚马逊免费套餐来学习。

  • 我有一个用Python 2.7/Tornado编写的服务器,我正在尝试将其部署到AWS上。我遇到了AWS弹性豆茎,它看起来是一种非常方便的方法来部署我的代码。 txt文件中有一个tornado==4.4.2的条目。 我尝试添加一些日志语句来写入外部文件,但该文件没有被创建,这可能意味着应用程序甚至没有启动。 如果有人能提供一些在AWS-EB上部署龙卷风应用程序的步骤,或者我应该如何开始解决这个问题

  • 我试图在AWS Elastic Beanstek上部署一个geodjango应用程序。配置是64位AmazonLinux2017.09 v2.6.6运行Python 3.6。尝试部署时我收到此错误: 如何安装所需的软件包?我通读了在AWS Beanstalk或EC2实例中使用GeoDjango支持设置Django,但是我仍然遇到问题。我的ebextensions目前看起来像:

  • 我无法让Flask-SocketIO与我在AWS弹性豆茎(ELB)上的实例一起工作,由于需要使用socketio.run(application)运行Flask-SocketIO,ELB似乎要调用全局应用程序对象本身。 ELB文档指出,使用application.py作为文件名并提供一个可调用的应用程序对象(在本例中是Flask对象)允许Elastic Beanstalk轻松找到应用程序的代码。

  • 我对亚马逊AWS服务非常陌生。我想知道是否有办法运行EC2的一个实例(比如Amazon Linux AMI ),然后将两个环境连接到这个实例。 特别是,我希望在单个EC2实例上运行PHP和Tomcat环境。 问题是,每次我在Elastic Beanstalk中创建新环境时,它似乎也会创建一个新的EC2实例。我是不是遗漏了什么? 我很感激任何关于此的提示。