3.1創立 IAM 角色
3.1創立 IAM 角色開一個給lamda用的role
aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'arn:aws:iam::1234:role/lambda-ex 創立一個json (定義ec2開關機權限)
vipolicy.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": "*"
}
]
}創立一個policy
aws iam create-policy --policy-name ec2-start-stop-policy --policy-document file://policy.json
arn:aws:iam:::policy/ec2-start-stop-policy1234
新增這個policy到role裡aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRoleaws iam attach-role-policy --role-name lambda-ex --policy-arnarn:aws:iam:::policy/ec2-start-stop-policy1234
記下他的ARN
3.2 新增lamda 函式
3.2 新增lamda 函式vi start.py
import boto3
region = 'ap-northeast-1'
instances = ['i-1234']
def handler (event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.start_instances(InstanceIds=instances)
print('started your instances: ' + str(instances))
vi stop.py
import boto3
region = 'ap-northeast-1'
instances = ['i-1234']
def handler (event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances (InstanceIds=instances)
print('stopped your instances: ' + str(instances))
zip start.zip start.py
zip stop.zip stop.py
使用3.1的ARNaws lambda create-function --function-name\ --zip-file fileb://start.zip --handler start.handler --runtimestart_functionpython3.7\ --rolearn:aws:iam:::role/lambda-ex1234
aws lambda create-function --function-name\ --zip-file fileb://stop_function.zip --handlerstop.handler --runtimestoppython3.7\ --rolearn:aws:iam:::role/lambda-ex1234
3.3 新增排程
3.3 新增排程 1-5 早上八點開機aws events put-rule --name "start_function" --schedule-expression "cron(0 0 ? * MON-FRI *)"
1-5 下午六點關機
aws events put-rule --name "stop_function" --schedule-expression "cron(0 10 ? * MON-FRI *)"