BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【AWS・Systems Manager・オートメーション】Systems Managerのオートメーションを使ってEC2インスタンスをサクっと作ろう!

はじめに


こんにちは!
株式会社BFT名古屋支店・インフラ女子(?)のやまぐちです。

AWSリソースを自動で作成するとなるとまず検討されるのがAWS CloudFormationです。しかし最初の頃は「難しそう…」とか「どんな問題が潜んでいるかわからない…」など不安な気持ちを少なからず抱えていらっしゃるかと思います。

そんな方にお勧めしたいのがAWS Systems Managerのオートメーション機能です。

このオートメーションを使えば自分でCloudFormationのテンプレートを書かないで済みます。既に用意されている300以上のテンプレートを使って様々な作業を安全に行うことができるのです。

今回はAWS Systems Managerのオートメーション機能を使ってEC2インスタンスを作成する方法をご紹介します。とっても簡単なので「自動化に触れてみたい」と思う方に読んでいただけると嬉しいです。

AWS Systems Managerを使ってEC2インスタンスを作る


AWS Systems Managerとは

AWS Systems Manager(運用時の洞察を改善し、実行)| AWS

AWS Systems Manager(以後、Systems Manager)EC2インスタンスやオンプレミスのサーバ、エッジデバイスを統合的に運用管理できるツール群を提供するAWSサービスです。サーバ内部のディレクトリ構成やユーザ・グループ情報の表示、インバウンド方向にセキュリティグループに穴をあけることなくセキュアにリモートアクセス、定型作業をカレンダー登録し自動実行するなど多機能すぎて使いこなすことが難しいサービスです。

しかも無料枠内で使用できることが多く、かかってもあまり気にしない程度(月額数百円)なので気軽に始められるんです。

Systems Managerの機能を使用するにはSSMエージェントの導入が必要になりますが、公式のAMIの多くにはデフォルトで導入されているので、エージェント導入の手間もありません。その他必要になるのは、Systems Manager APIへの経路(インターネットへのアウトバウンド443かVPCエンドポイントを介してのアクセス)とEC2インスタンス等に必要なポリシーを含むロールをアタッチすることだけです。

自動化(オートメーション)でできること

今回はSystems ManagerのオートメーションでEC2インスタンス作成しますが、冒頭でも記載した通り2022/05現在で300以上のランブック(実行する内容)が登録されています。また、このランブックは自分自身で定義しより柔軟な操作を実装可能です。

ランブックでできることは多種多様です。

  • AWSリソースの作成・削除、AWSリソースの設定変更など
    • 今回ご紹介するEC2作成以外にも(忘れがちな)EIPを開放するとかS3バケットの権限変更など
  • バックアップ用途
    • EC2のスナップショット作成やAMI作成、DynamoDBのテーブルバックアップも可能
  • SNS通知などのアクション

前知識としてぼんやりとオートメーションができることを理解してもらったので、さっそくEC2インスタンスを作成していきましょう!

EC2インスタンスLinux)を作ってみよう

今回実行するランブックは「AWS-CreateManagedLinuxInstance」です。実行するための前提条件として、以下の状態であることとします。

  • 前提条件
    • 作成先のネットワーク(VPC, サブネット, インターネットゲートウェイなど)が作成されていること
    • 「AmazonSSMManagedInstanceCore」ポリシーを含むロールが作成済であること
      • 以前の「AmazonEC2RoleforSSM」は権限が広いため現在は非推奨
      • 他にも必要なポリシーがあれば付与する
    • オートメーションを実行するユーザまたは実行する際に指定するロールにEC2インスタンスを作成する権限があること
    • EC2インスタンス作成に必要な情報があること(後述)

事前に以下の情報を集めておくとよいです。入力パラメータには「StackName」というものもあり、CloudFormationを使って作るということがわかりますが、このスタックはすぐに削除されるためデフォルトの名前を使うことにします。

  • EC2インスタンス作成に必要な情報 (Linux版)
    • AMI ID
    • VPC ID
    • Subnet ID
    • インスタンスにアタッチするロール名
    • セキュリティグループ名
    • インスタンスタイプ
    • KeyPair名
      • セッションマネージャー経由でログインするとしても鍵の指定は必須
    • RemoteAccessCidr(セキュリティグループでソースIPになる部分)
      • デフォルトは「0.0.0.0/0」
      • 今回指定するセキュリティグループはインバウンドで何も許可していないためデフォルトのままにしておく

1.Systems Managerの左メニュー [ 自動化 ] から [ オートメーションの実行 ] を押します。
 

2. [ Amazonが所有 ] タブでドキュメントカテゴリ [ Instance management ] にチェックを入れ [ AWS-CreateMangedLinuxInstance ] を選択し [ 次へ ] を押します。
 

3.事前に用意した情報で入力パラメータを埋め、[ 実行 ] を押します。
 

4.実行の詳細画面が表示され、ステップごとの進捗を確認できます。このEC2インスタンスを作成するランブックは、[ createManagedInstanceStack ] と [ deleteManagedInstanceStack ] という二つのステップがあり順に実行されます。
 

5.しばらくすると2ステップ目の [ deleteManagedInstanceStack ] ステータスも成功となり、全体的なステータスが「成功」で終わりました!簡単!!

6.作成されたインスタンスを見てみると起動していますね。最近EC2インスタンスを作成するUIが変わって戸惑ったのですが、こういった自動化ツールを使えばUIの違いを気にすることもなくて済みそうです。

終わりに


ちなみにCloudFormationで作成してそのスタックを削除しているのにEC2インスタンスは削除されないの?と思った方(というか私)、このランブックの中身を見てみると、どうやらCloudFormationではLambdaを経由してEC2インスタンス作成していました。

それであればスタックを削除しても消えるのはLambda。Lambdaで作成したEC2インスタンス自体には何の影響もないということですね。よくできてます。

運用シーンで使えそうな気配が満載のSystems Managerのオートメーション。もう少しいろいろ触って今後の運用に活かしていきたいと思います!

以上、ここまで読んでいただきありがとうございました~ ^ ^