0
1

More than 3 years have passed since last update.

通常のCloudFormationテンプレートをServerless Frameworkで読み込んで実行する

Last updated at Posted at 2020-08-20

きっかけ

AWS での Linux 踏み台ホスト作るときに、クイックスタートのテンプレートがあるのですが
できればServerless Frameworkで叩ける様にしたいと思ったけど
そのまま読み込めないのかなと探したら、素晴らしいプラグインあるじゃないですか!というこで記事に残しておく

AWS での Linux 踏み台ホスト - クイックスタート

このクイックスタートのソースコードを見る

Serverless Plugin Nested Stacks

ネストされたスタックを通常のcloudformationとして記述し、それらをサーバーレスフレームワークと簡単に統合します。

いつものごとくインストール

$ npm install serverless-aws-nested-stacks --save-dev

serverless.ymlにプラグインとして、追加

serverless.yml
plugins:
  - serverless-aws-nested-stacks

customに、nested-stacksを記述

custom:
  nested-stacks:    
    location: nested-stacks # location:スタックファイルを配置するディレクトリ
                            # 1箇所しか指定できないので、ここにテンプレートを集めるしかない
    stacks:
      - id: VPCStack # Logical ID (Required)
                     # ${self:service}-${self:provider.stage}-VPCStack-XXXXXXXXXXXX
                     # この様なスタック名になる
        template: aws-vpc.template.yaml # テンプレートファイル名 (Required)
        enabled: true # optional flag for enabled/disabling substack
        timeout: 60 # Minutes before stack creation times out.
        parameters: # スタックに渡すパラメータを指定できる
          - AvailabilityZones: 'ap-northeast-1a,ap-northeast-1d'
          - KeyPairName: bastion_key
          - NumberOfAZs: '2'
          - PrivateSubnet1ACIDR: 10.0.0.0/19
          - PrivateSubnet2ACIDR: 10.0.32.0/19
          - PublicSubnet1CIDR: 10.0.128.0/20
          - PublicSubnet2CIDR: 10.0.144.0/20
          - VPCCIDR: 10.0.0.0/16
          - VPCTenancy: default
      - id: BastionStack # Logical ID (Required)
                         # 2つめのスタック
                         # ${self:service}-${self:provider.stage}-BastionStack-XXXXXXXXXXXX
                         # この様なスタック名になる
        template: linux-bastion.template # テンプレートファイル名 (Required)
        enabled: true # optional flag for enabled/disabling substack
        timeout: 60 # Minutes before stack creation times out.
        parameters: # スタックに渡すパラメータを指定できる
          - BastionAMIOS: Amazon-Linux2-HVM
          - BastionHostName: LinuxBastion
          - BastionBanner: 'Welcome! Bastion'
          - BastionInstanceType: t2.micro
          - BastionTenancy: default
          - EnableBanner: false
          - EnableTCPForwarding: false
          - EnableX11Forwarding: false
          - KeyPairName: bastion_key
          - NumBastionHosts: 1
          - PublicSubnet1ID: !GetAtt 
            - VPCStack
            - Outputs.PublicSubnet1ID
          - PublicSubnet2ID: !GetAtt 
            - VPCStack
            - Outputs.PublicSubnet2ID
          - QSS3BucketRegion: ap-northeast-1
          - QSS3BucketName: aws-quickstart
          - QSS3KeyPrefix: quickstart-linux-bastion/
          - RemoteAccessCIDR: 0.0.0.0/0
          - VPCID: !GetAtt 
            - VPCStack
            - Outputs.VPCID

実行すると、3つのスタックが作成される

  1. bastion-prod
  2. bastion-prod-VPCStack-XXXXXXXXXXXX
  3. bastion-prod-BastionStack-XXXXXXXXXXXX
0
1
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
0
1