【AWS】CloudFormationで Type: AWS::EC2::VPC や AWS::EC2::Subnet ってどういうこと?
初めまして、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::User
や AWS::IAM::Group
は抵抗ないでしょう。IAMでUserやGroupを作るということですね。確かにIAMの管理画面でもUserやGroupのメニューがあります。
AWS::EC2::VPC
や AWS::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::VPC
や AWS::EC2::Subnet
は抵抗ありますね。というのもAWSの管理画面からすると、VPCというサービスの中にVPCやSubnetのメニューがあるので AWS::VPC::VPC
や AWS::VPC::Subnet
の方が自然に思えるからです。
実はAWSの裏側としてはCFnの方が正解で、VPCやSubnetなど「VPC」の画面にまとめられているリソースは全て「EC2」のリソースなのです。なので Type: AWS::EC2::VPC
や AWS::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」と呼ばれていました。下記のサイトも参考まで。
- EC2-Classic - Amazon Elastic Compute Cloud
- EC2-Classic からの脱却! VPC 完全移行 ~ Backlog 編 | 株式会社ヌーラボ(Nulab inc.)
おまけ
週4稼働の現役クラウドエンジニアと並行して、毎日AWSの個別相談やグループ指導もお受けしています。もしご興味あればTwitter @RubiconLink のDMまでお問い合わせください。フォローも大歓迎です。
Discussion