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

在GitLab CI/CD中如何将Terraform输出的EC2公网IP传递给Ansible阶段

GitLab CI中Terraform传递EC2公网IP到Ansible阶段的方法

可以将公网IP导出为环境变量供后续阶段调用,下面是可直接落地的实现步骤,推荐两种成熟方案:

方案1:通过dotenv artifacts传递环境变量(最符合环境变量调用需求)

  • 第一步:配置Terraform输出公网IP
    在你的Terraform配置文件中添加output块:
output "ec2_public_ip" {
  value = aws_instance.your_ec2_instance.public_ip
  # 非敏感场景可省略下方sensitive配置
  sensitive = false
}
  • 第二步:在Terraform CI阶段导出环境变量到dotenv文件
    编辑.gitlab-ci.yml的Terraform阶段配置:
stages:
  - terraform_deploy
  - ansible_config

terraform_deploy:
  stage: terraform_deploy
  image: hashicorp/terraform:latest
  script:
    - terraform init
    - terraform plan
    - terraform apply -auto-approve
    # 导出公网IP到dotenv文件
    - echo "EC2_PUBLIC_IP=$(terraform output -raw ec2_public_ip)" >> build.env
  artifacts:
    reports:
      # 声明dotenv报告,后续阶段自动加载文件内的环境变量
      dotenv: build.env
    paths:
      - build.env
  • 第三步:Ansible阶段直接调用环境变量
ansible_config:
  stage: ansible_config
  image: ansible/ansible:latest
  script:
    # 临时inventory写法,末尾逗号不能省略
    - ansible-playbook -i "$EC2_PUBLIC_IP," your_playbook.yml
    # 也可以动态生成inventory再调用:
    # - echo "$EC2_PUBLIC_IP ansible_user=ec2-user ansible_ssh_private_key_file=./private_key.pem" > inventory.ini
    # - ansible-playbook -i inventory.ini your_playbook.yml
  needs:
    - terraform_deploy

方案2:直接生成Ansible inventory文件作为artifacts传递

如果不需要单独使用环境变量,直接生成inventory更省事,无需配置dotenv:

  • 在terraform_deploy阶段的script最后添加:
echo "[ec2_hosts]
$(terraform output -raw ec2_public_ip) ansible_user=ec2-user ansible_ssh_private_key_file=./private_key.pem" > inventory.ini
  • 然后在artifacts的paths下添加- inventory.ini,后续Ansible阶段直接拉取该文件使用即可。

注意事项

  • 需提前把EC2的SSH私钥存储到GitLab CI/CD变量中,禁止敏感信息硬编码到配置文件
  • 确保EC2实例的安全组开放了22端口的入站规则,允许GitLab Runner的出口IP访问
  • 若Terraform输出标记了sensitive,terraform output需要加-raw参数才能正常获取明文值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:27:03