🐍

[AWS モックテスト]オンプレ↔︎EC2をVPN接続:VPCフローログを確認したい。

2024/09/25に公開

1. はじめに

この記事では、オンプレ↔︎EC2をVPN接続し、VPCフローログ確認のモックテストを行う方法について説明します。

メリット

  • 不注意による無駄な課金が発生しない
  • コードベースでAWSサービスを理解できる

使用するツール

  • moto
  • pytest
  • os

2. テスト環境の準備

2.1 AWSテスト環境の作成

@pytest.fixture(scope='function')
def aws_testenv():
    import os
    os.environ['AWS_ACCESS_KEY_ID'] = 'test'
    os.environ['AWS_SECRET_ACCESS_KEY'] = 'test'
    os.environ['AWS_SECURITY_TOKEN'] = 'test'
    os.environ['AWS_SESSION_TOKEN'] = 'test'

コード解説

  • ⚪︎@pytest.fixture(scope='function'):

  • pytestのフィクスチャを定義するデコレーター

  • scope='function'は各テスト関数ごとにフィクスチャが実行

  • ⚪︎os.environ[''] = '':

  • AWSのモックデータで使用する環境変数を設定

  • アクセスキーなど、必要な認証情報をテスト用に設定

3. VPCフローログのモックテスト

@mock_aws
def test_vpc_flow_logs(aws_credentials):
    # モックのAWS環境を設定
    ec2 = boto3.client('ec2', region_name='us-west-2')
    logs = boto3.client('logs', region_name='us-west-2')
    
    # VPCの作成
    vpc = ec2.create_vpc(CidrBlock='10.0.0.0/16')
    vpc_id = vpc['Vpc']['VpcId']
    
    # CloudWatch Logsグループの作成
    log_group_name = 'vpc-flow-logs'
    logs.create_log_group(logGroupName=log_group_name)
    
    # フローログの作成
    response = ec2.create_flow_logs(
        ResourceIds=[vpc_id],
        ResourceType='VPC',
        TrafficType='ALL',
        LogGroupName=log_group_name,
        DeliverLogsPermissionArn='arn:aws:iam::123456789012:role/FlowLogRole'
    )

3.1 コード解説

  1. @mock_aws:
  • motoライブラリが提供するデコレーター
  • この関数内でのAWS操作をすべてモック化できる
  1. EC2とCloudWatch Logsクライアントの作成:
ec2 = boto3.client('ec2', region_name='us-west-2')
logs = boto3.client('logs', region_name='us-west-2')
  1. VPCの作成:
vpc = ec2.create_vpc(CidrBlock='10.0.0.0/16')
vpc_id = vpc['Vpc']['VpcId']
  • CidrBlockでVPCのIPアドレス範囲を指定
  • 作成されたVPCのIDを取得
  1. CloudWatch Logsグループの作成:
log_group_name = 'vpc-flow-logs'
logs.create_log_group(logGroupName=log_group_name)
  1. フローログの設定:
response = ec2.create_flow_logs(
    ResourceIds=[vpc_id],
    ResourceType='VPC',
    TrafficType='ALL',
    LogGroupName=log_group_name,
    DeliverLogsPermissionArn='arn:aws:iam::123456789012:role/FlowLogRole'
)
  • ResourceIds: ログを取るVPCを指定
  • ResourceType: ログを取るリソースの種類(VPC)
  • TrafficType: 記録するトラフィックの種類(ALL)
  • LogGroupName: ログの保存先
  • DeliverLogsPermissionArn: ログを書き込む権限を持つIAMロールのARN

4. まとめ

pytestとmotoを使用することで、実際のAWS環境を使用せずにテストを行うことができるし、不要な課金を避けて勉強できる。
AWS勉強している人はぜひ試してみてください!

Discussion