在 Elastic Beanstalk 部署期间从 AWS Systems Manager

我有一个数据库连接字符串存储在 AWS Systems Manager Parameter Store 中,我想将其传递给 Elastic Beanstalk 实例的环境变量。我不想将其提交到源代码中,也不必依赖部署程序在部署上设置值或通过Web控制台手动执行此操作。


我已经尝试过动态引用(带和不带反向刻度),它们在CloudFormation堆栈中工作,但不适用于Elastic Beanstalk配置。{{resolve:ssm:DATABASE_CONNECTION_STRING:1}}


我试过使用喜欢container_commands


export DATABASE_CONNECTION_STRING=`aws ssm get-parameter --name DATABASE_CONNECTION_STRING --region eu-west-1 --query Parameter.Value --output text


但是 Elastic Beanstalk 实例没有正确的权限,我不确定如何设置它们。


我尝试使用和从S3文件的内容创建文件,但收到错误。files:source:


理想情况下,动态参考可以工作,例如.ebextensions/env.config =>


OptionSettings:

  aws:elasticbeanstalk:application:environment:

    DATABASE_CONNECTION_STRING: {{resolve:ssm:ANNOTATOR_DATABASE_CONNECTION_STRING:1}}


四季花海
浏览 89回答 3
3回答

慕桂英546537

我能够通过创建包含以下内容的文件来使其工作:.ebextensions/options.configoption_settings:   aws:elasticbeanstalk:application:environment:     ENCRYPT_CERT: '{{resolve:ssm:SOA_ENCRYPT_CERT:1}}'     ENCRYPT_KEY: '{{resolve:ssm:SOA_ENCRYPT_KEY:1}}'

蝴蝶刀刀

您需要在配置文件中使用单引号,在浏览器上可以粘贴它而不带引号。DATABASE_CONNECTION_STRING: '{{resolve:ssm:ANNOTATOR_DATABASE_CONNECTION_STRING:1}}'如果更新参数,请将末尾的 更改为其所在版本。因此,如果您在创建参数键后对其进行了一次更新,它将是 .12

胡子哥哥

我使用了一个配置,将文件从S3下载到其中,然后Python应用程序使用.不理想,但它现在有效。files/tmp/app.envload_dotenv('/tmp/app.env')这是:.ebextensions/env.configResources:  AWSEBAutoScalingGroup:    Metadata:      AWS::CloudFormation::Authentication:        S3Auth:          type: "s3"          buckets: ["S3_BUCKET_NAME"]          roleName:             "Fn::GetOptionSetting":               Namespace: "aws:autoscaling:launchconfiguration"              OptionName: "IamInstanceProfile"              DefaultValue: "aws-elasticbeanstalk-ec2-role"files:  "/tmp/app.env":      mode: "444"    owner: wsgi    group: wsgi    authentication: "S3Auth"    source: https://URL_TO_S3_BUCKET/app.env确保将 和 更改为您的设置。S3_BUCKET_NAMEURL_TO_S3_BUCKET然后在Python中使用;if os.path.exists('/tmp/app.env'):    load_dotenv('/tmp/app.env')else:    load_dotenv('.env')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python