24

我有一个 Web 应用程序,它利用环境变量进行一些配置(数据库凭据、API 密钥等)。我目前正在使用 Elastic Beanstalk 进行部署,并且可以在 AWS 中轻松设置这些,这很棒,因为我的代码库中没有这些敏感数据。

但是,我正在考虑从 Elastic Beanstalk 切换,以便我可以利用我的 Web 实例更多的灵活性,自然我正在考虑使用 CodeDeploy 进行部署(从我的 Codeship CI 设置)。CodeDeploy 相当简单,我已经将它与 Codeship 集成得很好,但我注意到没有像 Elastic Beanstalk 那样使用 CodeDeploy 设置环境变量的内置功能。有人对此过程有任何最佳实践吗?

4

4 回答 4

7

我发现设置环境变量的一种方法是通过在 AfterInstall 挂钩期间运行的脚本(在 appspec http://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref.html中指定)。

我可以通过调用我的实例元数据来确定我当前在这些脚本中部署到的环境,在其中我获取我的实例 ID,然后利用 aws cli 执行过滤到我的实例 ID 的描述标签,其中我有一个标签集环境

ID=$(curl "http://169.254.169.254/latest/meta-data/instance-id")
aws --region us-east-1 ec2 describe-tags --filters Name=resource-id,Values=$ID Name=key,Values=Environment

我不喜欢这个,但是在 Code Deploy 内置了一些东西来将参数传递给 appspec 之前,这是我能找到的最好的。

于 2015-02-26T14:42:41.520 回答
3

假设您使用 github 来管理您的代码,这是管理您的环境的一种潜在方法

使用 git-crypt( https://github.com/AGWA/git-crypt ) 加密敏感信息。您可以将解码这些文件的密钥放在服务器上。在 codedeploy afterInstall 阶段,您可以解密和设置环境。

优点是现在您可以安全地在一个地方获取所有信息。

于 2016-01-04T23:17:43.880 回答
1

您可以在 bash 脚本中使用变量(如果它们不是“秘密”):

  1. LIFECYCLE_EVENT :此变量包含与脚本关联的生命周期事件的名称。
  2. DEPLOYMENT_ID :此变量包含当前部署的部署 ID。
  3. APPLICATION_NAME :此变量包含正在部署的应用程序的名称。这是用户在控制台或 AWS CLI 中设置的名称。
  4. DEPLOYMENT_GROUP_NAME :此变量包含部署组的名称。部署组是与您的部署目标应用程序相关联的一组实例。
  5. DEPLOYMENT_GROUP_ID :此变量包含 AWS CodeDeploy 中与当前部署对应的部署组的 ID

例子:

if [ "$DEPLOYMENT_GROUP_NAME" == "staging" ]
then
    
    #make directory with Deployment ID
    foldernameid=$(date +%Y%m%d)-$DEPLOYMENT_ID
    mkdir -p /var/www/releases/"$foldernameid"

    #print AWS variables to file
    awsvar1=$DEPLOYMENT_ID
    awsvar2=$LIFECYCLE_EVENT
    awsvar3=$APPLICATION_NAME
    awsvar4=$DEPLOYMENT_GROUP_NAME
    awsvar5=$DEPLOYMENT_GROUP_ID
    destdir=/var/www/releases/aws_var.txt
    echo "Deployment id" $awsvar1 "Lifecyckle_Event" $awsvar2 
    "Application_Name" $awsvar3 "Deployment_Group_Name" $awsvar4 
    "Deployment_Group_ID" $awsvar5 >>  $destdir

fi

更多信息: https ://aws.amazon.com/blogs/devops/using-codedeploy-environment-variables/

于 2020-01-23T17:36:35.317 回答
-2

似乎可以使用环境变量(主要是您的 DEPLOYMENT_GROUP_NAME)。

请参阅亚马逊的本指南

于 2017-01-27T07:39:24.353 回答