主要关注的是如何创建到这些文件夹的映射,因为文件夹和地形模块位于不同的存储库中。
resource "aws_s3_bucket_object "upload" {
bucket = "bucketname"
key = "how_to_procede"
source = "how_to_procede"
}
不幸的是,GitHub Terraform提供程序没有提供任何数据源来获取存储库中的文件列表或检索单个文件。
因此,如果存储库是私有的,唯一可行的方法是将存储库克隆到运行Terraform的机器上,然后使用fileset函数获取存储库中的文件列表,然后在aws_s3_bucket_object
资源上的for_each
中使用该列表上传每个文件。您需要在一个外部shell命令中进行克隆;您可以使用这样一个模块来实现这一点。
如果存储库是公共的,并且您提前知道要将哪些文件发送到S3,那么您可以使用HTTP提供程序从其GitHub URL下载文件,解析响应体以提取文件内容,然后在aws_s3_bucket_object
资源的content
字段中指定这些内容。
自2021年10月以来,GitHub Terraform提供程序拥有数据源GitHub_repository_file。此数据源允许您读取GitHub存储库中的文件。然后,您可以使用Terraform aws提供商的aws_S3_object资源将文件上传到S3。
provider "aws" {
region = "us-east-1"
access_key = "ABC123"
secret_key = "dEf456"
}
provider "github" {
token = "xyz890"
owner = "some-owner"
}
data "github_repository_file" "my_file" {
provider = github
repository = "my-repository"
file = "my_file.py"
}
resource "aws_s3_object" "my_file_on_s3" {
bucket = "my-bucket"
key = "my_filename_on_s3"
content = data.github_repository_file.my_file.content
}