こちらの神本を見ながら、詰まったところをつらつらと書いていきます。
https://www.amazon.co.jp/dp/B07XT7LJLC
第5章 権限管理
(1)Error: Failed to query available provider packages
エラー内容
ある程度進んだところで、コードを実行しようと、"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)provider.aws.region
内容
コードを実行したら、リージョンを聞かれた。
$ terraform apply
The region where AWS operations will take place. Examples
are us-east-1, us-west-2, etc.
Enter a value:
対処法
シェルの環境変数がリセットされてしまっているので、セットし直す。
$ history 100 | grep AWS_
$ export AWS_ACCESS_KEY_ID=(アイディー)
$ export AWS_SECRET_ACCESS_KEY=(キー)
$ export AWS_DEFAULT_REGION=(リージョン)
$ terraform apply
第8章 ロードバランサーとDNS
(3)Error: error deleting LB: OperationNotPermitted: Load balancer
エラー内容
削除しようと、"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
のエラーが発生。
対処法
ロードバランサーの削除の保護が有効になっているので、AWSのコンソール画面で有効のチェックを外す
EC2 → ロードバランサー → アクション → 属性の編集
(4)Error: error deleting S3 Bucket
エラー内容
削除しようと、"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で安いドメインを取得する
自動更新の解除処理忘れずに!
https://www.onamae.com/
2.ホストゾーンをAWSコンソールで作成
3.DNSをお名前.comに登録する
4.terraformのコードに所得したドメインを書く
data "aws_route53_zone" "example" {
name = "取得したドメイン名"
}
(6)リスト8.8 Error: Invalid index
エラー内容
$ 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]
(7)8.13 Error: Unsupported argument
エラー内容
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.
対処法
書き方が古いみたいなので、書き方を変える
condition {
path_pattern {
values = ["/*"]
}
}
第14章 デプロイメントパイプライン
git commitが重い
GitHubのレポジトリにpushしようとすると、とても重いので、gitignoreします。
$ 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
Error creating CodePipeline: InvalidActionDeclarationException
エラー内容
$ 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" {
対処法
こちらの記事を参考にしました。というか、この記事見れば、全般的に理解できる。神記事。
https://qiita.com/ayatothos/items/27024e8168a8b766bcd3
追記
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パラメータから指定
}
}
}
~後略~