AWS Lambdaから EC2起動&停止を行う

2019-09-03
amazon%20awsiamlambda
    

目次

AWS Lambda から EC2 の起動と停止を行う方法の紹介。

大まかな流れの紹介

LambdaからEC2の起動・停止の関数作成までの大まかな流れは次のようになります。

IAMポリシー作成 ↓ IAMロール作成 ↓ Lambda関数作成 ↓ IAMロールのアタッチ

こんな流れになります。

IAMポリシー作成

AWSのIAMのページからポリシーを選択します。 ポリシーでは CloudWatch Logs 用のポリシーと、EC2インスタンス起動・停止用のポリシーを作成します。 CustomEc2StartStopPolicy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Start*",
                "ec2:Stop*"
            ],
            "Resource": "*"
        }
    ]
}

CustomCWLogsPutLogsPolicy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
}

ポリシーのアタッチが上手く行われていると次のように表示されます。

IAMロール作成

次にIAMロールを作成します。各項目は次の情報を入力します。

エンティティ: Lambda
アタッチするポリシー: ["CustomEc2StartStopPolicy", "CustomCWLogsPutLogsPolicy"]
ロール名: CustomEc2StartStopRoll

Lambda作成

次にLambdaを作成します。各項目は次のように設定しました。

関数名: StartStopEc2Func
ロール: CustomEc2StartStopRoll
ランタイム: Python3.7

ソースコードは次のように記述しました。

import boto3
 
def lambda_handler(event, context):
    region = event['Region']
    instances = event['Instances']
    ec2 = boto3.client('ec2', region_name=region)
    if event['Action'] == 'start':
        ec2.start_instances(InstanceIds=instances)
    elif event['Action'] == 'stop':
        ec2.stop_instances(InstanceIds=instances)
    else:
        return 1
    return 0

作成が完了すると次のように表示されます。

※この画像はCloudWatch Eventsを設定した場合の画像です。

動作確認

Lambdaのテストイベントからテストを行い、EC2の起動停止ができるか確認します。

起動テスト

起動のテストを行います。テスト名は任意の名前をつけてください。

Lambdaのテストから次のリクエストを行います。

(i-XXXXXXXXXXXXXXXXはEC2のインスタンスID)

{
  "Action": "start",
  "Region": "ap-northeast-1",
  "Instances": [
    "i-XXXXXXXXXXXXXXXX"
  ]
}

EC2のダッシュボードからインスタンス状態を確認し起動していれば成功です。

停止テスト

(i-XXXXXXXXXXXXXXXXはEC2のインスタンスID)

{
  "Action": "stop",
  "Region": "ap-northeast-1",
  "Instances": [
    "i-XXXXXXXXXXXXXXXX"
  ]
}

EC2のダッシュボードからインスタンス状態を確認し停止していれば成功です。

参考

https://dev.classmethod.jp/cloud/aws/simple-auto-start-stop-for-ec2/

[AWS]LambdaでEC2の起動・停止を制御する

    
s-yoshiki
s-yoshiki
githubtwitterqiita
Web作ってますが、インタラクティブなプログラミングも好きです。
JavaScript / Vue / node.js / PHP / AWS / OpenCV

関連記事

GitHub Actions で Gatsby をビルドし Amazon S3 にデプロイする
GitHub Actions について あらかじめ準備しておくもの AWS IAM ユーザを環境変数にセットする workflowの記述 ビルド バッジを利用する 終わりに 参考にしたところ Gatsbyで作った静的サイトを、GitHub Actions…

WordPressやめます Gatsbyに移行しました
これまでのWordPress運用 なぜWordPressを捨てるのか? なぜGatsbyを利用するのか? gatsbyについて WordPressから記事の救出 移行対象記事の抽出 記事の置換 Gatsbyテーマの作成 Gatsby…

AWS BlackBeltを写経する EC2編
問われやすいサービス EC2 AWSサービス別資料 https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/ 問われやすいサービス EC2 Amazon EC2 (201…

WordPressをAmazon S3 + CloudFront構成で月額200円で運用
システム全体の この構成のメリット・デメリット AWSの構成 静的ページを作成するWordPressプラグイン WP2Static WP Offload Media Lite WordPress on Docker環境 まとめ AmazonS…

SAA試験対策 AWS BlackBeltを写経する
はじめに 写経の例 EC2 EBS
S3 + CloudFront でコンテンツをHTTPS配信
S3バケットを作成する オプションの設定 アクセス許可の設定 S3アクセス権限の公開設定 ACM(AWS Certificate Manager) ステップ 1: ドメイン名の追加 ステップ 2: 検証方法の選択 ステップ 3: 確認とリクエスト ステップ…

AWSソリューションアーキテクト参考資料集
ブラックベルト サービス別資料 AWS Well-Architected フレームワーク 特に目を通すべき資料の一覧です。 ブラックベルト https://aws.amazon.com/jp/aws-jp-introduction/ サービス別資料 https://aws…

AWS ソリューションアーキテクト不合格体験記を集める
AWSソリューションアーキテクトアソシエイトに1回落ちたけど勉強し直して合格した話 AWS認定ソリューションアーキテクトアソシエイト(SAA)不合格体験記 非エンジニアがAWSソリューションアーキテクトに合格するまで AWSソリューションアーキテクト認定に落ちた話 AWS…

AWS EC2 + Bitnami で始める WordPress
Bitnami WordPressを使うメリット 個人的に感じた3つのメリット Amimoto AMI と比較して Bitnami AMIについて Bitnami WordPressの構成と設定 サーバの構成 各種設定 MySQL WordPress Apache…

AWS System Manager(SSM)でEC2にSSHを実行! ポート解放なし
環境 クライアント環境 macOS mojava AWS CLI Session Manager Plugin リモート環境 Ubuntu 18.04 amazon-ssm-agent クライアント環境のセットアップ macOS に Session Manager…

最新の投稿

GitHub Actions で Gatsby をビルドし Amazon S3 にデプロイする
GitHub Actions について あらかじめ準備しておくもの AWS IAM ユーザを環境変数にセットする workflowの記述 ビルド バッジを利用する 終わりに 参考にしたところ Gatsbyで作った静的サイトを、GitHub Actions…

cloudinaryによる画像ファイルの管理 はじめてみる
目的 cloudinary について 他のサービスとの比較 料金プラン アカウントの登録 利用してみる ダッシュボード 画像の編集 APIベースでのアクセス 感想 参考 画像の管理や配信、さらには加工といった事ができるsaas型のcloud…

JavaScriptによる2分探索(バイナリサーチ) のサンプルコード
2分探索について ソース 参考 JavaScriptで2分探索(バイナリサーチ)を実装してみました。…

Vue.jsで作成された、ちょっと面白くて役立ちそうなサービス
UIコンポーネント VueSocial CKEditor 5 Vue.Draggable Vuetable 2 vuejs-datepicker Kalendar Vue Apexcharts Vue.js Google Charts vue-cart WebIDE…

GitHubのリポジトリをGitLabに同期する GitLabのミラーリング機能
GitLabのミラーリングについて GitHubのリポジトリをGitLabに反映する その他 参考 GitLabのミラーリング機能によりGitHubなどの外部のリポジトリとのミラーリングを行うことができます。 これを使ってGitHub…

WordPressやめます Gatsbyに移行しました
これまでのWordPress運用 なぜWordPressを捨てるのか? なぜGatsbyを利用するのか? gatsbyについて WordPressから記事の救出 移行対象記事の抽出 記事の置換 Gatsbyテーマの作成 Gatsby…

WordPressのDBから記事データを抽出する
WordPressのDB関連図 公開記事一覧の取得 タグ・カテゴリの取得 サムネイルの取得 おまけ: PHPスクリプト化しました 参考にしたところ WordPressにため込んだデータMarkdown化しGatsby…

ハイフンとかマイナスとかダッシュとか

Firebase + Nuxt で認証付きページを作るときに参考にしたいところ
Webアプリケーションのセッション管理にJWT導入を検討する際の考え方 Service Worker によるセッション管理 ユーザー セッションの管理 Nuxt.jsとFirebaseでSPA×SSR×PWA×サーバーレスを実現する CookieとセッションとJWT SSR…

GolangをCGIとして実行する
環境 golang パッケージ ソースと実行 ビルドとサーバ実行 標準ライブラリのみ Golang を CGIとして実行する際のメモ 環境 golang パッケージ 以下のモジュールを利用しています。 github.com/gorilla/mux…

Tags

Dates

© 2020   404 motivation not found