Code#AWSかずえ2021.10.18この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。2021年9月30日にクラウドコントロールAPIがGA(一般提供開始)しました。従来、各サービスごとにバラバラだったAPIの使い方を、一貫した方法で使えるようにしたAPIです。利用可能なサードパーティー製ソリューションもこのAPIを通して利用可能です。providerも早速このクラウドコントロールAPIに対応しています。Sourceがそれぞれ追加されました。Registry今回はこのResourceを使って、2AZにそれぞれPublicとPrivateサブネットを持つような一般的なVPC構成を作ってみたいと思います。使うResourceは前述のaws_cloudcontrolapi_resourceのみです。type_nameに異なる値を指定することで様々なリソースをプロビジョニングすることができます。リソースの各プロパティ値はdesired_stateattributeにJSON形式で渡します。type_nameに指定する値はCloudFormation(CFn)のリソースタイプネームで、desired_state以下で指定する値もCFnで各リソースを作成するときのProperties以下の値です。例としてまずは(サブネット等のVPC内部リソースは置いておいて、)一旦VPCだけを作成してみましょう。desired_state以下をHCL形式で書きたい場合は以下のようにjsonencode関数で囲いましょう。})}もしくはCFnライクにYAMLで書きたい場合は以下のような書き方もできます。))}すると...エラーになりました。GatewayはクラウドコントロールAPI未対応でした。どのリソースタイプが対応済なのかは以下の方法で確認可能です。describe-typeで各リソースの対応状況を確認できます。type-nameに前述aws_cloudcontrolapi_resourceResourceのtype_nameattribute値(=CFnのリソースタイプネーム値)を指定します。このときの返り値ProvisioningTypeの値がFULLY_MUTABLEもしくはIMMUTABLEの場合、クラウドコントロールAPIでプロビジョニングできる、つまりaws_cloudcontrolapi_resourceResourceでプロビジョニングできるようです。VPCはFULLY_MUTABLEになっているのでプロビジョニングできます。GatewayはNON_PROVISIONABLEですね。Referenceドキュメントで以下ページにクラウドコントロールAPI対応リソースタイプ一覧がまとまっています。先程プロビジョニングできたVPC(AWS::EC2::VPC)が載っていないので、実態と差があるかもしれません。API残りのリソースもできる限りクラウドコントロールAPI使ってみたさて、クラウドコントロールAPIが対応していないリソースについては、(aws_cloudcontrolapi_resourceではなく、)既存のResourceを使う方針に転換し、再度基本的なVPC構成を作成してみました。結果、クラウドコントロールAPIが使えたのは以下3種のリソースのみでした。今回は敢えてやってみましたが、VPCを作成するという要件の場合はaws_cloudcontrolapi_resourceを使う必要性は薄いと思います。非対応リソースがたくさんあるので、既存のResourceの使用に統一したほうが書きやすい・読みやすいと思います。aws_cloudcontrolapi_resourceのdesired_stateAttribute以下の値を参照したい場合、desired_stateはJSON型になっているので一度jsondecode関数をかます必要があり、可読性を下げると思います。provider未対応の場合です。Blogで述べられているので、ローンチ後すぐさまTerraformでIaC化したい、という場合には活躍するでしょう。providerの開発も活発なので、数日、数週待てば新リソース専用のResourceが提供されている印象があります。場合によっては事前にHashiCorp社にリリース情報が共有されていて、リリース当日にTerraformが対応している場合もあります。provider未対応のとき」というシーンは非常に限定的なものになるかもしれません。ひとつ考えられるユースケースは、CFnに慣れ親しんだ開発者がTerraformを始めるとき、です。リソース単位はCFnのリソースタイプですし、desired_state以下のプロパティもまんまCFnのものなので、CFnを良くご存じの方は書きやすいかと思います。!Refとか!SubとかのCFnの構文は使えないので、Terraform流に書き換える必要があります。前述の通り現状aws_cloudcontrolapi_resourceで作れるリソースは非常に限定的なので、今すぐ始めるのはしんどそうですね。そもそもですが、せっかくTerraform始めるんだったら、普通にaws_cloudcontrolapi_resource使わずに書けるように勉強したほうが良いとも思います。すみません、このユースケースもちょっと苦しいですかね。今後のアップデートでさらに便利になっていくのを期待したいと思います。