CloudFormationインポートをSAMで試す
結論:Serverless Application ModelでのCloudFormation インポート機能の利用は
現時点(2019/11/24)では明確なアナウンスはありません。
新機能 – CloudFormation スタックへの既存リソースのインポートが発表されました!
当方、CloudFormationを好んで利用するプログラマー やっさん
でございます。
CloudFormationを使い始めた当初から不便だと感じていた点が、
「既存のリソースをCloudFormation スタックで管理することはできない。
管理したい場合は、既存リソースを削除してCloudFormationを用いて
再作成する。」
という仕様でした。
この仕様がついに解消され、
既存リソースをスタックに含めることができるようになりました!
今までは、既存のリソースをCloudFormation スタック管理したい場合、
CloudFormerを使ってCloudFormationテンプレートを出力し、
出力されたテンプレート内容に基づいてCloudFormationスタックを
構築する必要がありましたが、これにより不要になりますね!
さっそく SAM
で利用してみたいと思います(フラグです...)!
S3バケットを既存のSAMスタックにインポートしてみる
今回は以下のようなシンプルなServerless Application Modelの
CloudFormationテンプレートファイルに、ビルドアーティファクトを保存する
S3バケットをインポートしてみます。
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
SandboxFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: sam-sandbox
CodeUri: src/handlers
Handler: sandbox
Runtime: go1.x
# AutoPublishAlias: live
早速、既存のテンプレートに追記してみます
以下のように追記します。
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
SandboxFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: sam-sandbox
CodeUri: src/handlers
Handler: sandbox
Runtime: go1.x
# AutoPublishAlias: live
SamSandboxPackages:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
Properties:
BucketName: sam-sandbox-package
マネージメントコンソールからインポートする
既存のスタックから
「スタックアクション」 -> 「スタックへのリソースのインポート」を実行します
変更済みのテンプレートファイルをアップロードして適用してみます。
想定外の結果が ...
お、おや ... これは想定外ですね ...
エラーが出力されました。
Serverless Application Modelは
CloudFormationの拡張フォーマットだからでしょうか。
アウトプットされたフォーマットや、変換後のフォーマットを指定した場合も同様のエラーが出力されます。
拡張フォーマットではない、標準のCloudFormationテンプレートなら
インポートが可能です。
参考:
標準のCloudFormationテンプレートならインポート可能です。
ドキュメントを読み漁ってみる
CloudFormation インポート機能のドキュメントを探し、
イントゥ・ジ・アンノウンしたところ、英語ドキュメントは
たくさん見つかりました。
- Bringing Existing Resources Into CloudFormation Management
- Creating a Stack From Existing Resources
- Resources that Support Import Operations
...CLIを利用してインポートできることも分かりましたが、
Transformによる拡張フォーマットに対応している旨の記載が見つかりません。
これは・・・残念な結果となりましたが、
Serverless Application Modelについては
正式な対応アナウンスを見守りたいと思います。
以上です!(T_T)