サービス開発部兼ドラクエ部のくればやしです。
今月末の5月27日に「ドラゴンクエスト」シリーズは誕生40周年を迎えるようです。色々発表があるようなので、今から楽しみです😀
はじめに
前回の記事では、API Gateway(REST API)をAWS::Serverless::Api としてインポートする方法を解説しました。
本記事では、SQSのポリシーをCloudFormationのスタックにインポートする方法を解説します。
インポートの方法
インポートのための工程として、最初にテンプレートファイルを準備することとなると思います。 おそらく、素直に準備すると以下のようなテンプレートファイルを準備することとなると思います。
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: SAM template migrated from Serverless Framework (sqs1) Resources: MyQueue: Type: AWS::SQS::Queue DeletionPolicy: Retain MyQueuePolicy: Type: AWS::SQS::QueuePolicy DeletionPolicy: Retain Properties: PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: "sqs:SendMessage" Resource: "*" Principal: "*" Queues: [ !Ref MyQueue ]
しかし、上記のテンプレートファイルをインポートしようとすると、CloudFormationで以下のエラーが発生します。
ResourceTypes [AWS::SQS::QueuePolicy] are not supported for Import
CloudFormation ではすべてのリソースがインポートに対応しているわけではありません。 以下ドキュメントを確認しても、 AWS::SQS::QueuePolicy は記載がなく、インポートには対応していないと分かります。
上記ドキュメントを確認すると、似たリソースで AWS::SQS::QueueInlinePolicy というリソースがあるのが分かります。
こちらの仕様を確認すると、 AWS::SQS::QueuePolicy は紐づけできるキューを複数指定できるのに対して、 AWS::SQS::QueueInlinePolicy の方は必ず一つのキューのみと紐づけすることとなっています。
こちらのリソースは、先程のドキュメントでインポート対応を確認できたので、試してみたところ、問題なくインポートできました
CFnテンプレートファイル
MyQueueKure: Type: AWS::SQS::Queue MyQueuePolicy: Type: AWS::SQS::QueueInlinePolicy Properties: PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: "sqs:SendMessage" Resource: "*" Principal: "*" Queue: !Ref MyQueueKure
リソース紐付けファイルのファイル
[ { "ResourceType": "AWS::SQS::QueueInlinePolicy", "LogicalResourceId": "MyQueuePolicy", "ResourceIdentifier": { "Queue": "https://sqs.us-east-1.amazonaws.com/xxxxxxx/xxxxxxxxxxx" } } ]
最終的なテンプレートファイルのリソースを AWS::SQS::QueuePolicy で作成したい場合は、インポートではなく、既存リソースと同じポリシーを書いたテンプレートファイルでスタックをデプロイする必要があるようです。
その場合は、CloudFormationの変更セット上は、ポリシーは Add されるような変更内容が表示されますが、デプロイ処理自体は問題無く動作し、ポリシーの変更は実質無くテンプレートと同期することが可能になります。
まとめ
- スタックにSQSのポリシーをインポートする場合は
AWS::SQS::QueueInlinePolicyを使う - 既存のポリシーを
AWS::SQS::QueuePolicyとしてスタックで管理する場合は、同じポリシーを設定したテンプレートファイルでデプロイする
おわりに
以上、CloudFormationインポートのTipsの一つをご紹介しました。どなたかの一助になれば幸いです。
紅林輝(くればやしあきら)(サービス開発部) 記事一覧
サービス開発部所属。2015年にサーバーワークスにJOIN。クラウドインテグレーション部を経て、現在はCloud Automatorの開発に従事。ドラクエ部。推しナンバーはⅤ、推しモンスターはクックルー。