【问题标题】:Why are ElasticBeanstalk .ebextensions ignored when using AWSJavaScriptSDK?为什么在使用 AWSJavaScriptSDK 时忽略 ElasticBeanstalk .ebextensions?
【发布时间】:2020-01-05 11:51:48
【问题描述】:

使用 AWS JavaScript 开发工具包更新 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,并且不会在 Lambda 部署期间执行命令 set_up

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

【问题讨论】:

    标签: devops amazon-elastic-beanstalk ebextensions


    【解决方案1】:

    VersionLabel 不能包含逗号。

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

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

    const versionLabel = "myVersionString" + (new Date().toISOString());
    

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 2015-03-22
      • 2016-05-12
      • 2012-05-10
      • 1970-01-01
      • 2017-04-21
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多