awspec ( https://github.com/k1LoW/awspec ) を使って、AWSのリソースが意図した通りに設定されているかを確認します。
CloudWatch event を使ってるシステムがありますが、サービスを運用していく過程で、CloudWatch event の設定が増え、設定漏れがでてくるようになりました。
CloudFormation 化することも上記の課題の対応になると思いますが、今回は awspec を利用して、 CloudWatch event の設定内容が意図通りに設定されているかを確認します。
サーバー環境に依存させたくないので、 awspec を Docker で動かします。
この記事でわかること
- awspec を Docker で動かす方法
- awspec で AWSリソース CloudWatch event をテストする方法
- この記事内のソースは以下で公開しています。
準備
Gemfile の準備
bundler を使うので Gemfile へ awspec
を設定します。
source 'https://rubygems.org'
gem 'awspec'
Gemfile.lock の作成
awspec 用の Docker コンテナを作るときに Gemfile, Gemfile.lock ファイルがある前提としたいので、以下のコマンドを実行して事前に Gemfile.lock を作ります。
docker run --rm -it -v "$(pwd)":/home/app -w /home/app ruby:2.7 bundle install
Dockerfile の作成
Gemfile, Gemfile.lock に従い、 bundle install
をするのみの単純なコンテナです。
FROM ruby:2.7
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install
Docker ビルドの実行
ビルドして Image を作ります。
docker build -t awspec .
awspec の設定
awspec の初期化
awspec init
を実行して、 awspec で必要となるファイルの雛形を作ります。
docker run --rm -it -v "$(pwd)":/home/app -w /home/app awspec awspec init
secrets.yml の作成
コンテナ内で実行するため、 サーバー環境で用意する必要がある creadentials ではなく secrets.yml を使うようにします。
今回は CloudWatch event のテストを実行するのみであるため IAM ポリシーは「CloudWatchEventsReadOnlyAccess」のみで OK です。
region: ap-northeast-1
aws_access_key_id: xxxxxxxx
aws_secret_access_key: xxxxxxxxx
テストケースの作成
CloudWatch event のテストケースを作成します。
今回は、「cloudwatch_event」リソースタイプを使います。
リソースタイプは以下で確認できます。
CloudWatch イベント名は「TestTestTest」で作成しています。
CloudWatch イベントが存在するか、有効となっているか、スケジュール設定は意図通りかを確認しています。
require 'spec_helper'
describe cloudwatch_event('TestTestTest') do
it { should exist }
it { should be_enable }
it { should be_scheduled('cron(0 2 * * ? *)') }
end
awspec の実行
Docker コンテナ経由でテストを実行します。
docker run --rm -it -v "$(pwd)":/home/app -w /home/app awspec rake spec
補足) 既存リソースからテストケースの作成
Docker コンテナ経由で既存リソースからテストケースを作成することもできます。
secrets.yml を利用する場合、 --secrets_path
オプションで secrets.yml を指定します。
docker run --rm -it -v "$(pwd)":/home/app -w /home/app awspec awspec generate cloudwatch_event --secrets_path ./spec/secrets.yml
補足) Dockerイメージ再ビルド
docker build --no-cache -t awspec .