こんにちは、現在【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】を選択します。

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

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

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

サーバーインスタンスのオンとオフ実行のためLambda 関数作成
サーバーインスタンスのオフのためLambda 関数作成
ステップ1: 【AWS Console】の検索バーで、【Lambda】と入力して選択します。次に、【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】を選択します。

ステップ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に変更します。

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

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

上記の結果により、EC2インスタンスは【Lambda Function】を使用して成功にシャットダウンされました。
サーバーインスタンスのオフのためLambda 関数作成
ステップ1: 【AWS Console】の検索バーで、【Lambda】と入力して選択します。次に、【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】を選択します。

ステップ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))

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

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

上記の結果により、【EC2インスタンス】は【Lambda Function】を使用して成功に起動されました。
Lambda関数の実行時間設定のためCloudwatchルール作成
ステップ1: 【AWS Console】のインターフェースで, Serviceの検索バーに【Cloudwatch】と入力して選択します. 【Cloudwatch】画面に入った後、[Events]を選択-> 【Rules】 -> 【Create 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】を選択します。

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

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

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

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

【Cloudwatch】で上記の2つのルールを作成した後、【ID’i-0098ce21800af86f5’】を有する【EC2インスタンス】は、月曜日から金曜日まで毎日午前8時VNに自動的にオンになり、午後6時VNに自動的にオフになります。
■ONETECHのサーバレスの実績
検定試験を作成するシステムを開発しました。試験内容、設問設定、採点数を定義することができます。大量アクセスに対応しました。 AWSサーバーレスアーキテクチャ、APIGateway、Lambda、 Fargate、 DynamoDB、 SQS、 CloudFoundationを実装しました。
オンライン教育ライブ配信中のアンケートシステム開発 既存のオンライン教育向け動画配信プラットフォームへ連携するアンケート及び設問システムを開発しました。動画配信中に確認のためのアンケートを収集できます。
まとめ
では、私はシステムのコストを最適化および節約できるように、AWSサーバレスのLambdaでEC2インスタンスサービスを自動的にオンとオフにする方法を説明する記事を紹介しました。ご質問やご提案がございましたら、下にコメントを残してください。私の能力と経験でお答えします。ご成功を祈っています。