以下の内容はhttps://techblog.cartaholdings.co.jp/entry/2025/02/05/113000より取得しました。


O'Reilly Online LearningのCloud Labsで、Terraformを使ってみたらハマったこと

こんにちは!fluctの新卒1年目エンジニアのshunshunです!

CARTAではO'Reilly Online Learningを契約しているのですが、そこでのつまづきを共有します。

techblog.cartaholdings.co.jp

結論だけ

  • O'Reilly Online LearningではCloud Labsという機能を使ってAWSの機能などを短時間試すことができます
  • ただし、リージョンはバージニア(us-east-1)しか使うことはできません
  • 詳解Terraformのコードはオハイオ(us-east-2)のリージョンを例としていたので、そのまま使えなくてハマってしまいました

起こったこと

私は今のチームで主にアプリケーションを書いています。ただ最近はインフラも巻き込んで技術的に問題を解決したいと思うようになりました。

しかし私はAWSのマネージメントコンソール(以下、マネコン)なら触ったことはあるのですが、私の所属するfluctではTerraformを使ってインフラを管理しています。したがって、インフラにも手を出す場合は、Terraformの読み書きができることが求められます。

そこで、Terraformのコードに一度も触れたことがない私は、O'Reilly Online Learning にある「詳解 Terraform 第3版 ―Infrastructure as Codeを実現する」を手に取って学ぶことにしました。

CARTAが契約しているO'Reilly Online Learning を使えば、O'Reillyの本が無料で読める上、Cloud Labsという素晴らしい機能があって、なんとAWSなどのクラウドを無料で体験できるのです。

早速詳解Terraformを読み進め、以下のようなmain.tfを書き、最初のコード実行を行ってみました。

(* コードは平凡なEC2インスタンスのデプロイをするものです)

provider "aws" {
  region = "us-east-2"
}

resource "aws_instance" "example" {
  ami           = "ami-0fb653ca2d3203ac1"
  instance_type = "t2.micro"
}

initしてplanを見て、人生初のapplyを行い、華々しいTerraformデビューを飾るはずでしたが、applyは無情にも失敗しました。

aws_instance.example: Creating...
╷
│ Error: creating EC2 Instance: operation error EC2: RunInstances, https response error StatusCode: 403, RequestID: xxx, api error UnauthorizedOperation: You are not authorized to perform this operation. User: arn:aws:iam::xxx:user/user-xxx is not authorized to perform: ec2:RunInstances on resource: arn:aws:ec2:us-east-2:xxx:instance/* with an explicit deny in a service control policy.

どうやら権限がなく、認可で怒られているようです。

ここからが大変だった

Terraform初心者の私は、何か設定間違えたかな〜と不安になりましたが、本を写経しただけで、さして難しいこともしていないことからそうではないと思いました。

マネコンに入ってみて、IAMの権限を見てみます。

しかし画面いっぱいの権限エラーで、ついているポリシーを見ることは叶いませんでした。

では次にリージョンをオハイオ(us-east-2)にして、EC2をマネコンから動かしてみようと思います。

しかしここも真っ赤。

なんとEC2の一覧を見ることすら叶いません。O'Reilly、君は一体何ならできるんだ...!

天啓

少し休憩をしてマネコンに戻ったとき、AWSのリージョンって基本バージニア(us-east-1)だよなーと思ってそこでEC2の画面を開いてみました。

すると先ほどのエラーもなく、EC2のインスタンスを作ってみると無事に成功!

あとはmain.tfの記述を以下のようにリージョンとAMIを変えてみました。

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-0c614dee691cbbf37"
  instance_type = "t2.micro"
}

これでapplyすると...

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

こちらも成功しました!

終わりに

ということで無事にO'Reilly Online Learningの Cloud Labsを使って、詳解Terraformに入門することができました。

いつか実戦でもTerraformをやってみたいですね。




以上の内容はhttps://techblog.cartaholdings.co.jp/entry/2025/02/05/113000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14