由于尝试使用terraform import,所以分享一下相关步骤和个人注意事项

terraform import的步骤

用一个简单的例子尝试对S3存储桶进行导入。
先声明一下,terraform import并不会将当前AWS资源的信息整理好写入terraform的tf文件中,它只是将资源信息记录在tfstate文件中。
接下来就是根据terraform的文档和tfstate文件手动编写tf文件了。

将希望导入的资源记录在main.tf中。

请以(resource type) (resource name)的格式进行描述。
※资源名是terraform内部的标识名。

resource "aws_s3_bucket" "test" {
}

使用terraform import命令将状态保存到terraform.tfstate文件中。

以中文为母语,将以下内容释义为中文,只需要一个选项:
使用”terraform import (资源类型).(资源名称) (导入资源的ID)”的格式执行命令。
※如果为S3存储桶,则导入资源的ID为存储桶名称。

terraform import aws_s3_bucket.test tomohiko.io

如果出现错误,请执行terraform init以安装AWS插件。

从terraform.tfstate文件中提取所需的参数,并将其写入main.tf文件中

参考terraform的文档和terraform.tfstate文件中记录的导入资源的状态,来完成main.tf文件。

如果只是创建默认设置的S3,只需指定bucket即可。

resource "aws_s3_bucket" "test" {
  bucket = "tomohiko.io"
}

个人的迷恋点

IAM角色

为定义IAM角色,需要定义以下三个资源和一个数据。

政策

    • aws_iam_role

 

    • aws_iam_policy_document

 

    aws_iam_role_policy

数据

    aws_iam_policy_document

如果从我写的代码中提取一部分的话,会是这样的感觉。

resource "aws_iam_role" "IAMロール名" {
  name               = "IAMロール名"
  assume_role_policy = "${data.aws_iam_policy_document.IAMロール名.json}"
}

data "aws_iam_policy_document" "IAMロール名" {
  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["ecs-tasks.amazonaws.com"]
    }
  }
}

resource "aws_iam_role_policy" "IAMロール名" {
  name   = "IAMロール名"
  role   = "${aws_iam_role.IAMロール名.id}"
  policy = "${data.aws_iam_policy_document.IAMロール名-policy.json}"
}

data "aws_iam_policy_document" "IAMロール名-policy" {
  statement {
    actions = [
        "s3:*"
    ]
    resources = [ "*" ]
  }
}

嵌入式计算系统 (ECS)

在容器启动时,会出现这样的错误提示。

CannotPullContainerError: API error (500): Get https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/: net/http: request canceled while waiting for connection"

在AWS的文档中已经详细说明了,只有使用公共子网加自动分配的公共IP才能连接到互联网,才能拉取容器镜像。
(或者关闭自动分配IP并设置NAT网关和路由配置)

无法拉取容器镜像错误- 亚马逊弹性容器服务

bannerAds