きっかけ
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つのスタックが作成される
- bastion-prod
- bastion-prod-VPCStack-XXXXXXXXXXXX
- bastion-prod-BastionStack-XXXXXXXXXXXX