Project 是使用 AWS lambda 和其他一些 AWS 服务构建的。为了进行构建,并且仅通过节点快速服务器提供构建静态文件,它需要凭证.js文件,其中包含项目的所有AWS凭证。 现在,我将创建一个 aws 代码管道,该管道从 GitHub 中提取代码并使用弹性 beanstalk 将其部署到 ec2 上。 问题是我没有在 Github 上推送我的凭据文件,因为这样做不安全。如果没有凭据文件,则无法部署代码。请向我建议解决此问题的方法。
我已经尝试通过登录手动将文件放置在 ec2 实例中,但是当我提交到我的存储库时,代码管道会执行,它会替换 ec2 中我的应用程序的整个目录,因此文件被删除。
您可以将凭证配置文件安全地存储在私有 S3 存储桶中,并将commands
添加到buildspec.yml
文件(由管道的 CodeBuild 阶段使用)以获取该文件并将其放在适合您项目的位置。
您需要为 CodeBuild 服务角色授予访问私有 S3 存储桶的正确权限。
以下是我的意思的一个例子。请注意,我可能会在 S3 中存储多个环境的配置文件,因此我使用环境变量来指定文件的确切命名,例如my-creds.dev.json
或my-creds.prod.json
.然后将文件名转换为仅my-creds.json
,以便您可以在程序中依赖相同的名称。
CodeBuild 将查找 buildspec.yml,它在项目的根目录中定义您的构建并执行这些命令
version: 0.2
phases:
pre_build:
commands:
# Get the creds config file for the correct environment
# and put it in the my projects config directory (or wherever you need it)
- aws s3 cp s3://my-s3-bucket/my-creds.${ENVIRONMENT}.json ./config/my-creds.json
- npm install
build:
commands:
- npm run build:${ENVIRONMENT}
artifacts:
files:
- dist/**/*
临界线是aws s3 cp s3://my-s3-bucket/my-creds.${ENVIRONMENT}.json ./config/my-creds.json
.
- 这些命令在项目目录的根目录中运行,
buildspec.yml
文件所在的根目录。 - 上述命令处于
pre_build
阶段,因此它将在运行build
阶段的命令(npm build)之前运行。 - 该命令将您的凭证文件从 s3 存储桶复制到命令的最后一部分定义的路径(在本例中为
./config/my-creds.json
)。再次记住,这是相对于项目目录的根目录而言的,因此,如果您的项目在根目录中包含src
文件夹,则路径可能是./src/my-creds.json
或./src/creds/my-creds.json
。
不应添加凭据文件,因为不建议这样做。可以通过向代码管道分配具有访问所需资源的权限的角色来进行部署。