English 中文(简体)
如果Terraform用于建立基础设施,是否必须用于进行编码部署?
原标题:If Terraform is used to set up infrastructure, does it have to be used for code deployments?
  • 时间:2023-08-24 16:08:25
  •  标签:
  • terraform

目前,利用Terraform在天体上建立基础设施,同时利用它来部署排放物。

由于Terraform建立了我们的基础设施,使用Faragate的EC2号案例显示,多克图像的哪一种版本将使用,我们使用Terraform,因为它将用正确的图像版本更新大范围的实例等。

由于Terraform用于基础设施建设,如何在没有使用Terraform的情况下进行部署? 还是每个人都使用Terraform来部署守则(假设基础设施没有变化)?

问题回答

这确实取决于您的具体用途。

如果你已经使用《赫尔姆斯图》来部署一些物品,那么你就应该继续利用Terraform更新这一图表。

如果你不部署图表,你就可以以另一种方式部署。

However,这不是一个好的做法,因为如果Terraform重新提出你的榜样,你就必须再次部署你的申请。 如果你已经使用赫尔姆斯图表供应商,那么就坚持这一规定,并利用Terraform来配置你的赫尔姆斯图。

在我看到的大多数小规模部署中,基础设施和赫尔姆斯图都是用Terraform简单化来部署的。 有可能通过管道部署使用梯田式的ECS,然后呼吁另一产品部署你的申请。 如果你将部署许多申请,那么你可能想研究这一办法。

不过,我建议,如果两者都使用Terraform,你会考虑像这样把我们的Terraform部署层为一层:

  1. Root Module
    b. Sub-Module 1 - Creates ECS
    c. Sub-Module 2 - Deploys Helm, and receives the resource details as an output from sub-module 1.

这样,你就可以为基础设施建立一个通用的ECS单元(1),然后是另一个单元(2),向ECS部署头盔。 这把基础设施与应用分开,使Terraform更加清洁。

希望是有意义的。

注:根据主要问题,这一答复可能略为笼统。 如果这偏离了轨道,我就没有专家在赫尔姆斯图表中进行道歉。

可使用地形图来部署基础设施和编码,特别是如果你正确使用。

我采用了这两种方法。

  1. Use terraform with articfacts which are versioned/tagged.
  2. Use CodeDeploy
  3. Use cli - especially if you are using Github Actions or something similar

在发展中或更低的环境中,当你合并我们的分支机构时,我们能继续部署进发展中国家时,它会更好地利用CLI。 在较高环境中,你可能希望以硬性变量为版本等进行部署。

关于可追踪性,我会把“SHA”作为标签,使你知道在你的环境中部署哪些版本。

在树立形象时,如在你的管道中,我会使用这样的东西。

# login to ECR
aws ecr get-login-password --region <<region>> | docker login --username AWS --password-stdin <<accountid>>.dkr.ecr.<<region>>.amazonaws.com

# tag your local image with ENVNAME such as "dev"
docker tag <localimagename> <<accountid>>.dkr.ecr.<<region>>.amazonaws.com/<<repositoryname>>:<<ENVNAME>>
# also tag with SHA for promotion to higher envs
docker tag <localimagename> <<accountid>>.dkr.ecr.<<region>>.amazonaws.com/<<repositoryname>>:<<GIT SHA>>

# you can get the SHA of the commit depending on GITHUB or Code commit etc. Check documentation

# Next you can push this into your ECR
docker push <<accountid>>.dkr.ecr.<<region>>.amazonaws.com/<<repositoryname>>:<<ENVNAME>>
docker push <<accountid>>.dkr.ecr.<<region>>.amazonaws.com/<<repositoryname>>:<<GIT SHA>>

# Finally deploy into ECS
aws ecs --region eu-west-2 update-service --cluster <<yourclustername>> --service <<yourservicename>> --force-new-deployment


同样,在座标上,你也可以使用类似的东西。

variable "version" {
    type=string
    default="dev"
}

resource "aws_ecs_task_definition" "service" {
  family = "service"
  container_definitions = jsonencode([
    {
      name      = "yourservicename"
      image     = "<<accountid>>.dkr.ecr.<<region>>.amazonaws.com/<<repositoryname>>:${var.version}"
      cpu       = 10
      memory    = 512
      essential = true
...

现在,从发展中国家开始,你可以不断部署更多兵力,你只能把变式版本定在适当的SHA。





相关问题
Terra Custom Read

我在做的是按习俗分类的提供者,对标签有选择性的投入,但我发现的挑战是,扼杀使用ValueString()从主要价值中取回。 f,不确定......

Retrieve IDs in Terraform before script execution

I m a freshman and I don t know if I have a general thinking error but how do I get around the issue that when I want to roll out a script that there are some IDs missing that I would only get with ...

The plugin.(*GRPCProvider)

I am trying to deploy a Terraform stack from a Linux EC2 and getting the following error: The plugin.(*GRPCProvider).ApplyResourceChange request was cancelled. and │ The plugin.(*GRPCProvider)....

热门标签