AWSサーバレスLambdaを使ってEC2コスト最適化

こんにちは、現在【ONETECH】社でインフラの役職を努めている【Nguyen Vinh Nghi】です。次の記事では、AWSサーバレスサービスのLambdaでEC2インスタンスのコストを最適化する方法を紹介します。具体的にはLambdaでEC2のオンとオフを自動的に設定します。各ステップの詳細を説明すると同時に、簡単に視覚化できるようにスクリーンショットを撮ります。ご覧ください。

このチュートリアルでは、サーバーインスタンスのオンとオフを実行するために2つの別々のLambda関数を作成します。次に、【Cloudwatch Rule】を作成して、上記のLambda関数の実行時間を設定します。

Lambdaの IAMロール作成

まず、LambdaのIAMロールを作成する必要があります。

ステップ1: 【AWS Console】にサインインします. 【Search Service】で、【IAM】と入力し、【IAM Management Console】にアクセスします-> 【Roles】を選択します。

IAM Management Console
IAM Management Console

ステップ 2: 【Create role】を選択します。 【Create role】 画面で, 【Common use cases】 を【Lambda】として選択します -> 【Next】

Create role
【Create role】

ステップ3: 【Permission policies】画面で, 【policies】を選択: 【AmazonEC2 Full Access】 と 【CloudWatch FullAccess】 -> 【Next】

Permission policies

ステップ4: 【Review】ページで、【Role name】を入力し、[Create role]をクリックします。この記事では、【Role name】は【ec2-lambda-role】です。mbda-role

Role name

サーバーインスタンスのオンとオフ実行のためLambda 関数作成

サーバーインスタンスのオフのためLambda 関数作成

ステップ1: 【AWS Console】の検索バーで、【Lambda】と入力して選択します。次に、【Lambda】ページの【Function】セクションを選択します。

AWS Console
AWS Console Lambda Function

ステップ2: 【Create function】を選択します。

ステップ3: 【Create function】画面で, 【Basic Information】は次のように入力します。
Function Name: ec2-lambda-auto-stop
Runtime: Python 3.9
Permission: Use an existing role. 【Existing role】を次のように選択します:パート1で作成したばかりのec2-lambda-role

ステップ4: 【Create Function】を選択します。

Create Function

ステップ5: 新しく作成した関数のコードソースセクションに次のソースコードをインポートします。

import boto3

region = ‘ap-northeast-1’

instances = [‘i-0098ce21800af86f5’]

ec2 = boto3.client(‘ec2’, region_name=region)

def lambda_handler(event, context):

    ec2.stop_instances(InstanceIds=instances)

    print(‘stopped your instances: ‘ + str(instances))【 Region】セクションで、「ap-northeast-1」をEC2インスタンスが配置されている【region】に変更し、「i-0098ce21800af86f5」を設定が必要なインスタンスIDに変更します。

 Import source code

ステップ6:  【Code source】セクションで、【Deploy を選択して新しいソースコードを更新します。次に、【Test】を選択します。今回は、【Configure event】ページが表示されます。このページパラメータをデフォルトのままにして、イベント名を入力し、【Save】を選択します。

Deploy

ステップ7:  Configure test event ページを保存した後、 【Test】 を選択して、作成したLambda関数をテストします

Configure test event
Configure test event

上記の結果により、EC2インスタンスは【Lambda Function】を使用して成功にシャットダウンされました。

サーバーインスタンスのオフのためLambda 関数作成

ステップ1: 【AWS Console】の検索バーで、【Lambda】と入力して選択します。次に、【Lambda】ページの【Function】セクションを選択します

Lambda Function bật Server
Lambda Function

ステップ2: 【Create function】を選択します。

ステップ3: 【Create function】画面で, 【Basic Information】は次のように入力します。
Function Name: ec2-lambda-auto-start
Runtime: Python 3.9
Permission: Use an existing role. 【Existing role】を次のように選択します:パート1で作成したばかりのec2-lambda-role 

ステップ4: 【Create function】を選択します。

Create function

ステップ5: 新しく作成した関数のコードソースセクションに次のソースコードをインポートします。

import boto3

region = ‘ap-northeast-1’

instances = [‘i-0098ce21800af86f5’]

ec2 = boto3.client(‘ec2’, region_name=region)

def lambda_handler(event, context):

    ec2.start_instances(InstanceIds=instances)

    print(‘started your instances: ‘ + str(instances))

Import source code

ステップ6: 【Code source】 セクションで、【Deploy】 を選択して新しいソースコードを更新します。次に、 【Test】を選択します。今回は、【Configure event】ページが表示されます。このページパラメータをデフォルトのままにして、イベント名を入力し、【Save】を選択します。

Config test event

ステップ7: 上記の結果により、EC2インスタンスは【Lambda Function】を使用して正常にシャットダウンされました。

作成したlambda関数を実行するためのテスト
作成したLambda関数を実行するためのテスト

上記の結果により、【EC2インスタンス】は【Lambda Function】を使用して成功に起動されました。

Lambda関数の実行時間設定のためCloudwatchルール作成

ステップ1: 【AWS Console】のインターフェースで, Serviceの検索バーに【Cloudwatch】と入力して選択します. 【Cloudwatch】画面に入った後、[Events]を選択-> 【Rules】 -> 【Create rule】

Tạo Cloudwatch Rule

ステップ2: [Create Rule]画面で、次のパラメーターを入力します。
–【Event Source 】-> 【Schedule.】
–【Cron expression】 -> 時間を指定します。記事の例は次のとおりです。
–【00 01 ? * MON-FRI *】
意味:毎週月曜日から金曜日の午前8時のベトナム時間(【CloudwatchAWS】のデフォルト時間は【GMT+0】です)
ターゲット:【ec2-lambda-auto-start】を選択します。(EC2対応のラムダ機能はパート2で作成されています)
パラメータを入力した後、【Configuration details】を選択します。

Create rule

ステップ3: 作成したいルールの名前を入力し、【Create rule】を選択します。

Create new rule

ステップ4: 最初のルールが成功に作成されたら、【Rules Cloudwatch】画面で【Create rule】を選択して次のルールを作成します。

Greate Rules Cloudwatch

ステップ5:【Create rule】画面で、次のパラメーターを入力します。
– 【Event Source 】-> 【Schedule.】
– 【Cron expression】 -> 時間を指定します。記事の例は次のとおりです。
– 【 00 11 ? * MON-FRI *】
意味:毎週月曜日から金曜日の午前18時のベトナム時間(【CloudwatchAWS】のデフォルト時間は【GMT+0】です)
ターゲット:【ec2-lambda-auto-start】を選択します。(EC2シャットダウンのラムダ機能はパート2で作成されていました)
パラメータを入力した後、【Configuration details】を選択します。

Configuration details

Bưステップ6: 作成したいルールの名前を入力し、【Create rule】を選択します。

Configuration details 2

【Cloudwatch】で上記の2つのルールを作成した後、【ID’i-0098ce21800af86f5’】を有する【EC2インスタンス】は、月曜日から金曜日まで毎日午前8時VNに自動的にオンになり、午後6時VNに自動的にオフになります。

 

■ONETECHのサーバレスの実績

検定試験を作成するシステムを開発しました。試験内容、設問設定、採点数を定義することができます。大量アクセスに対応しました。 AWSサーバーレスアーキテクチャ、APIGateway、Lambda、 Fargate、 DynamoDB、 SQS、 CloudFoundationを実装しました。

 

オンライン教育ライブ配信中のアンケートシステム開発 既存のオンライン教育向け動画配信プラットフォームへ連携するアンケート及び設問システムを開発しました。動画配信中に確認のためのアンケートを収集できます。

 

 

まとめ

では、私はシステムのコストを最適化および節約できるように、AWSサーバレスのLambdaでEC2インスタンスサービスを自動的にオンとオフにする方法を説明する記事を紹介しました。ご質問やご提案がございましたら、下にコメントを残してください。私の能力と経験でお答えします。ご成功を祈っています。

 

無料相談・お問い合わせ
ご相談やお見積もりは全て 無料 で対応いたします。

    「個人情報保護方針」をお読みいただき同意いただける場合は「送信」ボタンを押して下さい。
    入力していただいたメールアドレス宛に自動返信メールを送信していますので、お手数ですがそちらをご確認ください。
    無料相談・お問い合わせ
    ご相談やお見積もりは全て 無料 で対応いたします。

      「個人情報保護方針」をお読みいただき同意いただける場合は「送信」ボタンを押して下さい。
      入力していただいたメールアドレス宛に自動返信メールを送信していますので、お手数ですがそちらをご確認ください。
      無料相談
      お問い合わせ