[小ネタ]CloudFormationのクイック作成リンクの作り方

2020.11.25

こんにちは、コンサル部の鈴木(純)です。

今回はCloudFormationのクイック作成リンクを作る機会があったので、手順を載せておきます。

クイック作成リンクとは

ブラウザにURLを入力するだけで、CloudFormationのスタック作成ページに飛ぶことができるリンクです。公式ドキュメントはこちら。

スタックのクイック作成リンクを作成する

このリンクの便利な点は、リンクを開くだけで必要なパラメータを全て入力済の状態にすることができるので、使う側の人は単純に「スタックの作成」ボタンを押すだけでスタックを作成することができます。

URLを開くとこんな感じにスタックのクイック作成ページに遷移して、スタック名やパラメータが入力済の状態になっているので、とても簡単なのが分かるかと思います。

クイック作成リンクを作ってみる

今回はサンプル用にVPCとサブネットを作成するテンプレートを用意しました。

AWSTemplateFormatVersion: 2010-09-09

# ------------------------------------------------------------#
# Input Parameters
# ------------------------------------------------------------#

Parameters:
  SystemName:
    Type: String

  Env:
    Type: String
    AllowedValues:
      - prd
      - stg
      - dev

  VpcCidr:
    Type: String

  PrivateSubnetCidr:
    Type: String


Resources:
# ------------------------------------------------------------#
# VPC
# ------------------------------------------------------------#
  Vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VpcCidr
      EnableDnsSupport: true
      EnableDnsHostnames: true
      Tags:
        - Key: Name
          Value: !Sub ${SystemName}-${Env}-vpc
# ------------------------------------------------------------#
# Subnets
# ------------------------------------------------------------#

  ## Private Subnets
  PrivateSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: !Select 
        - 0
        - Fn::GetAZs: !Ref 'AWS::Region'
      VpcId: !Ref Vpc
      CidrBlock: !Ref PrivateSubnetCidr
      Tags:
        - Key: Name
          Value: !Sub ${SystemName}-${Env}-private-subnet

このテンプレートをクイック作成リンクを使って展開していきます。

[前準備]S3にCloudFormationテンプレートを格納する

テンプレートを展開するためのS3バケットを作成していきます。今回はバケット名パブリックアクセスを有効化するためにパブリックアクセスをすべてブロックのチェックを外しておきましょう。

S3バケットを作成したら、展開したいテンプレートを格納します。

今回はsample.ymlのファイル名で格納しています。

オブジェクトの詳細からオブジェクトURLを取得できるので、こちらを控えておきましょう。

展開用URLを作成する

完成形はこちらです。このままだとよくわからないと思うので、1つずつ分解していきます

https://ap-northeast-1.console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks/create/review?templateURL=https://cf-quick-create.s3-ap-northeast-1.amazonaws.com/sample.yml&stackName=SampleStack¶m_SystemName=sample¶m_Env=dev¶m_VpcCidr=172.27.0.0/22¶m_PrivateSubnetCidr=172.27.0.0/24

今回のURLを要素ごとに分解すると以下のような形になります。

1.https://ap-northeast-1.console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks/create/review?templateURL= # 実行するリージョン
2.https://cf-quick-create.s3-ap-northeast-1.amazonaws.com/sample.yml # オブジェクトURL
3.&stackName=SampleStack # スタック名
4.&param_SystemName # インプットパラメータ [SystemName]
&param_Env=dev # インプットパラメータ [Env]
&param_VpcCidr=172.27.0.0/22 # インプットパラメータ [VpcCidr]
&param_PrivateSubnetCidr=172.27.0.0/24 # インプットパラメータ [PrivateSubnetCidr]

1.実行するリージョン

どのリージョンでスタックを作成するかは以下の部分です。ここは東京リージョンを使うのであればこのまま変更せずにこのままで問題ありません。もし東京リージョン以外で作成したい場合はap-northeast-1を変更したいリージョンに置換してください。

https://ap-northeast-1.console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks/create/review?templateURL=

2.オブジェクトURL

展開したいテンプレートのURLを貼り付けます。

今回は前準備で用意したオブジェクトURLをそのまま使いましょう。

https://cf-quick-create.s3-ap-northeast-1.amazonaws.com/sample.yml

3.スタック名

展開するスタックのスタック名を入力します。stackName=の後に任意のスタック名を入力してください。今回はSampleStackとしています。

&stackName=SampleStack

4.インプットパラメータ

最後にテンプレートで使用するインプットとなるパラメータを追加していきます。使用するテンプレートによってインプットのパラメータは変わると思うので、適宜変更してください。今回は4つのインプットパラメータをテンプレートで定義していたので、それぞれ値を与えています。

Parameters:

  SystemName:
    Type: String

  Env:
    Type: String
    AllowedValues:
      - prd
      - stg
      - dev

  VpcCidr:
    Type: String

  PrivateSubnetCidr:
    Type: String

上記のインプットパラメータを今回は以下のように書いてます。

&param_SystemName=sample
&param_Env=dev
&param_VpcCidr=172.27.0.0/22 
&param_PrivateSubnetCidr=172.27.0.0/24

書き方としては以下のように要素ごとに&でつなげて、パラメータはparam_の後にテンプレートで定義したパラメータ論理名を入れてあげます。

&param_{パラメータの論理名}=値&param_{パラメータの論理名}=値…

以上の1~4の要素を全てくっつけてあげればURLの作成完了です。

あとは作成したURLを送ってあげれば誰でもログインしているAWSアカウントにスタックを展開することができます。

展開してみる

展開するには、先ほど作成したURLを展開したいアカウントにログインした状態でブラウザへ貼り付けるだけです。

スタックの作成を実行して、スタックが無事作成されるのを確認します。

作成されたVPCの値を確認してみると、URLで渡したCidrなどの情報で無事作成できていることが確認できました。

まとめ

CloudFormationのクイック作成リンクを活用することで、作業ミスを防ぐことができる場面をあるかと思います。他の人に作業を依頼する際など、是非クイック作成リンクを利用してみてください。