【第22回】AWS CloudFormationを用いた基盤自動化(2)AWS CLIの実行環境


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


../_images/MicroServiceArchitecture.png


前回は、CloudFormationの概要やテンプレート記述の要領、様々な機能を概説しました。続く今回からは実際にCloudFormationテンプレートを作成していく上で必要な開発環境を構築していきます。 前回も説明しましたが、CloudFormationでは、定められた形式に従って記述されたテンプレートファイルを、AWSコンソール上もしくはCLI(CommandLineInterface)を使って実行します。 しかし、単純な正攻法で、テキストエディタを使って、一からテンプレートを作成し、コンソール上からテンプレートをアップロードして、動作を確認するといったステップを踏んでいると、 文法誤りやタイプミス、論理的な矛盾、スタック構築順序誤りなど様々な人為的なエラーにより、期待通り動作するまで至るにはかなりの労力・時間を要します。

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

  1. AmazonCLI(CommandLineInterface)の実行環境/AWS認証情報の設定
  2. テンプレートのコード補完・文法チェック等を実行する各種プラグインインストール
  3. 統合開発環境(IntelliJ IDEA)の設定
  4. CloudFormation実行ヘルパースクリプトの作成

1点目として、CLIを用いることにより、コンソール上でファイルをアップロードするやり方に比べて、格段に迅速にCloudFormationを繰り返し実行できるようになります。 (2)のプラグインはソースコードを記述している際の、記法の誤りや、プロパティ名の妥当性、階層構造チェックなどを実行するため、テンプレート記述の正確性が向上します。 これらのプラグインはIntelliJ IDEAで多くサポートされており、他のアプリケーション開発言語と同様の統合開発環境で行うことができるので、不要なエディタの切り替えなど発生せず作業生産性が向上します(3)。 また、CLIによるCloudFormationの実行ですが、コマンド自体は単純であるものの、入力パラメータも多く、長くなりがちなため、最後に(4)手軽に実行できるヘルパー用のシェルスクリプト等を作成し、 統合開発環境上で実行できるようにしておいた方がよいでしょう。なお、CLIからのCloudFormation実行は、これまでのAWSサービスをローカルで実行してきた手法と同様、 認証情報が必要になります。加えて、CloudFormationでスタックとして構築する全てのAWSリソースで必要な権限を設定しておく必要があります。


AmazonCLI(CommandLineInterface)の概要と実行環境設定


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以降は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を使って作成する実際の手順は Amazon RDSにアクセスするSpringアプリケーション(1) ユーザ/認証情報の作成 に記載していますが、 これ同様の要領で、ユーザに「AmazonCloudFormationFullAccess」ポリシーを付与して、認証情報をローカル端末へ設定しておきましょう。 また、CloudFormationで構築するスタックのAWSリソースに対してもアクセス権限を付与しておく必要があるので注意が必要です。


../_images/management_console_iam_attach_cloudformation_access.png


注釈

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

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


著者紹介

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

../_images/pic_image01.jpg

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

Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professional等の資格を持ち、アプリケーション基盤・クラウドなど様々な開発プロジェクト支援にも携わる。

2019 APN AWS Top Engineers & Ambassadors 選出。