我们正在尝试将环境特定的应用程序配置文件存储在s3中。
文件存储在不同的子目录中,这些子目录以环境命名,并且环境也作为文件名的一部分。

例子是

dev/application-dev.properties
stg/application-stg.properties
prd/application-prd.properties

Elastic Beanstalk环境的名称为 dev,stg,prd ,或者我也有一个在Elastic Beanstalk中定义的名为ENVIRONMENT的环境变量,可以是 dev,stg或prd

现在的问题是,从.ebextensions中的配置文件下载配置文件时,如何引用环境名称或环境变量?

我尝试在.ebextensions/myapp.config中使用{"Ref": "AWSEBEnvironmentName" }引用,但是在部署时出现语法错误。

.ebextensions/myapp.config的内容为:
files:
  /config/application-`{"Ref": "AWSEBEnvironmentName" }`.properties:
    mode: "000666"
    owner: webapp
    group: webapp
    source: https://s3.amazonaws.com/com.mycompany.mybucket/`{"Ref": "AWSEBEnvironmentName" }`/application-`{"Ref": "AWSEBEnvironmentName" }`.properties
    authentication: S3Access

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Access:
          type: S3
          roleName: aws-elasticbeanstalk-ec2-role
          buckets: com.mycompany.api.config

我得到的错误是:
The configuration file .ebextensions/myapp.config in application version
manualtest-18 contains invalid YAML or JSON. YAML exception: Invalid Yaml:
mapping values are not allowed here in "<reader>", line 6, column 85:
... .config/stg/application-`{"Ref": "AWSEBEnvironmentName" }`.prop ... ^ ,
JSON exception: Invalid JSON: Unexpected character (f) at position 0..
Update the configuration file.

在AWS Elastic Beanstalk中的.ebextensions配置文件中引用环境变量的正确方法是什么?

最佳答案

我一直在努力使其工作,直到发现Sub功能在ebextensions中似乎不可用:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions-functions.html

这意味着您需要退回到Fn::JoinRef,至少直到对ebextensions引入了对Sub的支持为止。似乎文件属性需要固定路径(在这种情况下,我无法使用Fn::Join)。

我对此的总体解决方案如下:

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: S3
          buckets: arn:aws:s3:::elasticbeanstalk-xxx
          roleName: aws-elasticbeanstalk-ec2-role

files:
  "/tmp/application.properties" :
    mode: "000644"
    owner: root
    group: root
    source: { "Fn::Join" : ["", ["https://s3-xxx.amazonaws.com/elasticbeanstalk-xxx/path/to/application-", { "Ref" : "AWSEBEnvironmentName" }, ".properties" ]]}
    authentication: S3Auth

container_commands:
  01-apply-configuration:
    command: mkdir -p config && mv /tmp/application.properties config

这将在已部署的应用程序实例旁边的application.properties目录中生成一个config文件(没有环境名称限定符)。

如果要使用这种方法将环境名称保留为文件名的一部分,则需要调整将文件移动的命令,以使用另一个Fn::Join表达式来控制文件名。

关于amazon-web-services - AWS Elastic Beanstalk : How to use environment variables in ebextensions?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42535753/

10-11 07:14