代码之家  ›  专栏  ›  技术社区  ›  ccohen

Github操作和创建用于创建RDS的S3 bucket

  •  0
  • ccohen  · 技术社区  · 1 年前

    我在GitHub操作中使用Terraform向AWS启动RDS实例。创建实例时,我收到以下消息:

    Error: Failed to get existing workspaces: S3 bucket "***" does not exist.
    

    之所以会发生这种情况,是因为我使用bucket来保存状态信息,并使用Terraform后端keywork创建它。

    terraform {
      required_providers {
        aws = {
          source = "hashicorp/aws"
          version = "~> 5.40.0"
        }
      }
    
      required_version = ">= 1.7.4"
    
      backend "s3" {
        bucket = "removed_for_question"
        key = "removed_for_question"
        region = "removed_for_question"
      }
    }
    

    经过一番研究,我发现这就是所谓的Terraform的鸡蛋问题?我尝试了多种方法来解决它,但不幸的是,我对所列出的大多数技术都相当陌生,似乎无法找到解决我特定问题的解决方案。

    在RDS Terraform创建需要这个bucket之前,如何在Github Action中创建S3 bucket。我知道您也可以使用AWS CLI来创建它,但不太确定这里的最佳实践。

    这个行业是如何解决这个问题的,我很难相信每个人都是手动创建水桶的。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Mark B    1 年前

    你在这里的评论听起来像是你认为声明S3后端实际上会导致Terraform创建S3 bucket:

    我使用bucket来保存状态信息,并使用Terraform后端keywork创建它。

    事实并非如此。Terraform不会创建您用作后端的S3存储桶。在使用Terraform代码之前,您必须自己创建S3存储桶。这是没有办法的。如果你想让这个S3存储桶由Terraform管理,那么你必须将它分离成一个单独的Terraform模板,在这个Terraform代码之前运行,但在新的Terraform代码中,状态存储也会有同样的问题。

    如果你想在GitHub操作中自动化整个过程,那么你可以使用 AWS CLI Tool 以在运行Terraform代码之前创建S3 bucket。您必须在GitHub Actions中放入某种逻辑来检查bucket是否存在,并且只运行CLI命令来创建一次bucket,因为如果bucket已经存在,则会失败。