ブログ

AWS CloudFormation 管理ツール | Rain を使ってみよう!

「CloudFormation ってマネジメントコンソールで管理するのなんかめんどくね?」
AWS CloudFormation を使うにあたって、皆さん一度は思ったことがあるのではないでしょうか!?

どうも、雨の音が好きなエンジニアの横田です。本ブログでは、CloudFormation を使う際のお悩みあれこれを一気に解消してくれる可能性を秘めたツール、Rain をご紹介いたします!

(AWS CloudFormation についてはこちらの ブログ記事 をご確認ください。)

AWS CloudFormation 管理ツール Rain とは?

Rain は、AWS CloudFormation のテンプレートやスタックを操作するためのコマンドラインツールです。(Rain 公式ドキュメント *1 より)

テンプレートファイルの作成補助やテンプレートファイルの比較、スタックのイベントログ出力といった AWS CloudFormation を使う際にあると便利な機能を提供してくれます。

AWS CloudFormation 管理ツール Rain の使い方を見てみよう!

Rain の使い方をコマンドラインをよく使う方にはおなじみ(?)、help オプションで確認してみます。

$ rain -h
Rain is a command line tool for working with AWS CloudFormation templates and stacks

Usage:
  rain [command]

Stack commands:
  cat         Get the CloudFormation template from a running stack
  deploy      Deploy a CloudFormation stack from a local template
  logs        Show the event log for the named stack
  ls          List running CloudFormation stacks
  rm          Delete a running CloudFormation stack
  watch       Display an updating view of a CloudFormation stack

Template commands:
  build       Create CloudFormation templates
  diff        Compare CloudFormation templates
  fmt         Format CloudFormation templates
  merge       Merge two or more CloudFormation templates
  pkg         Package local artifacts into a template
  tree        Find dependencies of Resources and Outputs in a local template

Other Commands:
  console     Login to the AWS console
  help        Help about any command
  info        Show your current configuration

実行中のスタックのテンプレートを確認したり、AWS CloudFormation スタックをデプロイしたりと色々できますね!

「help オプションで確認なんてしねーよ!」って方は Rain 公式ドキュメント *1 からも使い方が確認できます。

気になった方は Rain をインストールし、是非ご自身で確認してみてください!

AWS CloudFormation 管理ツール Rain で VPC を構築してみよう!

Rainは .aws/config 、 .aws/credentials を参照して実行します。

前準備として、aws cli をインストールし、$ aws configure コマンドにて各種情報を保存しておきます。

それでは、Rain で VPC を作成します。

折角なので、テンプレートファイルも Rain を使って作成してみます!

まずは、rain build の使い方を確認します。

$ rain build -h
Outputs a CloudFormation template containing the named resource types.

Usage:
  rain build [<resource type>...]

Flags:
  -b, --bare        Produce a minimal template, omitting all optional resource properties
      --debug       Output debugging information
  -h, --help        help for build
  -j, --json        Output the template as JSON (default format: YAML)
  -l, --list        List all CloudFormation resource types
      --no-colour   Disable colour output

resource type が必要ですね!
resource type も Rain で確認可能です。

$ rain build -l コマンドをそのまま実行すると、AWS CloudFormation の全 resource type が出力されるため、VPC に絞って出力します。

$ rain build -l | grep -i VPC
AWS::ApiGateway::VpcLink
AWS::ApiGatewayV2::VpcLink
AWS::EC2::LocalGatewayRouteTableVPCAssociation
AWS::EC2::VPC
AWS::EC2::VPCCidrBlock
AWS::EC2::VPCDHCPOptionsAssociation
AWS::EC2::VPCEndpoint
AWS::EC2::VPCEndpointConnectionNotification
AWS::EC2::VPCEndpointService
AWS::EC2::VPCEndpointServicePermissions
AWS::EC2::VPCGatewayAttachment
AWS::EC2::VPCPeeringConnection
AWS::MediaConnect::FlowVpcInterface

resource type を AWS::EC2::VPC で指定してファイル出力してみます。

$ rain build AWS::EC2::VPC > vpc.yaml

$ cat vpc.yaml
AWSTemplateFormatVersion: "2010-09-09"

Description: Template generated by rain

Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: CHANGEME
      EnableDnsHostnames: false # Optional
      EnableDnsSupport: false # Optional
      InstanceTenancy: CHANGEME # Optional
      Tags:
        - Key: CHANGEME
          Value: CHANGEME

Outputs:
  MyVPCCidrBlock:
    Value: !GetAtt MyVPC.CidrBlock

  MyVPCCidrBlockAssociations:
    Value: !GetAtt MyVPC.CidrBlockAssociations

  MyVPCDefaultNetworkAcl:
    Value: !GetAtt MyVPC.DefaultNetworkAcl

  MyVPCDefaultSecurityGroup:
    Value: !GetAtt MyVPC.DefaultSecurityGroup

  MyVPCIpv6CidrBlocks:
    Value: !GetAtt MyVPC.Ipv6CidrBlocks

すごく簡単にテンプレートファイルの雛形が作成されました。
あとは CHANGEME となっている箇所を編集するだけですね!

テンプレートファイルを作成する際、書き方が覚えられなくて、毎回調べるのが大変なんですよね。。これだけでも Rain の便利さを実感できるのではないでしょうか?

ちなみに、下記のようにオプションを追加すれば、必須パラメータのみが出力されるようになります。

$ rain build -b AWS::EC2::VPC > vpc_bare.yaml

$ cat vpc_bare.yaml
AWSTemplateFormatVersion: "2010-09-09"

Description: Template generated by rain

Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: CHANGEME

vpc_bare.yaml の CidrBlock を下記の通り編集しました。

# vpc_bare.yaml

AWSTemplateFormatVersion: "2010-09-09"

Description: Template generated by rain

Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16

このテンプレートファイルで VPC を作成したいと思います。
作成するスタック名を vpc としたいため、下記のように実行しました。

$ rain deploy vpc_bare.yaml vpc
CloudFormation will make the following changes:
Stack vpc:
  + AWS::EC2::VPC MyVPC
Do you wish to continue? (Y/n) Y
Deploying template 'vpc_bare.yaml' as stack 'vpc' in ap-northeast-1.
Stack vpc: CREATE_COMPLETE
Successfully deployed vpc

AWS マネジメントコンソールからも、デプロイが完了していることが確認できます。

スタックの削除も Rain で実行できます。

$ rain rm vpc
Stack vpc: CREATE_COMPLETE
Are you sure you want to delete this stack? (y/N) y
Successfully deleted stack 'vpc'

念の為、AWS マネジメントコンソールでもスタックが削除されていることを確認しておきます。

AWS CloudFormation 管理ツール Rain(まとめ)

いかがでしたでしょうか?

今回はテンプレートファイルの作成、スタックのデプロイ、スタックの削除の3点をご紹介いたしました。ご紹介した使い方の他にも Rain でできることはたくさんありますので、是非ご自身でもご確認ください!


【筆者実行環境】

  • PC:MacBook Air (M1, 2020)
  • OS:macOS Monterey 12.4
  • aws cli :aws-cli/2.2.44 Python/3.8.8 Darwin/21.5.0 exe/x86_64 prompt/off
  • Rain:Rain v1.2.0 darwin/arm64

*1 Rain 公式ドキュメント: rain | A development workflow tool for working with AWS CloudFormation.

元記事発行日: 2022年09月26日、最終更新日: 2022年09月26日