はじめに
PE部の谷です。
先日、AWS CloudFormationを触っていたら、たまたまRainというCLI実行ツールがあることを知りました。
使ってみたら便利だったので共有します。
Rain
Rainとは
AWS CloudFormationテンプレートとスタックを操作するためのコマンドラインツールです。
リソースを指定したら、そのリソースに合わせたテンプレートを自動で作成してくれる
デプロイ失敗後の再デプロイがめっちゃ楽
などの便利機能があります。
CloudFormationでありがちな、必要なパラメータを調べる、デプロイに失敗した際にスタックを一度消すという作業が必要なくなります。
公式ページ github.com
ドキュメント aws-cloudformation.github.io
おすすめポイント
$ rain build リソースタイプ > ファイル
このコマンドを実行するとCloudFormationの空のテンプレートが生成されます。
しかも、どれが必須のパラメータなのか、オプションなのかがわかるようになっているので、定義が楽チン♪
$ rain deploy <テンプレートファイル> スタック名
このコマンドを実行すると、パラメータを提示、差分リソース、進捗、エラーの表示をしてくれます。 また、スタックが重複していたら自動で消してくれます。
使ってみた
インストール
Rainを使うにはbrewが必要なので、先にインストールします。
環境
- Linux
- Homebrew 3.2.8
Rainをインストールします。
$ brew install rain
テンプレート作成
試しにDynamoDBのテンプレートを作成してみます。
$ rain build AWS::DynamoDB::Table > dynamodb.yml
dynamodb.ymlファイル
AWSTemplateFormatVersion: "2010-09-09" Description: Template generated by rain Resources: MyTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: CHANGEME AttributeType: CHANGEME BillingMode: CHANGEME # Optional ContributorInsightsSpecification: # Optional Enabled: false GlobalSecondaryIndexes: - ContributorInsightsSpecification: # Optional Enabled: false IndexName: CHANGEME KeySchema: - AttributeName: CHANGEME KeyType: CHANGEME Projection: NonKeyAttributes: # Optional - CHANGEME ProjectionType: CHANGEME # Optional ProvisionedThroughput: # Optional ReadCapacityUnits: 0 WriteCapacityUnits: 0 KeySchema: - AttributeName: CHANGEME KeyType: CHANGEME KinesisStreamSpecification: # Optional StreamArn: CHANGEME LocalSecondaryIndexes: - IndexName: CHANGEME KeySchema: - AttributeName: CHANGEME KeyType: CHANGEME Projection: NonKeyAttributes: # Optional - CHANGEME ProjectionType: CHANGEME # Optional PointInTimeRecoverySpecification: # Optional PointInTimeRecoveryEnabled: false # Optional ProvisionedThroughput: # Optional ReadCapacityUnits: 0 WriteCapacityUnits: 0 SSESpecification: # Optional KMSMasterKeyId: CHANGEME # Optional SSEEnabled: false SSEType: CHANGEME # Optional StreamSpecification: # Optional StreamViewType: CHANGEME TableName: CHANGEME # Optional Tags: - Key: CHANGEME Value: CHANGEME TimeToLiveSpecification: # Optional AttributeName: CHANGEME Enabled: false Outputs: MyTableArn: Value: !GetAtt MyTable.Arn MyTableStreamArn: Value: !GetAtt MyTable.StreamArn
どれが必須のパラメータなのか一目でわかるので、定義が簡単ですね。(# Optionalがついてるのがオプションです。)
これだとちょっと量が多いので、必須パラメータのみ表示するように--bareをつけます。
AWSTemplateFormatVersion: "2010-09-09"
Description: Template generated by rain
Resources:
MyTable:
Type: AWS::DynamoDB::Table
Properties:
KeySchema:
- AttributeName: CHANGEME
KeyType: CHANGEME
デプロイ
そのままデプロイしてみます。
パラメータを指定してないのでエラーになりますが、対話形式で進み、進捗も表示されます。
$ rain deploy dynamodb.yml dynamodb Rain needs to create an S3 bucket called 'rain-artifacts-607869573801-ap-northeast-1'. Continue? (Y/n) Y CloudFormation will make the following changes: Stack dynamodb: + AWS::DynamoDB::Table MyTable Do you wish to continue? (Y/n) Y Deploying template 'dynamodb.yml' as stack 'dynamodb' in ap-northeast-1. Stack dynamodb: ROLLBACK_COMPLETE Messages: - MyTable: You must specify the AttributeDefinitions property. failed deploying stack 'dynamodb'
CloudFormationのスタックも失敗しています。
必要なパラメータを入力して再度デプロイしてみます。
普通なら、前回エラーになったスタックを消さないといけませんが、Rainは自動で消してくれるので大丈夫です!
再度同じコマンドを実行します。
$ rain deploy dynamodb.yml Deleted existing, empty stack. CloudFormation will make the following changes: Stack dynamodb: + AWS::DynamoDB::Table MyTable Do you wish to continue? (Y/n) y Deploying template 'dynamodb.yml' as stack 'dynamodb' in ap-northeast-1. Stack dynamodb: CREATE_COMPLETE Successfully deployed dynamodb
DynamoDBのテーブルが作成されたことを確認しました。
削除
$ rain rm dynamodb
Stack dynamodb: CREATE_COMPLETE
Are you sure you want to delete this stack? (y/N) y
Successfully deleted stack 'dynamodb'
まとめ
CloudFormationのテンプレート作成、少しでもめんどうだなと思っている方、
ぜひ一度お試しください。
個人的に雨のアニメーションがかわいくて好きです。