🗂

【AWS】CloudFormationで Type: AWS::EC2::VPC や AWS::EC2::Subnet ってどういうこと?

2021/04/18に公開

初めまして、AWSクラウドエンジニアのルビコンと申します。

突然ですが、CloudFormationを使われているでしょうか?
リソースをコードで作れるのでインフラ構築・管理で毎日使っているサービスです。
初めて学習される際につまずかないよう、Tipsを提供させて頂きます。

Typeとは?

TypeにはAWSリソースの種類を書きます。公式ドキュメント (AWS resource and property types reference - AWS CloudFormation) には service-provider::service-name::data-type-name を書くと定義されています。

例えば下記YAMLではRubiconLinkという名前のユーザーを作成できます。

Resources:
  UserRubiconLink:
    Type: AWS::IAM::User
    Properties:
      UserName: RubiconLink
      LoginProfile:
        Password: ILoveQiita!
        PasswordResetRequired: true
      Groups:
        - !Ref GroupAdministrators

Type: AWS::IAM::UserAWS::IAM::Group は抵抗ないでしょう。IAMでUserやGroupを作るということですね。確かにIAMの管理画面でもUserやGroupのメニューがあります。

AWS::EC2::VPCAWS::EC2::Subnet に違和感

下記YAMLではVPCを作成できます。

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/19
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: awsmaster-prod-vpc

AWSを少しでもかじったことがあると、Type: AWS::EC2::VPCAWS::EC2::Subnet は抵抗ありますね。というのもAWSの管理画面からすると、VPCというサービスの中にVPCやSubnetのメニューがあるので AWS::VPC::VPCAWS::VPC::Subnet の方が自然に思えるからです。

実はAWSの裏側としてはCFnの方が正解で、VPCやSubnetなど「VPC」の画面にまとめられているリソースは全て「EC2」のリソースなのです。なので Type: AWS::EC2::VPCAWS::EC2::Subnet となります。

歴史的経緯

AWSでEC2がリリースされた2006年当初、VPCは存在しませんでした。その後、EC2をネットワーキングするための機能として2009年にVPCがリリースされた経緯があるのでしょう。

実はその名残がAWSの画面でも残っており、Security Groupというリソースは全く同じものを「EC2」の画面でも「VPC」の画面でも見ることができます。さらにRDSでは「VPC Security Group」という表記があります。普段「EC2」の画面でSecurity Groupを触っていると違和感がありますが、EC2とVPCの関係を知っていると謎が解けます。

EC2-Classic

蛇足ですが、VPCが存在しない時代のEC2は「EC2-Classic」と呼ばれていました。下記のサイトも参考まで。

おまけ

週4稼働の現役クラウドエンジニアと並行して、毎日AWSの個別相談やグループ指導もお受けしています。もしご興味あればTwitter @RubiconLink のDMまでお問い合わせください。フォローも大歓迎です。

Discussion