やりたいこと
AWS内にCloud9を利用してTerraformの実行環境を作成します。
「自分のローカル環境にあまり余計なソフトウェアをインストールしたくないな。」
「ローカル環境に依存せず、毎回決まった環境を作成して再現性を重視したい。」
そんな方にこの記事が役に立てればと思います。
概要
パターン1
■Cfnテンプレート→Github:cloud9-terraform-public-environment
【ポイント】
- クライアントからCloud9インスタンスへSSH接続
- パブリックサブネット配置のためインターネットと直接接続
- 必要コストは「Cloud9インスタンス利用料」のみ
パターン2
■Cfnテンプレート→Github:cloud9-terraform-private-environment
【ポイント】
- SystemManagerのSessionManagerからCloud9インスタンスへはポートフォワーディング(参考記事1.)を利用して接続します。
- プライベートサブネット配置でインターネットからのインバウンド通信はなし
- 必要コストは「Cloud9インスタンス+NATGateway+VPCEndpoint」利用料
【構築時に気をつけたこと】
・セッションマネージャがCloud9インスタンスに接続するためのVPC要件など・IAMロールに必要な権限や信頼ポリシーなど
上記の環境をCloudFormationでそれぞれ作成していきます。
※なおハンズオンの各種作業はコスト観点からパターン1のもので実施します。
ハンズオン
それでは、ハンズオンです。
※資料にGoogleスライドを使用していますが、文字が見づらいため「︙」ボタンを押して「全画面表示に変更」で確認頂きたいと思います。Escで全画面表示解除です。
-
Cfnテンプレートで環境構築
概要のGithubから必要なファイルを取得し、以下のスライドの通り実行。
- Cloud9のAMTCを無効化
一部権限の制限があり、またIAMロールを切り替えるためAMTCは無効化します。
AMTCについて解説されている記事がありますので以下を参照AWS Cloud9環境で利用できる一時クレデンシャル『AWS Managed Temporary Credentials』について調べてみた
-
Cloud9インスタンスにCfnで作成したIAMロール(インスタンスプロファイル)割り当て
-
Terraformと各種必要なモジュールをインストールする
(バージョンは「terraform.sh」の値をそれぞれ修正してお使いください。)
(補足)
・今回作成しているIAMロールには動作確認のため、フルアクセスの権限を与えていますので、必要に応じてCfnのテンプレートのIAMロールの権限を変更してください。
・cloud9のターミナルでコマンド:「aws ec2 describe-instances」など叩いて動作するか確認する。
-
①シェルスクリプトファイルに実行権限を付与
→ chmod 755 terraform.sh
(※実行権限のみに絞りたい場合は修正してください。)
②シェルスクリプトファイル実行
→ ./terraform.sh
動作確認
以下Cloud9での操作となります。
- S3バケットを作成するtfファイルを作成
- ワークスペースを初期化
コマンド:terraform init - 作成するリソースの確認
コマンド:terraform plan
問題なく作成できるか確認してください。 - S3バケット作成
コマンド:terraform apply
上記ソースコードをcloud9上に配置する。
まとめ
Terraform実行環境の構築は以上です。これですぐにTerraform環境を用意することができるようになります。2パターン作成してみましたが、気軽に作成するならコストが安く済むパターン1で十分ですね。業務等でセキュリティを重視したいといった場合はパターン2を検討してみてもいいかもしれません。
ローカル環境で管理できるから必要ないといった意見もあるかとは思いますが、自分自身がローカル環境にいろんなものを入れたくない気持ちがあり、今回作成してみました。この構築がなにかの役に立てれば幸いです。
(IaC(CloudFormation)でIaC(Terraform)実行環境作るってどうなの?って思ったのは内緒)
以上です。
(IaC(CloudFormation)でIaC(Terraform)実行環境作るってどうなの?って思ったのは内緒)
以上です。
0 件のコメント:
コメントを投稿