我已经为AWS基础设施设置了terraform,但无法设置可以触发销毁使用Terraform Plan/Apply创建的基础设施的工作流程。
github动作可以手动触发,不需要推送代码,也不需要创建拉取请求?
我不想在hashicorp上注册工作空间,而是想在Github操作上运行管道。
有用于销毁基础设施的资源,但它只在Pull request close上有效。
发布于 2021-09-07 16:07:42
使用workflow_dispath https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_dispatch
然后,您可以从web执行manually run it操作。
发布于 2021-09-10 06:22:43
我创建了另一个可以手动触发的工作流,并将使用状态文件来销毁现有的基础架构
为此,我要求存储状态文件。我把文件存储在亚马逊网络服务的S3上。
注意:您可以使用terraform后端来维护状态文件的版本。
我没有这样做,因为我不能为不同的环境配置它,并且变量是不允许的。
以下是Terraform create Infrastructure作业中的更改:
- 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 }}销毁工作流:
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 }}https://stackoverflow.com/questions/69090619
复制相似问题