spring - 如何使用 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。
解决方案
通常,在任何类型的文件或部署自动化中包含访问密钥和密钥都是一种不好的做法。
您的应用程序部署到的实例应附加一个实例配置文件(即 IAM 角色),该配置文件应具有您需要的适当 DynamoDB 权限。
如果您附加了该实例配置文件,SDK 应该能够自动检测需要与之通信的凭证、区域和端点。
您可能需要更新创建 DynamoDB 客户端的方式以仅使用默认值。
要使用这些属性以 AWS 开发工具包可以检索而无需将它们显式放入属性文件的方式设置您的开发机器,您可以运行aws configure
AWS CLI 的命令,该命令应~/.aws/
使用有关您的区域和凭证的信息设置您的文件夹以用于您的开发机。
推荐阅读
- unix - Datastage Sequence作业-如果这些文件位于7个不同的文件夹中,如何一次处理每个文件
- node.js - 无法显式使用端口号建立连接
- sql - 当存在一些重复时,获取时间戳记录之间的时间段
- android - CustomTabsClient.bindCustomTabsService 总是返回 false
- oracle - 使用 Oracle PL/SQL 中的存储过程更改列别名及其显示格式
- javascript - 如何在页面加载后将自定义维度单独发送到首页视图?
- javascript - 用 axios json 响应 reactjs 填充钩子
- jwt - 我可以在没有 DB 调用的情况下验证 JWT 签名吗?
- javascript - Socket.io ERR_CONNECTION_REFUSED NodeJs, Express
- python - 如何使用 Python 更改多维数据集的维度?