1

当使用 AWS JavaScript SDK 更新 ElasticBeanstalk 环境时,我.ebextensions/*被忽略了。我将应用程序源包作为 .zip 文件上传到 S3,这会触发 Lambda 使用以下代码部署新的应用程序版本:

const elasticbeanstalk = new AWS.ElasticBeanstalk();

exports.handler = async (event) => {
  const versionLabel = "myVersionString" + (new Date().toUTCString());

  // elasticbeanstalk.createApplicationVersion [...]

  elasticbeanstalk.updateEnvironment({
    "EnvironmentName": "myEBEnvironment",
    "VersionLabel": versionLabel
  });

};

在 AWS 管理控制台中上传相同的源包时,我的所有内容.ebextensions都按预期执行。

*.config 文件内部没有什么特别之处。我只是根据环境变量创建一些文件以供以后使用,例如

files:
  "/home/ec2-user/prepare_key.sh":
    mode: "000777"
    content: |
      #!/bin/bash

      if [ -z ${MY_KEY+x} ]
      then
          echo "MY_KEY is not set. skip."
      else
          echo "prepare MY_KEY ..."
          echo $MY_KEY > /home/ec2-user/key
      fi
container_commands:
  set_up:
    command: "/home/ec2-user/prepare_key.sh"

因此,/home/ec2-user/prepare_key.sh不会生成(或更新)文件,并且set_up不会在 Lambda 部署期间执行命令。

我仔细检查了源包。我所有的.ebextensions/*.config文件都在那里。我的项目目录中没有.ebignore文件。

4

1 回答 1

1

VersionLabel不能包含逗号。

在我使用的 Lambda 中new Date().toUTCString(),它被附加到静态版本标签上。这会产生一个字符串,如"myVersionString Mon, 09 Sep 2019 08:16:23 GMT". 包含的逗号导致.ebextensionsElastic Beanstalk 无法正确提取。

我现在只附加一个 ISO 字符串,它不包含任何逗号。

const versionLabel = "myVersionString" + (new Date().toISOString());
于 2019-09-09T13:30:53.117 回答