AWS CloudFormationを使うことで、開発者はインフラストラクチャをモデル化し、コード(IaC)として定義することができる。AmazonはMacrosというAWS CloudFormationの新機能を発表した。Macrosによって開発者は、AWS Lambdaで実行される変換を呼び出すことで、CloudFormationテンプレートのネイティブ構文を拡張できるようになる。
AWS CloudFormationはAWSプラットフォーム上の不可欠なビルディングブロックであり、多くのサービスがそれに依存している。2011年の最初のリリース以来、CloudFormationは最新のMacrosを追加して現在の状態に進化した。AWS CloudFormationsのMacroには、定義と実装という2つのコンポーネントがある。開発者はCloudFormationリソースタイプAWS::CloudFormation::Macroで始まる定義を作成することで、どのLambda関数を使うかと、そのマクロを呼び出す必要があるもののアウトラインを示す。
Type: "AWS::CloudFormation::Macro"
Properties:
Description: String
FunctionName: String
LogGroupName: String
LogRoleARN: String
Name: String
定義では、Nameは一意でなければならず、FunctionNameのLambda関数への参照はマクロと同じ領域にある必要がある。開発者がマクロテンプレートを実行すると、他のテンプレートにも使用できるようになる。マクロの実装はラムダ関数であり、JSONペイロードが必要である。
{
"region": "us-east-1",
"accountId": "$ACCOUNT_ID",
"fragment": { ... },
"transformId": "$TRANSFORM_ID",
"params": { ... },
"requestId": "$REQUEST_ID",
"templateParameterValues": { ... }
}
JSONペイロードのフラグメントには、テンプレート全体、あるいはテンプレートの関連部分が含まれる。テンプレートがYAMLであるかどうかにかかわらず、フラグメントもJSONになることに注意していただきたい。さらに、Lambda関数は以下を含むJSON応答を返す。
- リクエストID。リクエストで受け取ったものと同じ。
- ステータスフィールド。成功、あるいは、ChangeSetに失敗する他の値を含む。
- フラグメント。変換されたテンプレートの有効なCloudFormation JSONを含む。
開発者がマクロを使用する場合は、必要なパラメータと共にFn::Transformを呼び出すことができる。
AWSTemplateFormatVersion: 2010-09-09
Resources:
MyS3Bucket:
Type: 'AWS::S3::Bucket'
Fn::Transform:
Name: EchoMacro
Parameters:
Key: Value
開発者がテンプレート全体をパースする必要がある場合は、テンプレート内の変換リストにそのテンプレートを含めることでパースできる。このテンプレートを実行すると、各マクロで指定された関数を呼び出して、ブログの投稿に従って最終的なテンプレートを返すことによって、変換がチェンジセットに集められる。
出典: https://aws.amazon.com/blogs/aws/cloudformation-macros/
AWSのシニアテクニカルエバンジェリストであるRandall Huntは、Macrosの発表についてのブログ記事で次のように述べている。
ここでの真のパワーは、既存のインフラストラクチャをコードとして表現でき、コードで拡張できることです。この新しい機能によって実現される可能性は事実上無制限です。
ショートハンド(ShortHand)や文字列関数(String Functions)のようないくつかの参照マクロがある。開発者はそれらを試すことでマクロに慣れることができる。AWS CloudFormationの新しいMacros機能は、AWS Lambdaを提供するすべてのAWSリージョンで利用できる。さらに、Macrosに追加のCloudFormation料金はかからない。つまり、顧客は標準のAWS Lambda関数料金のみを請求される。
Rate this Article
- Editor Review
- Chief Editor Action