Github 操作和创建 S3 存储桶以在 RDS 创建中使用

问题描述 投票:0回答:1

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

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

发生这种情况是因为我使用存储桶来保存状态信息并使用 Terraform 后端密钥创建它。

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 创建之前,如何在 Github Action 中创建 S3 存储桶。我知道您也可以使用 AWS CLI 来创建它,但我不太确定此处的最佳实践。

业界如何解决这个问题,我很难相信每个人都手动创建存储桶。

amazon-web-services amazon-s3 terraform github-actions amazon-rds
1个回答
0
投票

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

我使用存储桶来保存状态信息,并使用 Terraform 后端密钥创建它。

事实并非如此。 Terraform 不会创建您用作后端的 S3 存储桶。在使用此 Terraform 代码之前,您必须自行创建 S3 存储桶。这是没有办法解决的。如果您希望这个 S3 存储桶由 Terraform 管理,那么您必须将其分离到一个单独的 Terraform 模板中,并在此 Terraform 代码之前运行,但是在新的 Terraform 代码中,您会遇到与状态存储相同的问题。

如果您想在 GitHub Actions 中自动执行整个过程,那么您可以在运行 Terraform 代码之前使用 AWS CLI Tool 创建 S3 存储桶。您必须在 GitHub Actions 中添加某种逻辑来检查存储桶是否存在,并且仅运行 CLI 命令来创建存储桶一次,因为如果存储桶已存在,则创建将会失败。

© www.soinside.com 2019 - 2024. All rights reserved.