AWS静态IP地址

时间:2018-05-25 10:07:04

标签: amazon-web-services amazon-ec2 aws-code-deploy static-ip-address bitbucket-aws-code-deploy

我正在使用AWS代码部署代理并通过bitbucket插件将我的项目部署到服务器。

代码部署代理首先执行脚本文件,其中包含执行spring-boot项目的命令。

由于我有两个环境,一个开发和另一个生产。我希望脚本根据环境做出不同的处理,即两个不同的实例。

我的计划是获取映射的aws静态ip-address,然后从中确定环境 (生产或阶段)。

如何通过sh命令获取弹性IP地址。

编辑

4 个答案:

答案 0 :(得分:2)

静态IP将起作用。

这是一种更自然的CodeDeploy解决方法 - 设置2个CodeDeploy部署组,一个用于您的开发环境,另一个用于您的生产环境。然后在您的脚本中,您可以使用CodeDeploy在部署期间将设置的环境变量来了解您要部署到哪个环境。

以下是有关如何使用CodeDeploy环境变量的博文:https://aws.amazon.com/blogs/devops/using-codedeploy-environment-variables/

答案 1 :(得分:1)

您可以执行以下操作:

id=$( curl http://169.254.169.254/latest/meta-data/instance-id )
eip=$( aws ec2 describe-addresses --filter Name=instance-id,Values=${id} | aws ec2 describe-addresses | jq .Addresses[].PublicIp --raw-output )

以上从元数据中获取instance-id,然后使用aws cli查找由元数据中的id过滤的弹性IP。使用jq,可以将此输出解析为您要查找的IP。

答案 2 :(得分:1)

查询元数据服务器

eip=`curl -s 169.254.169.254/latest/meta-data/public-ipv4`
echo $eip

答案 3 :(得分:0)

解决方案完全不符合我最初的要求,但这足以满足我的要求。

我只需要知道我在做某些行为的环境。所以我所做的是在一个独立的脚本文件中设置一个环境变量,其中设置了环境变量,值是环境的值。 例如:让我们说一个文件env-variables.sh export profile = stage

在必须根据环境执行命令的脚本文件中,我以这种方式访问​​

 source /test/env-variables.sh
    echo current profile is $profile
    if [ $profile = stage ]
    then
        echo stage
    elif [ $profile = production ]
    then
        echo production
else
        echo failure
    fi

希望有人发现它有用