AWS Beanstalk执行特定命令

时间:2018-02-13 00:06:45

标签: javascript node.js sqlite amazon-web-services elastic-beanstalk

我有一个示例node.js应用程序,它只适用于sqlite 我想做一个概念验证'在AWS ElasticBeanstalk上,无需重写node.js应用程序以使用受支持的数据库

为了启动node.js应用程序,我必须首先通过执行node db.js为sqlite数据库播种。

如何在EBS实例上执行此节点命令?

我尝试过添加命令到.ebextensions

.ebextensions / foo.config

commands:
  1_seed_db:
    command: "PATH=$PATH:`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin node db.js"

返回错误:

  

错误:找不到模块' /var/app/current/db.js;'

我怀疑/ var / app / current目录还没有存在,所以我也尝试修改NodeCommand,以便执行自定义命令node db.js; npm start as documented here:

.ebextensions / node.config

option_settings:
  - namespace: aws:elasticbeanstalk:container:nodejs
    option_name: NodeCommand
    value: node db.js; npm start

如何在启动节点进程之前使Elastic beanstalk执行node db.js

1 个答案:

答案 0 :(得分:0)

我能够通过欺骗packages.json

中的start命令来实现这一点

packages.json之前:

"scripts": {
  "start": "node ./db.js; node ./bin/www"
},

packages.json之后:

import org.apache.spark.sql.functions.typedLit

val df = Seq((1L, null), (2L, Map("foo" -> "bar"))).toDF("id", "map")

df.withColumn("map", coalesce($"map", typedLit(Map[String, Int]()))).show
// +---+-----------------+
// | id|              map|
// +---+-----------------+
// |  1|            Map()|
// |  2|Map(foobar -> 42)|
// +---+-----------------+

你显然不应该在制作中这样做,但它足以证明概念。