在参考书《实践Terraform》中遇到了困难
在看这本神秘的书时,我会边看边记录想到的点子。
第五章 权限管理
(1) 错误:无法查询可用的供应商安装包
错误内容 (Error content)
在一定程度上前进后,尝试执行代码时,执行了”terraform apply”。
$ terraform apply
│ Error: Could not load plugin
│
│
│ Plugin reinitialization required. Please run "terraform init".
│
│ Plugins are external binaries that Terraform uses to access and manipulate
│ resources. The configuration provided requires plugins which can't be located,
│ don't satisfy the version constraints, or are otherwise incompatible.
│
│ Terraform automatically discovers provider requirements from your
│ configuration, including providers used in child modules. To see the
│ requirements and constraints, run "terraform providers".
│
│ failed to instantiate provider "registry.terraform.io/hashicorp/awb" to obtain schema: unknown provider
│ "registry.terraform.io/hashicorp/awb"
因为发生了错误,所以我输入了”terraform init”。
$ terraform init
│ Error: Failed to query available provider packages
│
│ Could not retrieve the list of available versions for provider hashicorp/awb: provider registry registry.terraform.io does not have
│ a provider named registry.terraform.io/hashicorp/awb
│
│ All modules should specify their required_providers so that external consumers will get the correct providers when using a module.
│ To see which modules are currently depending on hashicorp/awb, run the following command:
│ terraform providers
然后接连出现错误。
应对方法
我把 “aws_lb” 的拼写错误地写成了 “awb_lb”。
(2) 服务提供商.亚马逊服务.地区
请提供更多上下文信息。
当执行代码时,会被询问地区。
$ terraform apply
The region where AWS operations will take place. Examples
are us-east-1, us-west-2, etc.
Enter a value:
处理方法 fǎ)
由于Shell环境变量被重置,所以需要重新设置。
$ history 100 | grep AWS_
$ export AWS_ACCESS_KEY_ID=(アイディー)
$ export AWS_SECRET_ACCESS_KEY=(キー)
$ export AWS_DEFAULT_REGION=(リージョン)
$ terraform apply
第八章 负载均衡器和DNS
(3) 错误:删除负载均衡器时发生错误:OperationNotPermitted: 负载均衡器无法删除。
错误内容 (Mistake content)
我试图删除,输入了”terraform destroy”。
$ terraform destroy
Error: error deleting LB: OperationNotPermitted: Load balancer 'arn:aws:elasticloadbalancing:ap-northeast-1:〜' cannot be deleted because deletion protection is enabled
发生了错误。
处理方法
错误:删除S3 桶时出现错误。
错误消息
我输入了”terraform destroy”来尝试删除。
$ terraform destroy
Error: error deleting S3 Bucket (〜〜〜): BucketNotEmpty: The bucket you tried to delete is not empty
发生了错误。
应对方法
由于S3中仍然保留有访问负载均衡器的日志,所以需要删除。
参考文章:https://qiita.com/ChaseSan/items/11fe05926c700220d3cc
$ aws s3 rm s3://bucket-name --recursive
(5) 域名注册
1. 在お名前.com上获取廉价的域名。
在AWS控制台上创建主机区域。
将DNS注册到お名前.com。
写入从 terraform 代码中获取到的域名
data "aws_route53_zone" "example" {
name = "取得したドメイン名"
}
(6) 错误:无效索引
错误内容 (é cuò
$ terraform apply
Error: Invalid index
on lb.tf line 100, in resource "aws_route53_record" "example_certificate":
100: name = aws_acm_certificate.example.domain_validation_options[0].resource_record_name
This value does not have any indices.
处理方法
因为写作方式似乎有点过时,所以要改变写作方式。
参考文章:https://qiita.com/fullsat_/items/a2843ec5fe36484f8e19
tolist(aws_acm_certificate.cert.domain_validation_options)[0]
错误:不支持的参数
错误内容 (Error content)
terraform apply
Error: Unsupported argument
on lb.tf line 178, in resource "aws_lb_listener_rule" "example":
178: field = "path-pattern"
An argument named "field" is not expected here.
处理方法 fǎ)
由于写作方式看起来有些陈旧,所以需要改变写作方式。
condition {
path_pattern {
values = ["/*"]
}
}
第14章 部署管道
提交git commit很慢。
当我试图将文件推送到GitHub的存储库时,由于速度非常慢,我选择忽略此操作。
$ vim .gitignore
.terraform
.terraform.lock.hcl
terraform.tfstate
terraform.tfstate.backup
.terraform.tfstate.lock.info
$ git init
$ git add .
$ git commit -m 'modified gitignore'
$ git remote add ~~~~
$ git push origin master
创建 CodePipeline 时出现错误:无效的操作声明异常。
错误内容 (Mistake content)
$ terraform apply
...
Error: Error creating CodePipeline: InvalidActionDeclarationException: Action configuration for action 'Source' is missing required configuration 'OAuthToken'
on cpl.tf line 126, in resource "aws_codepipeline" "example":
126: resource "aws_codepipeline" "example" {
处理方法
我参考了这篇文章。或者说,看了这篇文章后,我总的来说能理解得很好。太棒了。
补充说明
data "aws_ssm_parameter" "github_token" {
name = "/continuous_apply/github_token"
}
更正
# リスト14.10
# CodePipelineの定義(例では3つのステージで実装する)
resource "aws_codepipeline" "example" {
name = "example"
role_arn = module.codepipeline_role.iam_role_arn
# Sourceステージ:GitHubからソースコードを取得する
stage {
name = "Source"
action {
name = "Source"
category = "Source"
owner = "ThirdParty"
provider = "GitHub"
version = 1
output_artifacts = ["Source"]
configuration = {
~中略~
PollForSourceChanges = false
OAuthToken = data.aws_ssm_parameter.github_token.value # SSMパラメータから指定
}
}
}
~後略~