Terraformで再現:計画編(AWSでJenkinsを動かす)

 こんにちは。2022年入社新卒エンジニアの石川です。この記事では、最近AWSでJenkinsを動かすということをやったので、それをTerraformで再現するとこんな感じになりますという内容の計画編を書いていきます。 ほんとはTerraformで実装したとこまで書きたかったのですが、本来の業務で今はいっぱいいっぱいなので...実装編はもうたっぷりと書く予定です。 おまけとして、AWSで多要素認証を適用している時にTerraformを実行できるようにするための方法も書いています。


AWSで何をしたのか

VPCを作成し、EC2インスタンスを立てて、そこでJenkins君にジョブを動かしてもらうように設定した感じです。そこからロードバランサをくっつけたりもしました。

こんな感じですね。


Q. なぜEC2インスタンス一つなのにロードバランサを使うの?

  1. 外部からのアクセスにhttpsを利用したいから。
    外部からhttpsでアクセスしたいと考えた時、ロードバランサがない場合はEC2インスタンスでのSSL証明書の管理などの手間が発生する。

ロードバランサにSSL証明書の管理を任せると、外部とロードバランサの通信はhttps、ロードバランサとEC2インスタンスはhttpとすることができる。

後から調べて分かったが、インスタンスが1つであるならば同じようなことができる他の方法としてCloudFrontがあるとのこと。

 Q.なぜ利用しないのにサブネットが2つあるの?

  1. ロードバランサには異なる2 つ以上のアベイラビリティーゾーンからのサブネットが必要だから。
    詳しくはAWS公式ドキュメントのApplication Load Balancer の作成をどうぞ。

Terraformで実装する(計画編)

それでは次にTerraformで再現するための計画を立てます。

Terraformの非常に簡単な書き方としては、main.tfファイルにひたすら書いていけばよいのですが、それは何かと不便があるのでモジュール化をしていくことになります。
現段階の予定ではこんな感じの構造を考えていきます。

次回の実装でこの構造がどのように変化するのかお楽しみに。


C:.

│  main.tf

│  outputs.tf

│  variables.tf

│  

└─modules

    ├─alb

    │      main.tf

    │      outputs.tf

    │      variables.tf

    │      

    ├─ec2

    │      main.tf

    │      outputs.tf

    │      variables.tf

    │      

    ├─sg

    │      main.tf

    │      outputs.tf

    │      variables.tf

    │      

    └─vpc

            main.tf

            outputs.tf

            variables.tf


おまけ

 awsで多要素認証設定をしていると


$ terraform apply


が実行出来ません。(403エラー)

この時の解決方法は以下のようになります。


  1. 「Amazonコンソール -> IAM -> ユーザ->自分の名前 -> 認証情報->セキュリティ認証情報->アクセスキーを作成」 でアクセスキーを作成する。

  2. アクセスキーのcsvを取得する。

  3. 以下のコマンドを実行し、.awsフォルダを作成する。(AWS Access Key IDなどを入力する必要あり)


$ aws configure 


  1. 以下のコマンドを実行してmfaトークンを取得する。(arn-of-the-mfa-deviceやcode-from-tokenは自分で適宜入力)


$ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token


  1. 「.awsフォルダ -> credentials」に以下のようなものを追記する。(***************は自分で適宜入力)


[mfa]

aws_access_key_id = ***************

aws_secret_access_key = ***************

aws_session_token = ***************


  1. main.tfに以下のようなプロファイルを設定する。


provider "aws" {

  region = "us-west-1"

  profile = "mfa"

}


 以上の設定を行えば、$ terraform applyが実行できるようになるはずです。より正確な情報はawsの公式を見ていただければと思います。

    自分が参考にしていた記事は、こちらの記事こちらの記事になります。 


まとめ

以上がTerraformの計画編になります。実装編までお待ちください