常時起動を必要としない検証や開発環境など、業務時間だけサーバを起動して終業後は停止。
または、定期バッチの実行時間の前後だけサーバを起動して停止する。
など、コストを抑えた運用を行なう際、業務終了後に手動で停止を行なう手間や、業務開始時にサーバを起動する手間など、など一連のアクションをAWSの機能を利用して行なう事が可能です。
簡易的な起動・停止の自動化設定について記載。
ポリシーの作成
起動、停止のアクションを管理するポリシーを作成します。
1.IAM ポリシーで [ポリシーの作成] をクリック。
2.『 JSON 』タブを表示して以下のコードを貼り付けて [ポリシーの確認] をクリック。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
3.名前に [ EC2StatusActionPolicy ] と入力して [ポリシーの作成] をクリック。
ロールの作成
ポリシー管理するロールを作成します。
1.IAM ロールで [ロールの作成] をクリック。
2.『信頼されたエンティティの種類を選択』画面が表示される。
「このロールを私用するサービス」で [ Lambda ] を選択し、[次のステップ:アクセス制御] をクリック。
3.『Attach アクセス権限ポリシー』画面が表示される。
「ポリシーの作成」手順で作成した [ EC2StatusActionPolicy ] を有効にして、[次のステップ:タグ] をクリック。
4.『タグの追加』画面が表示される。
そのまま [次のステップ:確認] をクリック。
5.『確認』画面が表示される。
ロール名に [ EC2StatusActionRole ] を入力して、[ロールの作成] をクリック。
Lambdaの作成
実際にEC2インスタンスに対して起動、停止の処理を行なう関数を作成します。
1.Lambdaで [関数の作成] をクリック。
2.以下の値を設定後 [関数の作成] をクリック。
起動用の関数を作成時
項目 | 設定値 |
関数名 | EC2RunAction |
ランタイム | Python 3.9 |
アクセス権 | EC2StatusActionRole |
停止用の関数を作成時
項目 | 設定値 |
関数名 | EC2StopAction |
ランタイム | Python 3.9 |
アクセス権 | EC2StatusActionRole |
3.作成された関数で以下の設定し [保存] をクリック。**(共通の設定)**
項目 | 設定値 |
関数コード | ※以下のコードを参照 |
タイムアウト | 10秒 |
起動用のLambda関数コード
region = 'ap-northeast-1'
instances = ['i-xxxxxxxxxxxxxxxxx', 'i-yyyyyyyyyyyyyyyyy']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.start_instances(InstanceIds=instances)
print('started your instances: ' + str(instances))
停止用のLambda関数コード
import boto3
region = 'ap-northeast-1'
instances = ['i-xxxxxxxxxxxxxxxxx', 'i-yyyyyyyyyyyyyyyyy']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('stopped your instances: ' + str(instances))
※必要に応じてテストを行なう。
以下で記述したインスタンスに対してActionが実行されるので、不意のて停止などがないように細心の注意を払う。
4.[テスト] をクリック。
5.『テストイベントの設定』画面が表示される。
イベント名に [ test ] を入力して [作成] をクリック。
※JSONは初期値のままで問題ない。
6.[テスト] をクリック。
「実行結果: 成功」と表示される事を確認。
イベントの作成
Lambda関数を定期的に実行するイベントを作成します。
1.CloudWatch イベント を表示し、[今すぐ始める] をクリック。
2.『ステップ1:ルールを作成する』画面が表示される。
以下の値を設定して [詳細の設定] をクリック。
例)毎週月曜日から金曜日まで午前 9:00に起動する。
項目 | 設定値 |
パターン | スケジュール |
タイプ | Cron式 |
式 | 0 0 ? * MON-FRI * |
ターゲット | Lambda関数 |
関数 | EC2RunAction |
3.『ステップ2:ルールの詳細を設定する』画面が表示される。
以下の値を設定して [ルールの作成] をクリック。
項目 | 設定値 |
名前 | EC2RunEvent |
説明 | ※必要に応じて記載 |
状態 | ■ 有効化 |
4.ルールの作成が成功している事を確認・
例)毎日午後 19:00に停止する。
項目 | 設定値 |
パターン | スケジュール |
タイプ | Cron式 |
式 | 0 10 * * ? * |
ターゲット | Lambda関数 |
関数 | EC2StopAction |