備忘兼メモ。
Cloud9でのTerraform環境整備とCodeCommitリポジトリ作成については、こちらを参考に行いました(素晴らしいまとめです)。brewとtfenvもインストールできる。
Cloud9 + CodeCommitでサクッとterraform実行環境を作成する
IAMロールの設定、TFLint/tfsec/AWS CLIのインストールについて、以下を参考にさせていただきました。こちらもまた素晴らしい記事です。
Cloud9にTerraform環境を作ってみる
AdministratorAccessを指定しているが、要件に応じて調整。ただし、AWSで開発するとなるとこれぐらいの権限は必要だと感じる。
ほぼ上記リンクを見れば作成できますが、いったん自身の手順をまとめるために記載する。
各手順
初期設定、インストール関連
Cloud9インスタンスのパスワード変更の実施。任意パスワードに変更する。
$ sudo passwd ec2-user
brewインストール。
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
- brewにpathを通す
$ test -d ~/.linuxbrew && PATH="$HOME/.linuxbrew/bin:$HOME/.linuxbrew/sbin:$PATH"
$ test -d /home/linuxbrew/.linuxbrew && PATH="/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH"
$ test -r ~/.bash_profile && echo "export PATH='$(brew --prefix)/bin:$(brew --prefix)/sbin'":'"$PATH"' >>~/.bash_profile
$ echo "export PATH='$(brew --prefix)/bin:$(brew --prefix)/sbin'":'"$PATH"' >>~/.profile
$ brew
credentialの設定
4. .aws/credentialの設定をする
に記載のとおり、自動認証機能を無効にする(セキュリティ上の観点から)。
IAMロール
神記事記載の通り。
terraform関連インストール
- tfenvインストール。
$ brew install tfenv
$ tfenv list-remote
$ tfenv install x.xx.x #指定バージョンのterraformをinstall
- tfenvによるTerraformバージョン指定、インストール確認。
$ tfenv use 1.2.4
$ terraform --version
$ tfenv list
- tflintのインストール
構文解析ツール。かなり使う。planでは問題なかったのに、applyできないような状況が格段に減ります。
$ curl -s https://raw.githubusercontent.com/terraform-linters/tflint/master/install_linux.sh | bash
$ tflint --version
- tfsecインストール
セキュリティに問題がありそうなコードを検知してくれるツール。パブリックIPなどの外部公開がある部分などを危険と通知してくれたりする。外部公開が前提だとちょっと過剰に見えるが、あるとヒヤリハットの意味で有用。
$ curl -L https://github.com/aquasecurity/tfsec/releases/download/v0.63.1/tfsec-linux-amd64 --output tfsec
$ chmod +x tfsec
$ sudo mv tfsec /usr/local/bin/
$ ll /usr/local/bin/tfsec
$ tfsec -v
- aws cliのインストール。
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
$ aws --version
- Cloud9でAWSの認証を通す
先のIAMユーザー情報を使って操作を行うため、Cloud9に認証を通す。
Cloud9内部にシークレットを残したくないため、AWS公式手順に従って、シェルセッションが終わるまでの一時的なクレデンシャルとする。
IAMユーザーから払い出したアクセスキーとシークレットアクセスキー、利用リージョン名を環境変数に入れる。ダブルクォーテーションはそのまま。
$ export AWS_ACCESS_KEY_ID="アクセスキー"
$ export AWS_SECRET_ACCESS_KEY="シークレットアクセスキー"
$ export AWS_DEFAULT_REGION="リージョン名"
終わったら、「aws configure」で認証情報として環境変数を指定。
$ aws configure
AWS Access Key ID [None]: ${AWS_ACCESS_KEY_ID}
AWS Secret Access Key [None]: ${AWS_SECRET_ACCESS_KEY}
Default region name [None]: ${AWS_DEFAULT_REGION}
Default output format [None]: json
AWSへの認証が通ったか、確認する。
$ aws sts get-caller-identity
次回以降、「Cloud9でAWSの認証を通す」の手順を最初に実施することで、セキュアに認証情報を扱うことができる。
IAMユーザ
個別にCloud9専用ユーザーを作り、CLIアクセスのみにしてセキュリティを担保するか、自身のユーザーは多要素認証も入れてそこで担保するのかは、個々の好みやセキュリティ要件に依存する。個人的にはユーザーを増やして管理の手間を増やしたくないので、自身がいま使ってるIAMユーザーにしたうえで、多要素認証をかけてからキーを払い出すようにしている。
ネットに情報があるので詳しくは書かないが、ここでIAMユーザーからシークレットキーを払い出す。
Terraform初期設定
Terraformをのソースを格納するディレクトリを作成。prodはproduction(本番、実運用環境)を意味する。よしなにフォルダ名は決める。以下は作成したフォルダにカレントを移動している。
$ mkdir /home/ec2-user/environment/tfm/prod
$ cd /home/ec2-user/environment/tfm/prod
$ pwd
移動したらそこでterraform initする。
prod $ terraform init
prodはカレントディレクトリが「/home/ec2-user/environment/tfm/prod」であることを意味する。
ここまででTerraform実行環境の整備が終わった。
CodeCommit+IAM
インフラ屋さんなので、あまりGitなどに慣れ親しんでいない(今回初めて導入した)が、ファイルなどのバージョン管理などをフォルダ名年月日でコピーして、という運用に嫌気がさしていた。そのことから、今回Gitを導入にチャレンジしてみた。
作成したらIAMに移動し、Cloud9で利用するIAMユーザーを選択し、認証情報タブを選ぶ。
AWS CodeCommitのHTTPS Git 認証情報にて、認証情報を生成する。
Git 初期設定、ローカルリポジトリ設定、リモートプッシュ
Gitを使うために(Commitするために)、初回はお約束の作業とのこと。ユーザー名やEメールは実在しないものでもよいらしい。USERNAMEとMYEMAILADDRESSの部分を、任意値に変更する。
$ git config --global user.name USERNAME
$ git config --global user.email MYEMAILADDRESS
バージョン管理したいディレクトリに移動する。今回は先ほどのディレクトリをGit管理対象とする。
$ cd /home/ec2-user/environment/tfm/prod
prod $ git init
prod(master) $
git initするとプロンプトがmasterとなり、masterブランチが切られたことがわかる。
続いて、ローカルリポジトリにadd、commitする。-mでcommit内容にコメントをつけている。
prod(master) $ git add /home/ec2-user/environment/tfm/prod
prod(master) $ git commit -m 'first commit'
ローカルリポジトリにadd、commitできたら、CodeCommitリポジトリに対して、ローカルリポジトリのmasterブランチをプッシュする。ユーザー名とパスワード入力を求められるため、AWS CodeCommitのHTTPS Git 認証情報で取得した値を入力する。
prod(master) $ sudo git push --set-upstream https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/CodeCommitリポジトリ名 master
>AWS CodeCommitのHTTPS Git 認証情報のユーザー名を入力
>AWS CodeCommitのHTTPS Git 認証情報のパスワードを入力
上記で、初回リモートリポジトリのpushの際、エラーが出たため、-set-upstreamオプションをつけている。こちらに記載の通り、-uオプションだけでもいいのかもしれない。
初回以降のリモートリポジトリへのmasterブランチのpushはこのように実施。
prod(master) $ git push https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/CodeCommitリポジトリ名 master
これで一通りCloud9+CodeCommitを利用できる環境が整いました。
あとはTerraform等でバリバリ書いていくのみ。
余談
インフラ系やExcel管理が多い環境だったため、なかなかGitなどに触れる機会がなかったが、今回触ってみてかなり勉強になった。覚えることも多かったが、今後はGitをもっと使っていきたい。
参考
Cloud9にTerraform環境を作ってみる
https://anikitech.com/cloud9-terraform/
Cloud9 + CodeCommitでサクッとterraform実行環境を作成する
https://qiita.com/d_e_n/items/1539623175e2370a60cd