首页 > 解决方案 > 如何使用 AWS CodeDeploy 和/或 CloudFormation 配置 application.properties?

问题描述

我在 Elastic Beanstalk 上部署了一个 Spring Web 服务。我将 AWS CloudFormation 用于基础设施,并使用 AWS CodePipeline 将 Web 服务从合并自动部署到主分支。

最近我添加了 DynamoDB 集成,我需要在我的 application.properties 中配置一些东西。我尝试使用环境变量来配置 application.properties,但是在尝试从 CodeDeploy 设置环境变量时遇到了困难。

这是我的 application.properties

amazon.dynamodb.endpoint=${DYNAMODB_ENDPOINT:http://localhost:8000}
amazon.dynamodb.region=${AWS_REGION:default-region}
amazon.dynamodb.accesskey=${DYNAMODB_ACCESS_KEY:TestAccessKey}
amazon.dynamodb.secretkey=${DYNAMODB_SECRET_KEY:TestSecretKey}

spring.data.dynamodb.entity2ddl.auto = create-drop
spring.data.dynamodb.entity2ddl.gsiProjectionType = ALL
spring.data.dynamodb.entity2ddl.readCapacity = 10
spring.data.dynamodb.entity2ddl.writeCapacity = 1

默认值适用于我运行本地 DynamoDB 实例并且它们运行良好时。但是,我不知道如何让 CodeDeploy 为我设置环境变量,我也考虑让 CloudFormation 设置环境变量,但也找不到如何做到这一点。我尝试在 EC2 实例中手动设置环境变量,但这不起作用,也不是我正在寻找的解决方案,因为我正在使用 EB 并希望该项目使用全自动部署。请让我知道这是否可行,配置 Web 服务的行业标准是什么,以及我是否误解了 CodeDeploy 或 CloudFormation。

标签: springamazon-web-servicesspring-bootamazon-cloudformationaws-code-deploy

解决方案


通常,在任何类型的文件或部署自动化中包含访问密钥和密钥都是一种不好的做法。

您的应用程序部署到的实例应附加一个实例配置文件(即 IAM 角色),该配置文件应具有您需要的适当 DynamoDB 权限。

如果您附加了该实例配置文件,SDK 应该能够自动检测需要与之通信的凭证、区域和端点。

您可能需要更新创建 DynamoDB 客户端的方式以仅使用默认值。

要使用这些属性以 AWS 开发工具包可以检索而无需将它们显式放入属性文件的方式设置您的开发机器,您可以运行aws configureAWS CLI 的命令,该命令应~/.aws/使用有关您的区域和凭证的信息设置您的文件夹以用于您的开发机。


推荐阅读