🐍
[AWS モックテスト]オンプレ↔︎EC2をVPN接続:VPCフローログを確認したい。
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 コード解説
-
@mock_aws
:
- motoライブラリが提供するデコレーター
- この関数内でのAWS操作をすべてモック化できる
- EC2とCloudWatch Logsクライアントの作成:
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']
- CidrBlockでVPCのIPアドレス範囲を指定
- 作成されたVPCのIDを取得
- 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'
)
-
ResourceIds
: ログを取るVPCを指定 -
ResourceType
: ログを取るリソースの種類(VPC) -
TrafficType
: 記録するトラフィックの種類(ALL) -
LogGroupName
: ログの保存先 -
DeliverLogsPermissionArn
: ログを書き込む権限を持つIAMロールのARN
4. まとめ
pytestとmotoを使用することで、実際のAWS環境を使用せずにテストを行うことができるし、不要な課金を避けて勉強できる。
AWS勉強している人はぜひ試してみてください!
Discussion