6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

参考書「実践Terraform」で詰まったところ

Last updated at Posted at 2021-06-19

こちらの神本を見ながら、詰まったところをつらつらと書いていきます。
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 → ロードバランサー → アクション → 属性の編集
loadbalancer.png

(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/
お名前ドットコム.png

2.ホストゾーンをAWSコンソールで作成

Route53 → ホストゾーン → ホストゾーンの作成
ホストゾーン.png

3.DNSをお名前.comに登録する

最後のドット"."は要らない。
route53.png

お名前DNS.png

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パラメータから指定
      }
    }
  }
~後略~
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?