本連載では、以下のイメージの構成のようなマイクロサービスアーキテクチャにおける、基盤自動化環境の構築を実践していきます。

本連載で構築していく基盤自動化環境のイメージ

前回は、CloudFormationの概要やテンプレート記述の要領のほか、さまざまな機能について概説しました。今回からは、実際にCloudFormationテンプレートを作成していく上で必要な開発環境を構築していきます。

前回も説明しましたが、CloudFormationでは、AWSコンソール上、もしくはCLI(Command Line Interface)を使い、定められた形式に従って記述されたテンプレートファイルを実行します。

しかし、正攻法で、テキストエディタを使って一からテンプレートを作成し、コンソール上からテンプレートをアップロードして動作を確認する……といったステップを踏んでいると、文法誤りやタイプミス、論理的な矛盾、スタック構築順序の誤りなどさまざまな人為的なエラーが発生しやすく、期待通り動作するまでにはかなりの労力/時間を要します。

そうした労力を少しでも軽減するために、筆者は以下のような設定を済ませた開発環境でテンプレートを記述することを推奨しています。

  1. AWS CLIの実行環境/AWS認証情報の設定
  2. テンプレートのコード補完/文法チェックなどを実行する各種プラグインのインストール
  3. 統合開発環境(IntelliJ IDEA)の設定
  4. CloudFormation実行ヘルパースクリプトの作成
  5. TaskCatを使用したマルチリージョンテスト環境の構築

1点目として、CLIを用いることにより、コンソール上でファイルをアップロードするやり方に比べて、格段に迅速にCloudFormationを繰り返し実行できるようになります。

2点目に挙げたプラグインでは、ソースコードを記述する際の記法の誤りや、プロパティ名の妥当性、階層構造チェックなどを実行するため、テンプレート記述の正確性が向上します。

3点目、それらのプラグインはIntelliJ IDEAで多くサポートされており、他のアプリケーション開発言語と同様の統合開発環境で行うことができるので、不要なエディタの切り替えなど発生せず作業生産性が向上します。

また、CLIによるCloudFormationの実行は、コマンド自体は単純であるものの、入力パラメータも多く、長くなりがちです。4点目に挙げたように、最後に手軽に実行できるヘルパー用のシェルスクリプトなどを作成し、統合開発環境上で実行できるようにしておいたほうがよいでしょう。

最後に、AWS公式から提供されている、マルチリージョンでのStack構築をテストする「TaskCat」というツールを使って、複数のリージョンでの実行結果をレポートする環境を構築しておきます。災害対策などで複数リージョンで環境を展開する場合に使ったり、CI/CDパイプラインに組み込んでテンプレートテストとして利用したりするとよいでしょう。

なお、CLIからのCloudFormation実行は、これまでのAWSサービスをローカルで実行してきた手法と同様、認証情報が必要になります。加えて、CloudFormationでスタックとして構築する全てのAWSリソースで必要な権限を設定しておく必要があることに留意してください。

AWS CLIの概要と実行環境設定

AWS環境/サービスを使用するには大きく3つの方法があります。AWSコンソールによる操作、SDK(SoftwareDevelopmentKit:AWSにより提供される各プログラム言語ごとにあるライブラリ)を介したアクセス、そして、AmazonCLIを介したコマンドラインの実行です。ローカル端末などにCLIのインストールを行い、ターミナルなどのコマンド操作ツールを通して、awsコマンドに実行サービス名やパラメータを与えて実行します。GUIと比べ、シェルスクリプトなどと組み合わせることにより、作業の迅速化、自動実行、作業ミスの防止を図れるのがメリットです。

CLIをインストールするには、インストール対象のマシンがPython2.6.5以上、もしくはPython3.3以上をインストール済みである必要があります。ここでは、ローカルマシンとしてMacOSにCLIをインストールする手順を紹介します。

公式サイト「AWS CLIのインストール」では、CLIのインストールはpipコマンドを用いてインストールを行なっているため、事前にpythonを実行できる環境を構築しておきましょう。

MacOS Sierra以降を利用している場合

MacOS Sierra以降はHomebrewからpythonをインストールする手段が簡易です。以下のコマンドにより、標準インストールされているpython(/usr/bin/python)ではなく、/usr/local/bin/pythonが使用されるようになります。

brew update
brew install python

pipを利用してCLIをインストールするには以下のコマンドを実行します。

pip3 install awscli --upgrade --user

インストール後に.bash_profileや.bashrcにインストールしたawsコマンドがあるパスを通しておきましょう。

export PATH="/Users/XXXXXXXX/Library/Python/3.6/bin/:$PATH"

sourceコマンドによる.bash_profileの再読み込みやターミナルの再起動後、以下のコマンドが正常実行できることを確認します。

aws --version
aws-cli/1.16.241 Python/3.6.5 Darwin/18.7.0 botocore/1.12.231

また、CLIのコマンド実行によってAWSへアクセスするには、アクセスしたいサービスの権限を付与したユーザーの作成と、認証情報の設定が必要になります。今回のようにCloudFormationをローカル端末から使用する場合は、CloudFormationアクセス許可ポリシーをアタッチして権限を付与したユーザーの認証情報をローカル端末のホームフォルダ配下の.aws/credentialsに置いておきます。

ユーザーや認証情報をIAMを使って作成する実際の手順は、連載第11回で説明した通りです。同様の要領で、ユーザーに「AmazonCloudFormationFullAccess」ポリシーを付与して、認証情報をローカル端末へ設定しておきましょう。また、CloudFormationで構築するスタックのAWSリソースに対してもアクセス権限を付与しておく必要があるので注意が必要です。

アクセス権限の設定

※ aws configureコマンドを使うと、.aws/配下にある認証情報や設定を行うこともできます。コマンド実行後認証キーやリージョンなど対話形式で設定を行えます。

* * *

以上で、CLIおよびCloudFormationをローカル端末上から実行できる準備が整いました。次回は、テンプレートを効率的に実装するためのcfn-python-lintプラグインや統合開発環境として利用するIntelliJ IDEAの設定を行います。

著者紹介


川畑 光平(KAWABATA Kohei) - NTTデータ 課長代理

金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。

Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professional等の資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。2019 APN AWS Top Engineers & Ambassadors選出。

本連載の内容に対するご意見・ご質問は Facebook まで。