はじめに
AWSリソースをコードとして記載することで作成・管理を行うAWS CloudFormation(以下、CloudFormation)は多くの方が利用する機能ではないでしょうか。本記事では多くのCloudFormationユーザーにとって大変うれしい機能アップデートを紹介したいと思います。
既存AWSリソースをもとにしたCloudFormationの作成が可能に!「IaCジェネレーター」
AWSで開発をする際には、いきなりCloudFormationのようなIaC(Infrastructure as a Code)ツールを使ってAWSリソースを作るということは実はあまりないのではないでしょうか? まずはマネジメントコンソール上で手作業でトライ&エラーをしながら、システムを組み上げてみて、その後にIaC化する場合が多いのではと思います。
アップデート以前だと、作成済みのAWSリソースをもとにしてCloudFormationのテンプレートを作成することができず、一からCloudFormationテンプレートを作る必要がありました(昨今はConsole-to-Code等のCloudFormationテンプレートの作成を補助してくれる機能もリリースされていますが、まだまだ対応しているサービスが少ない状況です)。
今回のアップデートであるIaCジェネレーターにより、作成済みのAWSリソースをもとにCloudFormationテンプレートを作成できるようになりました。
例えば、以下画像のように既存のApplication Load Balancerをもとに同様のAWSリソースを作るためのCloudFormationテンプレートを作成できます。
既存のリソースを指定した際は、関連するリソースも自動で抽出してくれます。
非常に便利な機能ではあるのですが、いくつか制限があります。
まずはIaCジェネレーターで作成されたテンプレートはそのままで使うことはできないことがほとんどです。例えば関連リソースでSubnetを選択した場合は、CloudFormationテンプレートとしては下記のようにもとにしたVPCのIDが入力されたものができ上がるので、適宜変更する必要があります。
EC2Subnet00subnetxxxxxxxx: UpdateReplacePolicy: "Retain" Type: "AWS::EC2::Subnet" DeletionPolicy: "Retain" Properties: VpcId: "vpc-xxxxxxxx" MapPublicIpOnLaunch: false EnableDns64: false AvailabilityZoneId: "apne1-az4" PrivateDnsNameOptionsOnLaunch: EnableResourceNameDnsARecord: false HostnameType: "ip-name" EnableResourceNameDnsAAAARecord: false CidrBlock: "10.4.128.0/20" Ipv6Native: false Tags: - Value: "xxxxxx-subnet-private1-ap-northeast-1a" Key: "Name"
またIaCジェネレーターを利用する前には、既存リソースのスキャンを行う必要があるのですが、本記事執筆時点ではスキャンは1日に最大でも3回しか実施できません。
※スキャン数の上限はスキャン対象のAWSリソース数によります。
そのため、マネジメントコンソールでちょっと作り、すぐにそれをIaC化するというのは1日に何度でもできるわけではないので、ご注意ください。
ちなみにIaCジェネレーターに対応していないAWSリソースもあります。IaCジェネレーターでは内部的にCloud Control APIというAWSリソースを共通的な方法で操作可能なAPIを利用しているため、Cloud Control APIをサポートしているAWSリソースのみがIaCジェネレーターによるCloudFormationテンプレートを作成できます。
いくつかの制限があるものの、これによりIaC化のハードルがぐっと下がったのは間違いなく、多くの方が待ち望んでいたアップデートであったかと思います。