首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWS弹性豆柄:如何使用环境变量?

AWS弹性豆柄:如何使用环境变量?
EN

Stack Overflow用户
提问于 2017-03-01 15:30:43
回答 3查看 8.2K关注 0票数 13

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

例子有:

代码语言:javascript
运行
复制
dev/application-dev.properties
stg/application-stg.properties
prd/application-prd.properties

弹性豆柄环境被命名为dev,stg,prd,或者我也有一个在ElasticBean秸秆中定义的环境变量,这个环境变量可以是dev、stg或。

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

我尝试在.eb扩展名/myapp.config中使用{"Ref": "AWSEBEnvironmentName" }引用,但在部署时得到了一个语法错误。

.eb扩展名/myapp.config的内容是:

代码语言:javascript
运行
复制
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

我得到的错误是:

代码语言:javascript
运行
复制
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.

在AWSElasticBean秸秆中引用.ebextensions配置文件中的环境变量的正确方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-19 00:58:05

我很难做到这一点,直到我发现http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions-functions.html中似乎没有Sub函数可用。

这意味着您需要回到Fn::JoinRef上,至少在Sub的支持引入ebextensions之前是如此。文件属性似乎还需要一个固定的路径(而且我不能在这个上下文中使用Fn::Join )。

我对此的总体解决办法如下:

代码语言:javascript
运行
复制
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

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

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

票数 8
EN

Stack Overflow用户

发布于 2017-12-14 16:48:15

您的.ebextensions配置文件几乎是正确的。用环境变量或AWS资源名替换文件名是行不通的,因为这与Mark的答复中重命名在container_commands部分中创建的文件一样。

source选项值试图使用参考访问AWS资源名是正确的,它只需被单引号'包围,如下所示:

代码语言:javascript
运行
复制
files:
  /config/application.properties:
    mode: "000666"
    owner: webapp
    group: webapp
    source: 'https://s3.amazonaws.com/com.mycompany.mybucket/`{"Ref": "AWSEBEnvironmentName" }`/application-`{"Ref": "AWSEBEnvironmentName" }`.properties'
   authentication: S3Access

并使用Fn::GetOptionSetting访问环境变量。环境变量在aws:elasticbeanstalk:application:environment 命名空间中。

下面的示例访问source选项中的环境变量files

代码语言:javascript
运行
复制
files:
  "/tmp/application.properties" :
    mode: "000666"
    owner: webapp
    group: webapp
    source: 'https://s3.amazonaws.com/com.mycompany.mybucket/`{"Ref": "AWSEBEnvironmentName" }`/application-`{"Fn::GetOptionSetting": {"Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "ENVIRONMENT ", "DefaultValue": "dev"}}`.properties'
    authentication: S3Auth
票数 10
EN

Stack Overflow用户

发布于 2017-03-01 22:21:40

您几乎可以看到.ebextensions使用YAML格式,而您试图使用JSON。使用Ref: AWSEBEnvironmentName。此外,您还可以利用Sub函数来避免麻烦的Join

!Sub "/config/application-${AWSEBEnvironmentName}.properties"

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42535753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档