1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

こんにちはあるいはこんばんは。みなさんはCloudFormationを使っていらっしゃいますか?私はふだんTerraformを使うことが多く、Cloudformationを勉強中です。勉強中ですとやはり、Linterや静的解析ツールに色々教えてもらいたくなります。
今回は、CloudformationのLinter、cfn-lintを試してみます。

cfn-lintのLinter規則は以下をご覧ください。

実際にやってみる

CloudFormationテンプレートのサンプルはこちらです。

Resources:
  MyVPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
      Tags:
        - Key: Name
          Value: MyVPC

  MySubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !Ref MyVPC
      CidrBlock: 10.0.1.0/24
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: MySubnet

  MySecurityGroup:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupDescription: My security group
      VpcId: !Ref MyVPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0

  MyEC2Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: ami-0abcdef1234567890  # Replace with your AMI ID
      InstanceType: t2.micro
      SubnetId: !Ref MySubnet
      SecurityGroupIds:
        - !Ref MySecurityGroup
      KeyName: my-key-pair  # Replace with your key pair name

では、上記に色々フォーマットエラーを仕込んでみましょう。

(1)存在しないTypeにタイポしてみます。

-   Type: 'AWS::EC2::VPC'
+   Type: 'AWS::EC2::VPCC'

(1)指摘できました

E3001 Invalid or unsupported Type AWS::EC2::VPCC for resource MyVPC in us-east-1
cfn.yaml:3:5

E3008 Property "VpcId" can Ref to resources of types [AWS::EC2::VPC] at Resources/MySubnet/Properties/VpcId/Ref
cfn.yaml:15:7

E3008 Property "VpcId" can Ref to resources of types [AWS::EC2::VPC] at Resources/MySecurityGroup/Properties/VpcId/Ref
cfn.yaml:26:7

(2)subnetのIP範囲を、VPCを超えたものにしてみます。

-     CidrBlock: 10.0.1.0/24
+     CidrBlock: 10.0.0.0/8

(2)指摘できました。指摘の言い方がちょっと異なりますが。

E3031 CidrBlock contains invalid characters (Pattern: x.x.x.x/y) at Resources/MySubnet/Properties/CidrBlock
cfn.yaml:16:7

(3)存在しないプロトコルにタイポしてみます

-       - IpProtocol: tcp
+       - IpProtocol: tcpp

(3)残念!!見つけられませんでした。ここから先は、静的解析ツールが必要かもしれません。

まとめ

今回は、cfn-lintを試してみました。細かな静的解析までいかずとも、コードを書く上でかなり助けてくれそうです。

参考にしたwebサイト https://aws.amazon.com/jp/blogs/news/git-pre-commit-validation-of-aws-cloudformation-templates-with-cfn-lint/

  • AWS は、米国その他の諸国における Amazon.com, Inc. またはその関連会社の商標です。
  • Terraform は、HashiCorp, Inc. の米国およびその他の国における商標または登録商標です。
  • その他、記載されている会社名および商品・製品・サービス名は、各社の商標または登録商標です。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?