翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
インフラストラクチャコードのテスト駆動開発には Serverspec を使用する
作成者: Sushant Jagdale (AWS)
環境:PoC またはパイロット | テクノロジー: DevOps、インフラストラクチャ、ハイブリッドクラウド | AWS サービス: Amazon EC2; AWS CodeBuild; AWS CodeDeploy |
[概要]
このパターンは、Amazon Web Services (TDD) クラウドでインフラストラクチャコードを記述するときに、Serverspec
Serverspec はインフラストラクチャコードのリファクタリングに役立ちます。Serverspec を使用すると、さまざまなパッケージやソフトウェアのインストールをチェックするRSpecテストを記述したり、コマンドを実行したり、実行中のプロセスやポートをチェックしたり、ファイルアクセス許可設定をチェックしたりできます。Serverspec は、サーバーが正しく構成されているかどうかをチェックします。サーバーには Ruby のみをインストールします。エージェントソフトウェアをインストールする必要はありません。
テスト駆動型インフラストラクチャには次の利点があります。
クロスプラットフォームの更新
期待の検証
自動化への信頼
インフラの一貫性と安定性
早期失敗
このパターンを使用して、Amazon Machine Image (AMI) の作成中に、Apache ソフトウェアの Serverspec ユニットテストを実行し、ファイルアクセス許可設定を確認できます。AMI は、すべてのテストケースが合格した場合にのみ作成されます。Serverspec は以下のテストを実行します。
Apache プロセスは実行中です。
Apache ポートは実行中です。
Apache の設定ファイルやディレクトリは特定の場所にあるなど。
ファイル権限は正しく設定されている。
前提条件と制限
前提条件
アクティブなAWSアカウント
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
パブリックサブネットを持つ仮想プライベートクラウド (VPC)
コマンドラインインターフェイス (AWS CLI) AWS と Git のインストール
製品バージョン
HashiCorp Packer バージョン: 1.6.6
Go - バージョン 2.9.1 以降
AWS CLI バージョン: 1.18.185
アーキテクチャ
ターゲット アーキテクチャ
コードを CodeCommit リポジトリにプッシュすると、Amazon CloudWatch Events イベントが をエンゲージします CodePipeline。パイプラインの最初のステージでは、コードは から取得されます CodeCommit。
2 番目のパイプラインステージは を実行し CodeBuild、Packer テンプレートを検証して構築します。
Packer ビルド・プロビジョナーの一部として、Packer は Apache と Ruby のソフトウェアをインストールします。次に、プロビジョナーは Serverspec を使用するシェルスクリプトを呼び出し、Apache のプロセス、ポート、ファイル、およびディレクトリの単体テストを行います。Packer ポストプロセッサは、実行中に Packer によって生成されたすべてのアーティファクトのリストを含む JavaScript Object Notation (JSON) ファイルを書き込みます。
最後に、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスは、Packer によって生成された AMI ID を使用して作成されます。
ツール
AWS CLI – Amazon コマンドラインインターフェイス (AWS CLI) は、コマンドラインシェル内のコマンドを使用して AWS サービスとやり取りするためのオープンソースツールです。
Amazon CloudWatch Events – Amazon CloudWatch Events は、 near-real-timeAmazon Web Services (AWS) リソースの変更を記述するシステムイベントのストリームを提供します。
AWS CodeBuild – AWS CodeBuild は、 クラウドでフルマネージドのビルドサービスです。 はソースコードを CodeBuild コンパイルし、ユニットテストを実行し、デプロイする準備ができているアーティファクトを生成します。
AWS CodeCommit – AWS CodeCommit は、Amazon Web Services によってホストされるバージョン管理サービスです。 CodeCommit を使用して、アセット (ドキュメント、ソースコード、バイナリファイルなど) をクラウドにプライベートに保存および管理できます。
AWS CodePipeline – AWS CodePipeline は、ソフトウェアのリリースに必要なステップをモデル化、視覚化、自動化するために使用できる継続的な配信サービスです。ソフトウェアリリースプロセスのさまざまなステージを素早くモデル化して設定できます。
HashiCorp Packer
– HashiCorp Packer は、単一のソース設定から同じマシンイメージの作成を自動化するためのツールです。 Serverspec
– Serverspec は、サーバー設定をチェックするためのRSpecテストを実行します。Serverspec は Ruby を使用しているため、エージェントソフトウェアをインストールする必要はありません。
コード
コードは添付されています。このコードでは、3 つのディレクトリと 8 つのファイルからなる次のような構造になっています。
├── amazon-linux_packer-template.json (Packer template) ├── buildspec.yaml (CodeBuild .yaml file) ├── pipeline.yaml (AWS CloudFormation template to automate CodePipeline) ├── rspec_tests (RSpec required files and spec) │ ├── Gem-file │ ├── Rakefile │ └── spec │ ├── apache_spec.rb │ └── spec_helper.rb └── scripts └── rspec.sh (Installation of Ruby and initiation of RSpec)
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
IAM ユーザーを作成します。 | プログラムによるアクセスとコンソールによるアクセスを持つ AWS Identity and Access Management (IAM) ユーザーを作成します。詳細については、AWS「 ドキュメント」を参照してください。 | デベロッパー、システム管理者、 DevOps エンジニア |
AWS 認証情報を設定します。 | ローカルコンピュータまたは 環境で、IAMユーザーのAWS認証情報を設定します。手順については、 AWS ドキュメントを参照してください。 | デベロッパー、システム管理者、 DevOps エンジニア |
認証情報をテストします。 | 設定した認証情報を検証するには、以下のコマンドを実行します。
| デベロッパー、システム管理者、 DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
CodeCommit リポジトリを作成します。 | CodeCommit リポジトリを作成するには、次のコマンドを実行します。
| デベロッパー、システム管理者、 DevOps エンジニア |
書き込みRSpecテスト。 | インフラストラクチャのRSpecテストケースを作成します。詳細については、追加情報 セクションを参照してください。 | デベロッパー、 DevOps エンジニア |
コードを CodeCommit リポジトリにプッシュします。 | アタッチされたコードを CodeCommit リポジトリにプッシュするには、次のコマンドを実行します。
| デベロッパー、システム管理者、 DevOps エンジニア |
パイプラインを作成します。 | パイプラインを作成するには、「追加情報」セクションにあるAWSCLIコマンドを実行します。 | デベロッパー、システム管理者、 DevOps エンジニア |
パイプラインを開始します。 | CodeCommit リポジトリにコードをコミットします。リポジトリにコミットするとパイプラインが開始されます。 | デベロッパー、システム管理者、 DevOps エンジニア |
Apache をテストしますURL。 | AMI インストールをテストするには、次の を使用しますURL。
ページに「Apache からこんにちは」というメッセージが表示されます。 | デベロッパー、システム管理者、 DevOps エンジニア |
関連リソース
追加情報
書き込みRSpecテスト
このパターンのRSpecテストは にあります<repository folder>/rspec_tests/spec/apache_spec.rb
。
require 'spec_helper' describe service('httpd') do it { should be_enabled } it { should be_running } end describe port(80) do it { should be_listening } end describe file('/etc/httpd/conf/httpd.conf') do it { should exist } it { should be_owned_by 'root' } it { should contain 'ServerName www.example.com' } end describe file('/etc/httpd/conf/httpd.conf') do its(:content) { should match /ServerName www.example.com/ } end describe file('/var/www/html/hello.html') do it { should exist } it { should be_owned_by 'ec2-user' } end describe file('/var/log/httpd') do it { should be_directory } end describe file('/etc/sudoers') do it { should be_mode 440 } end describe group('root') do it { should have_gid 0 } end
/spec
ディレクトリに独自のテストを追加することができます。
パイプラインの作成
aws cloudformation create-stack --stack-name myteststack --template-body file://pipeline.yaml --parameters ParameterKey=RepositoryName,ParameterValue=<provide repository-name> ParameterKey=ApplicationName,ParameterValue=<provide application-name> ParameterKey=SecurityGroupId,ParameterValue=<provide SecurityGroupId> ParameterKey=VpcId,ParameterValue=<provide VpcId> ParameterKey=SubnetId,ParameterValue=<provide SubnetId> ParameterKey=Region,ParameterValue=<provide Region> ParameterKey=Keypair,ParameterValue=<provide Keypair> ParameterKey=AccountId,ParameterValue=<provide AccountId> --capabilities CAPABILITY_NAMED_IAM
パラメーターの詳細
repository-name
– AWS CodeCommit リポジトリの名前
application-name
– Amazon リソースネーム (ARNs) は にリンクされていますApplicationName
。任意の名前を指定します。
SecurityGroupId
— ポート 80 が開いているAWSアカウントからのセキュリティグループ ID
VpcId
– の ID VPC
SubnetId
– のパブリックサブネットの ID VPC
Region
– このパターンを実行しているAWSリージョン
Keypair
– EC2インスタンスにログインするための Secure Shell (SSH) キー名
AccountId
– AWSアカウント ID
AWS マネジメントコンソールを使用して、前のコマンドラインと同じパラメータを渡すことで、 CodePipeline パイプラインを作成することもできます。
添付ファイル
このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「attachment.zip」