首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Github操作恢复/销毁由terraform Plan创建的Terraform AWS基础设施

Github操作恢复/销毁由terraform Plan创建的Terraform AWS基础设施
EN

Stack Overflow用户
提问于 2021-09-07 15:08:10
回答 2查看 195关注 0票数 1

我已经为AWS基础设施设置了terraform,但无法设置可以触发销毁使用Terraform Plan/Apply创建的基础设施的工作流程。

github动作可以手动触发,不需要推送代码,也不需要创建拉取请求?

我不想在hashicorp上注册工作空间,而是想在Github操作上运行管道。

有用于销毁基础设施的资源,但它只在Pull request close上有效。

EN

回答 2

Stack Overflow用户

发布于 2021-09-07 16:07:42

票数 1
EN

Stack Overflow用户

发布于 2021-09-10 06:22:43

我创建了另一个可以手动触发的工作流,并将使用状态文件来销毁现有的基础架构

为此,我要求存储状态文件。我把文件存储在亚马逊网络服务的S3上。

注意:您可以使用terraform后端来维护状态文件的版本。

我没有这样做,因为我不能为不同的环境配置它,并且变量是不允许的。

以下是Terraform create Infrastructure作业中的更改:

代码语言:javascript
复制
- name: AWS Plan Copy
        id: copyfrom
        run: aws s3 cp s3://your-bucket/yourapp-${{ env.ENVIRONMENT }}.tfstate yourapp-${{ env.ENVIRONMENT }}.tfstate
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: ${{ secrets.REGION }}
        continue-on-error: true // incase infra does not exist

- name: Terraform Plan
        id: plan
        if: ${{ github.event_name == 'pull_request' || github.event_name == 'push' }} // Plan creation is required both on pull_request, push
        run: terraform plan 
        continue-on-error: true

- name: Terraform Apply
        id: apply
        if: github.event_name == 'push'
        run: terraform apply -auto-approve
      
      - name: AWS Plan Copy
        if: github.event_name == 'push' && steps.apply.outcome == 'success'
        run: aws s3 cp terraform.tfstate s3://your-bucket/yourapp-${{ env.ENVIRONMENT }}.tfstate
        id: copy
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: ${{ secrets.REGION }}

销毁工作流:

代码语言:javascript
复制
name: Manually triggered workflow
on:
  workflow_dispatch:
    inputs:
      env:
        description: 'Environment'
        required: true
        default: 'dev'

jobs:
  destroy:
    name: "Destroy AWS"
    runs-on: ubuntu-latest
    steps:
        - name: AWS Plan Copy
          run: aws s3 cp s3://your-bucket/yourapp-${{ github.event.inputs.env }}.tfstate terraform.tfstate
          id: copy
          env:
            AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
            AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
            AWS_DEFAULT_REGION: ${{ secrets.REGION }}

        - name: Show Destroy plan
          run: terraform plan -destroy
          continue-on-error: true

        - name: Destroy resources jobs
          id: destroy
          run: terraform destroy -auto-approve

        - name: Delete plan file
          if: steps.destroy.outcome == 'success'
          run: aws s3 rm s3://your-bucket/yourapp-${{ github.event.inputs.env }}.tfstate
          env:
            AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
            AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
            AWS_DEFAULT_REGION: ${{ secrets.REGION }}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69090619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档