由于尝试使用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网关和路由配置)
无法拉取容器镜像错误- 亚马逊弹性容器服务