You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeBuild构建后获取EC2实例ID及IP/主机名用于Ansible部署的方法

方案1:在创建EC2的Ansible Playbook中直接获取IP

你用Ansible部署EC2的时候,不管调用的是AWS EC2原生模块还是CloudFormation模板,都可以直接将实例返回的属性注册为变量,不需要额外二次查询。

  • 若使用amazon.aws.ec2_instance模块直接创建实例:
    给创建任务加register字段存储返回结果,直接提取对应IP属性即可,示例代码如下:
    - name: 部署EC2实例
      amazon.aws.ec2_instance:
        name: "your-app-server"
        instance_type: t3.micro
        # 其余实例配置参数
      register: ec2_deploy_result
    
    - name: 提取实例公网IP作为变量
      set_fact:
        target_ec2_ip: "{{ ec2_deploy_result.instances[0].public_ip_address }}"
    
    你可以根据需求替换提取private_ip_address(私网IP)、public_dns_name(公网主机名)字段。
  • 若调用CloudFormation模板创建实例:
    先在CloudFormation模板的Outputs段配置输出实例IP/主机名,Ansible调用CloudFormation模块时注册返回值,直接提取输出的参数即可。
方案2:通过已有的实例ID调用AWS CLI查询IP

如果你已经能拿到部署完成的EC2实例ID,直接在CodeBuild构建步骤中调用AWS CLI查询属性即可,前提是你给CodeBuild的服务角色配置了ec2:DescribeInstances权限。

  • 查询公网IP命令:
    aws ec2 describe-instances --instance-ids <你的实例ID> --query "Reservations[0].Instances[0].PublicIpAddress" --output text
  • 查询私网IP命令:
    aws ec2 describe-instances --instance-ids <你的实例ID> --query "Reservations[0].Instances[0].PrivateIpAddress" --output text
  • 查询公网主机名命令:
    aws ec2 describe-instances --instance-ids <你的实例ID> --query "Reservations[0].Instances[0].PublicDnsName" --output text
    你可以将命令返回的结果存入环境变量或者Ansible变量,后续直接传给配置推送的Playbook使用。
方案3:通过实例标签过滤查询IP

如果你给创建的EC2配置了唯一的业务标签组合(比如App=your-app,Env=prod可以唯一锁定目标实例),也可以直接通过标签过滤查询,不需要提前存储实例ID:
aws ec2 describe-instances --filters "Name=tag:App,Values=your-app" "Name=tag:Env,Values=prod" "Name=instance-state-name,Values=running" --query "Reservations[*].Instances[*].PublicIpAddress" --output text

注意:如果你的CodeBuild和目标EC2在同一个VPC内,建议优先使用私网IP推送配置,不需要给EC2开放公网访问权限,安全性更高。

内容的提问来源于stack exchange,提问作者SKMo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:57:04