2
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?

More than 1 year has passed since last update.

AWS CDK(ver.2)PythonでEC2 instanceの自動起動・停止を実装してみる

Last updated at Posted at 2023-06-09

AWS CDKを使ってEC2 instanceの自動起動・停止を実行するリソースを作成してみます。

全コードはGithubを参照してください。
Githubはここ

image.png

前提条件

  • AWS CDK v.2 がインストールされていること
  • Python 3.x がインストールされていること
  • AWSアカウントがあり、AWS CLIが設定されていること

※Cloud9を使うとこの辺りがPassできるため、Cloud9を使って今回の記事の内容は作成しています。

構築手順

1. CDKアプリの初期化

先ずはCDKアプリの初期化を行います。

$ mkdir cdk-ec2-auto-stop-start
$ cd cdk-ec2-auto-stop-start
$ cdk init --language python

2.必要なパッケージをインストール

続いて必要パッケージのインストールになります。
ここでは、CDKアプリを初期化した際に作成された.venvを有効化しています。

$ source .venv/bin/activate
$ pip install -r requirements.txt

3. スタックの記述

from aws_cdk import (
    Stack,
    aws_ec2 as ec2,
    aws_events as events,
    aws_events_targets as targets
)
from constructs import Construct

class CdkEc2AutoStopStartStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        # VPC creation with private subnets
        vpc = ec2.Vpc(
            self, "VPC",
            max_azs=2,  # default is all AZs in the region
            subnet_configuration=[
                ec2.SubnetConfiguration(
                    subnet_type=ec2.SubnetType.PRIVATE_ISOLATED,
                    name="Private",
                    cidr_mask=24,
                )
            ],
        )

        # Create an EC2 instance
        instance = ec2.Instance(
            self, "Instance",
            instance_type=ec2.InstanceType("t3.micro"),
            machine_image=ec2.MachineImage.latest_amazon_linux2(),
            vpc=vpc,
            vpc_subnets=ec2.SubnetSelection(
                subnet_type=ec2.SubnetType.PRIVATE_ISOLATED
            ),
        )
        
        # Create stop rule
        stop_rule = events.Rule(
            self, 'StopRule',
            schedule=events.Schedule.cron(minute='0', hour='10'),   # 日本時間の19時
            targets=[
                targets.AwsApi(
                    service='EC2',
                    action='stopInstances',
                    parameters={
                        'InstanceIds': [instance.instance_id]
                    },
                )
            ],
        )
        
        # Create start rule
        stop_rule = events.Rule(
            self, 'StartRule',
            schedule=events.Schedule.cron(minute='0', hour='0'),   # 日本時間の9時
            targets=[
                targets.AwsApi(
                    service='EC2',
                    action='startInstances',
                    parameters={
                        'InstanceIds': [instance.instance_id]
                    },
                )
            ],
        )

4. CDKのデプロイ

cdk deploy

デプロイが完了すると、日本時間の9時に起動、19時に停止するリソースが作成されます。

まとめ

この記事では、AWS CDK ver.2を用いて、PythonでEC2 instanceの自動起動・停止を実装する方法を紹介しました。
どなたかの参考となれば幸いです。

2
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
2
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?