3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

awspec を Docker で動かして、AWSのリソースが正しく設定されているかを確認する

Last updated at Posted at 2020-04-27

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 を設定します。

Gemfile
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 をするのみの単純なコンテナです。

Dockerfile
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 です。

spec/secrets.yml
region: ap-northeast-1
aws_access_key_id: xxxxxxxx
aws_secret_access_key: xxxxxxxxx

テストケースの作成

CloudWatch event のテストケースを作成します。

今回は、「cloudwatch_event」リソースタイプを使います。
リソースタイプは以下で確認できます。

CloudWatch イベント名は「TestTestTest」で作成しています。
CloudWatch イベントが存在するか、有効となっているか、スケジュール設定は意図通りかを確認しています。

spec/cloudwatch_event_spec.rb
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 .
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?