Amazon web services 如何构造Terraform,以便在应用程序之间引用底层AWS资源?
我正在使用Terraform创建AWS ECS资源。我计划将两个应用程序部署为Docker容器,它们共享同一个ECS集群,这样我就可以在EC2实例上拥有多租户 我有三个独立的Git回购协议,其中包含各自的Terraform文件:Amazon web services 如何构造Terraform,以便在应用程序之间引用底层AWS资源?,amazon-web-services,amazon-ecs,terraform,Amazon Web Services,Amazon Ecs,Terraform,我正在使用Terraform创建AWS ECS资源。我计划将两个应用程序部署为Docker容器,它们共享同一个ECS集群,这样我就可以在EC2实例上拥有多租户 我有三个独立的Git回购协议,其中包含各自的Terraform文件: 跨2个应用共享的基础ECS资源-即ECS群集、ec2实例、安全组、ASG、启动配置等 第一次申请。除了源代码之外,我还有创建ECS服务、任务、ELB、ELB安全组等的Terraform配置,这些配置依赖于Repo1创建的资源 第二次申请。使用相同的AWS资源集创建类似的
此外,实际上存在一个循环依赖关系,因为理想情况下,repo1也知道repos2和repos3中创建的资源。我特别希望ec2安全组(SG)为ELB SG打开端口。如果这也是可能的话,那就太棒了。澄清一下,您将应用程序的地形配置存储在自己的repo中?Terraform似乎期望所有具有相互依赖输出的资源都位于同一目录中,从而映射到同一状态文件。您可能需要一个能够(不幸的是,有些是动态的)从另一个应用程序的状态文件读取数据的工具。(我一直想知道如何解决类似的情况。我们确实对所有状态文件使用S3存储桶,这使它更容易,但提取状态文件并从中提取仍然感觉有点黑客味。)是的,这正是我的使用案例。那么您已经通过从其他Terraform配置中提取状态文件解决了您的解决方案?您是否手动解析状态文件以获取所需的arn或输出值?或者Terraform是否从目录中的状态文件中读取,然后您可以像往常一样在.tf文件中引用它们,例如“${aws_elb.my_elb.name}”我还没有真正实现这一点(仍然在缓慢地将现有基础设施迁移到Terraform),但是我希望我可以为我需要的资源添加
output
定义,然后在我已经有的包装器Rakefile中,从S3 bucket中提取所需的tfstate文件,使用terraform output-state=aws_elb.my_elb.name
或直接解析tfstate JSON,将数据放在一个模块中(虽然terraform配置可以从文件中获取信息,但它们还不能运行命令AFAIK),并以这种方式填充。是的,它很粗糙。我刚刚看到这篇文章和远程状态
。如果您的状态文件已经存在于s3中,看起来您可以直接引用它:-很好!肯定会让它更容易。是的,我们每个环境都有单独的VPC,我想将它们的Terraform配置与以前的分开prod上发生了很多愚蠢的事情,但是有一个对等的VPC,其中包含我们的管理/监控内容,需要每个人都参考。为了澄清,您正在将应用程序的Terraform配置存储在它们自己的repos中?Terraform似乎希望所有具有相互依赖输出的资源都位于同一目录中,从而映射到同一个statefile。您可能需要一个可以(不幸的是,有些动态地)从另一个应用程序的状态文件读取的工具。(我一直在想如何解决类似的情况。我们对所有的状态文件都使用S3存储桶,这使它更容易,但提取状态文件并从中提取仍然感觉像黑客一样。)是的,这正是我的使用案例。因此,您通过从其他Terraform配置中提取状态文件解决了您的解决方案?您是否手动解析状态文件以获取所需的arn或输出值?或者Terraform是否从状态文件中读取状态文件(如果它们位于目录中),然后您可以像往常一样在.tf文件中引用它们,例如“${aws_elb.my_elb.name}“我还没有真正实现它(仍然在缓慢地将现有基础设施迁移到Terraform),但希望我能为我需要的资源添加output
定义,然后在我已有的包装器Rakefile中,从S3 bucket中提取所需的tfstate文件,使用terraform output-state=aws_elb.my_elb.name
或直接解析tfstate JSON,将数据放入(可能)模块中(虽然terraform配置可以从文件中获取信息,但它们还不能运行命令AFAIK),并以这种方式填充。是的,它很粗糙。我刚刚看到这篇文章和远程状态
。如果您的状态文件已经存在于s3中,看起来您可以直接引用它:-很好!肯定会让它更容易。是的,我们每个环境都有单独的VPC,我想将它们的Terraform配置与以前的分开prod上发生了很多愚蠢的事情,但是有一个窥视的VPC,其中包含我们的管理/监控内容,每个人都需要参考。