「AWS無料相談会」をオンラインで開催中

CloudFormationインポートをSAMで試す

  • 2019.11.24
  • 未分類

結論: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 インポート機能のドキュメントを探し、
イントゥ・ジ・アンノウンしたところ、英語ドキュメントは
たくさん見つかりました。

...CLIを利用してインポートできることも分かりましたが、
Transformによる拡張フォーマットに対応している旨の記載が見つかりません。

これは・・・残念な結果となりましたが、
Serverless Application Modelについては
正式な対応アナウンスを見守りたいと思います。

以上です!(T_T)