Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何构造Terraform,以便在应用程序之间引用底层AWS资源?_Amazon Web Services_Amazon Ecs_Terraform - Fatal编程技术网

Amazon web services 如何构造Terraform,以便在应用程序之间引用底层AWS资源?

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资源集创建类似的

我正在使用Terraform创建AWS ECS资源。我计划将两个应用程序部署为Docker容器,它们共享同一个ECS集群,这样我就可以在EC2实例上拥有多租户

我有三个独立的Git回购协议,其中包含各自的Terraform文件:

  • 跨2个应用共享的基础ECS资源-即ECS群集、ec2实例、安全组、ASG、启动配置等

  • 第一次申请。除了源代码之外,我还有创建ECS服务、任务、ELB、ELB安全组等的Terraform配置,这些配置依赖于Repo1创建的资源

  • 第二次申请。使用相同的AWS资源集创建类似的repo 2,并利用repo 1创建的AWS资源

  • 回购协议2和3取决于回购协议1。具体来说,repo 1创建了ECS集群。在repos 2和repos 3中创建ECS服务时会引用此内容。现在我已经硬编码了ARN,但我想删除硬编码的值。这可能吗?我是否需要单独或不同地构建我的项目和地形


    此外,实际上存在一个循环依赖关系,因为理想情况下,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,其中包含我们的管理/监控内容,每个人都需要参考。