如何在部署节点js应用程序时使.ebextensions工作?

时间:2014-04-17 14:05:10

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

我很难理解在使用elasticbeanstalk部署节点js应用程序时如何使用.ebextensions。我在may application的顶层目录中创建了一个名为01run.config的文件:

my_app:
   |-- server.js
   |-- site/(...)
   |-- node-modules
   |-- .ebextensions/01run.config

文件.ebextensions包含我的AWS凭据和一个引用我的应用使用的S3捆绑包的参数。

option_settings:
  - option_name: AWS_SECRET_KEY
    value:  MY-AWS-SECRET-KEY
  - option_name: AWS_ACCESS_KEY_ID
    value: MY-AWS-KEY-ID
  - option_name: PARAM1
    value: MY-S3-BUNDLE-ID

使用eb create部署我的应用后,会创建一个包含许多变量的.elasticbeanstalk/optionsettings.my_app-env,其中PARAM1设置为“”。凭证也不存在。 我想在启动应用程序的时候我读到了.ebextensions的某个地方,所以我不会在optionsettings.my_app-env'中看到这些变量。但是,未设置变量,并且应用程序无法正常工作。我很感激任何解释。 我发现官方文档有点让人难以理解。

3 个答案:

答案 0 :(得分:2)

似乎问题是我没有将.ebextensions提交给git。显然,在初始化您的应用程序时会读取该文件,因此它必须是发送到elasticbeanstalk的包的一部分。

我已经考虑使用配置文件来设置amazon文档http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs_custom_container.html中的身份验证密钥。 但是,我没有提交该文件,因为很明显您不应该提交您的身份验证密钥(更多关于此讨论:How do you pass custom environment variable on Amazon Elastic Beanstalk (AWS EBS)?)。

我最终简化了包含PARAM1选项的文件,并在整个elasticbenastalk在线界面中传递了密钥和访问密钥ID。

答案 1 :(得分:0)

您的配置文件示例缺少命名空间。您必须为每个选项设置指定命名空间。

答案 2 :(得分:0)

您可以传递.elasticbeanstalk/optionsettings.[your-env-name]文件中的环境选项。

您应该有一个名为[aws:elasticbeanstalk:application:environment]的部分。它可能会填充PARAM1= ...等。只需在此部分下添加您的环境变量即可。不应提交.elasticbeanstalk目录中的文件。

执行eb update后,如果您转到基于Web的EBS控制台,则可以验证是否添加了选项。新选项应该出现。我相信通过控制台添加的任何旧选项都不会被删除。