AWS Configを利用したElastic IPの自動削除の仕組み[AWS Config+AWS CloudFormation]

こんにちは。SCSKのふくちーぬです。

皆さんは、西谷さんが2月に主催した『第一回AWSコスト削減天下一武道会』に参加されましたでしょうか。

大変盛り上がっていて、技術はもちろんのことコスト削減に対する楽しさや根性を感じることができました。大きいものから、小さいものまで様々なコスト削減法が紹介されていました。”Elephant in the room”に向き合うことが大切でしたね🐘

今回は、弊社環境でも稼働しているElastic IPの自動削除の仕組みについてご紹介します。

2024/2の料金体系の変更により、パブリックIP(Elastic IPを含む)について料金が発生するようになりましたので、”コスト削減”ではなく”AWS環境のお掃除”ということはご了承ください。

Elastic IPの料金体系について

以前までの料金体系は、ざっくり以下の通りでした。

僅かとは言えども、Elastic IPを作成後放置しておくと料金がかかってしまいます。

状態 料金
Elastic IPをEC2にアタッチ済みで、インスタンスを実行中 0.0$/1h
Elastic IPがどのリソースにもアタッチされていない 0.005$/1h

新しい料金体系が、2024/2から適用されており以下の通りです。
EIPがEC2にアタッチされているか否かに関わらず、料金が発生するようになりました。

状態 料金
パブリックIP(Elastic IPを含む)の数
(アタッチ済みかどうかを問わない)
0.005$/1h

料金に関する詳細は、以下をご確認ください。

 

アーキテクチャー

  • Configルールである、”eip-attached”を利用して検査します。
  • Configの修復オプションで自動削除を実施します。
  • “AWS-ReleaseElasticIP”を利用して非準拠(Elastic IPが利用中のEC2及びENIにアタッチされていない)の場合、Elastic IPが解放されるようSSM-Automationを実行させます。

 

完成したCloudFormationテンプレート

以下のテンプレートを使用して、デプロイします。

AWSTemplateFormatVersion: "2010-09-09"
Description: Create Config (Delete EIP System)
Resources:
  # ------------------------------------------------------------#
  #  Config
  # ------------------------------------------------------------#
  ConfigRule:
      Type: AWS::Config::ConfigRule
      Properties:
          ConfigRuleName: eip-attached
          Description: Checks whether all EIP addresses allocated to a VPC are attached to EC2 instances or in-use ENIs.
          Scope: 
              ComplianceResourceTypes: 
                - "AWS::EC2::EIP"
          Source: 
              Owner: "AWS"
              SourceIdentifier: EIP_ATTACHED
  ConfigRemediationConfiguration:
      Type: AWS::Config::RemediationConfiguration
      Properties:
          ConfigRuleName: !Ref ConfigRule
          Automatic: "true"
          #自動修復再試行回数と秒数は,自動修復の修復の場合のみ
          MaximumAutomaticAttempts: 5
          RetryAttemptSeconds: 60
          Parameters: 
              AllocationId: 
                  ResourceValue: 
                      Value: "RESOURCE_ID"
              AutomationAssumeRole: 
                  StaticValue: 
                      Values: 
                        - !GetAtt IAMRoleForSSM.Arn
          TargetId: AWS-ReleaseElasticIP
          TargetType: "SSM_DOCUMENT"
          TargetVersion: "1"
  # ------------------------------------------------------------#
  #  IAM Role,IAM Policy
  # ------------------------------------------------------------#
  IAMRoleForSSM:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub ${AWS::Region}-ssm-AutomationRole-DeleteEIP
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          -
            Effect: "Allow"
            Principal:
              Service:
                - "ssm.amazonaws.com"
            Action:
              - "sts:AssumeRole"
      ManagedPolicyArns:
        - 'arn:aws:iam::aws:policy/service-role/AmazonSSMAutomationRole'
      Path: "/"

  iamPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: !Sub ${AWS::Region}-iam-policy-ReleaseEIP
      PolicyDocument:
              Version: "2012-10-17"  
              Statement:  
                - Effect: Allow  
                  Action:  
                    - ec2:ReleaseAddress
                  Resource: "*"
      Roles:
        - !Ref IAMRoleForSSM  

 

検証

Elastic IPの作成

EC2のマネジメントコンソールから、”Elastic IP”ペインを選択します。”Elastic IPアドレスを割り当てる”を押下します。

“割り当て”を押下してください。

Elastic IPが作成されたことが確認できます。

自動削除の確認

Configのマネジメントコンソールを開きます。”ルール”ペインを選択すると、作成したルールが確認できます。

今回作成した”eip-attached”が存在しています。

“eip-attached”を押下します。

Elastic IPをアタッチせずに放置して待っていると、非準拠のEIPが検出されます。

ちなみに準拠しているElastic IPの場合は、以下のように表示されます。

しばらくすると、対象のEIPが自動削除されましたね。

 

最後に

いかがだったでしょうか。

Configを利用することで、Elastic IPの自動削除を実現できました。AWS環境を綺麗に維持しておくためにも、是非導入を検討ください。

今後は、他のConfigルールについてもご紹介したいと思います。

本記事が皆様のお役にたてば幸いです。

ではサウナラ~🔥

タイトルとURLをコピーしました