TerraformをAWS CloudShellで開発する環境を整える

こんにちは!エンジニアの君島です。

ギークフィードでもInfrastructure as Code(IaC)の波がきました。

AWS CloudFormationの記事もアップされましたね。

今回はAWS CloudShellの特徴を考慮しつつ、Terraformをお手軽に始められる環境を整えてみました。

併せて、開発しやすくする設定や注意する点も紹介していきますのでお好みに合わせてお読みください。

 

Terraformとは

Terraformは、HashiCorp社で開発したオープンソースのIaCを実現するためのツールです。構築ができる対象はAWSだけでなく、GCPやAzureと様々なProviderが用意されています。

 

AWS CloudShellとは

AWS CloudShellはブラウザベースの事前認証済みシェルです。マネジメントコンソールからは上部の赤枠のアイコンからも実行できます。

 

以下のような特徴があります。

  • 権限はマネジメントコンソールにアクセスするIAMユーザーの権限
  • 実行環境はAmazon Linux2
  • 1GBのストレージがある
    • ただし、/home以下のみ
      • 永続させたいファイルはここに置くか、初期設定用のスクリプトを置くなどしよう
    • 最後のセッションから120日間永続する
    • dfで確認してみた

 

 

  •  セッション永続性
    • 2,30分放置でセッションが切れてしまう
      • 数秒~数十秒待てば再接続できる

     

 

    • アクティブでも12時間継続しているセッションも切れます

 

  •  同時shell数10
    • プロセス自体は10以上いけた

 

TerraformをAWS CloudShellで開発することを考える

Terraformを開発、実行できる環境というといくつか考えられます。ローカルPC、EC2、Cloud9等々あります。

そこにAWS CloudShellを追加して考えてみます。

AWS CloudShellを使った場合に以下のようなメリットがあります。

  • AWSアカウント、リージョン、マネジメントコンソールに認証するユーザーごとにshellが立ち上がるので、実行環境自体を管理する工数は少ない
  • クレデンシャル情報をコードに書く必要がない
  • 料金無料
  • Amazon Linux2インスタンス相当の初期設定が既に用意されている
  • マネジメントコンソール上なので、実行結果の確認がすぐできる

 

一方で以下のような懸念もあると思いますが、以下のように仕様だと割り切って小さく始める上では問題無いと判断しました。

懸念点 検討結果
自由に使えるストレージが1GB 十分大きい。
2,30分でセッションが切れて、

ホームディレクトリ以外はリサイクルされる

環境がどこであろうと、コードはgit管理しよう。

永続させたいバイナリや設定はホームディレクトリに置き、セッションが切れたらパス通す。

あるいは初期設定をスクリプト化すれば。

120日アクセスしないとホームディレクトリもリサイクルされる そこまで放置するなら本当に使わないでしょう。

上に書いたが、コードはgit管理。

同時実行の上限が10 Terraform実行は排他的に行うし、10人以上で使うならリージョン分けたりアカウント分けたりもできるのであまり問題視しない。
ローカルのエディタ使いたい ローカルでどうぞ。コードはgit管理。

 

では、実際に環境を整えていきましょう。

 

TerraformをAWS CloudShellで開発する環境を整える

Terraformのインストール

yumよりtfenv経由の方がホームディレクトリにバイナリが残ったり、バージョン切り替えも容易なのでお勧めです。

 

shellのセッションが切れても、パスかシンボリックリンクを設定すれば再インストールは必要有りません。

例えば、以下のコマンドを実行すればOKです。

 

Vimのプラグイン追加

私はエディタはvim派なので、vim-terraformを使用します。カラースキームと自動整形は便利だと思います。こちらも初回のみの実行でOKです。

 

以上で、AWS CloudShell上での環境整備ができました。

以降は、Terraformのベストプラクティスと呼ばれるようなポイントであり、注意した方が良いポイントをまとめておきます。

 

ベストプラクティスかつチェックポイント

Terraformバージョンを固定する

 

プロバイダバージョンを固定する

 

削除操作を抑止する

リソースブロックに以下を入れると削除を抑止できる。

 

コードフォーマットをかける

vim-terraformを入れていれば使用しないかもしれませんが、一括でも実行できますので、記載しておきます。

  • コードフォーマット

 

  • フォーマット済みチェック(未フォーマットは0以外)

 

バリデーションをかける

変数の未セットや構文エラーチェック。スニペットです。

 

オートコンプリートを有効にする

以下コマンドを打ってshell再起動で有効化します。.bashrcに設定が書かれますので1回実行すればOK。

 

プラグインキャッシュを有効にする

init時のプロバイダファイルの都度ダウンロードをキャッシュすることができます。時間削減になります。

ホームディレクトリで以下を実行します。

保存先も作成しておきます。

 

TFLintで不正なコードを検出する

  • インストールの仕方は、macでないとこちら。

 

  • チェックする

 

tfsecでセキュリティ上問題のあるコードを検出する

  • インストール(version 1.18の場合)

 

  • セッション切れてもパスかシンボリックリンクの設定すればOK

 

tfstateファイルの管理の仕方

  • リモート管理すること(git管理ではない)
  • チーム開発するならばDynamoDBでステートロックをかけること
  • 本番、開発など環境ごとに作ること

 

まとめ

AWS CloudShellの特徴を考慮しつつ、Terraform開発をする環境を考えてまとめてみました。

これで、セッションが切れても継続的にお手軽にTerraform開発ができると思います。

 

宣伝

ギークフィードではAWSエンジニアを募集しています。

技術力に自信がある方も、一緒にAWSを利用したサービスを開発したい、AWSでの構築をIaCで実践したいという方も募集しています。

興味がある方はこちらからエントリーをお願いします!

AWS・開発エンジニア募集

 

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
君島翔
君島翔
AI事業部事業部長株式会社ギークフィード
Java, .NET系の言語が得意。Laravelも使います。 エディタはvim派。 自分が楽するためにテストやビルド、デプロイを自動化させたい。 2022-2023 AWS Ambassador / 2022-2023 Japan AWS Top Engineer / 2022-2023 Japan AWS ALL Certifications Engineer

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ