5

環境固有のアプリケーション構成ファイルをs3に格納しようとしています。 ファイルは異なるサブディレクトリに格納され、環境の名前が付けられ、ファイル名の一部として環境もあります。AWS Elastic Beanstalk:ebextensionsで環境変数を使用する方法は?

としては

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

弾性豆の木環境が命名さDEV、STG、 PRDであり、代替的に、私はまたDEV、STG又はPRDことができる弾性豆の木という環境で定義された環境変数を有します。

私の質問は今、.ebextensionsの設定ファイルから設定ファイルをダウンロードするときに、環境名またはENVIRONMENT変数を参照するのですか?

.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 

私が手にエラーがある:

.ebextensionsの設定で環境変数を参照する正しい方法は何
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のファイルですか?

答えて

4

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions-functions.html

これは少なくともSubのサポートがebextensionsに導入されるまで、Fn::JoinRefにフォールバックする必要があることを意味します。また、ファイル属性には固定パスが必要であると思われます(この場合、Fn::Joinは使用できません)。

はこれを私の全体的な解決策は以下の通りであった:デプロイされたアプリケーションのインスタンスの隣にconfigディレクトリ内

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ファイルになります。

この方法を使用してファイル名の一部として環境の名前を保持する場合は、別のFn::Join式を使用してファイル名を制御するようにファイルを移動するコマンドを調整する必要があります。

1

JSONを使用しようとしている間はほとんどの場合、.ebextensionsはYAML形式を使用しています。 Ref: AWSEBEnvironmentNameを使用してください。また、あなたが避けるためにSub機能を利用することができ 厄介なJoin:私はサブ機能がebextensionsで利用可能であるとは思われないことを発見するまで、私は、この作業を取得するために苦労し

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

1

.ebextensions設定ファイルはほぼ正しいです。環境変数またはAWSリソース名にファイル名を代入すると、Markの回答のようにcontainer_commandsセクションに作成されたファイルの名前を変更するように動作しません。

Refが正しい使用してAWSリソース名にアクセスしようとしsourceオプションの値、それだけで以下のように、単一引用符'に囲まれていた:

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:environmentnamespaceです。例以下は

filessourceオプションで、環境変数ENVIRONMENTにアクセス:

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 
関連する問題