スクエニ ITエンジニア ブログ

[初級] ハマグリ式! EC2 の設定項目をわかりやすくざっくり解説する ~AWS SDK for Python (Boto3) コードもあるよ~

はじめに

この記事を見つけたけど、後で見ようと思ったそこのあなた!

ぜひ下のボタンから、ハッシュタグ #ハマグリ式 でツイートしておきましょう!

こんにちハマグリ。貝藤らんまだぞ。 今回は、ハマグリ式! EC2 の設定項目をわかりやすくざっくり解説する ~AWS SDK for Python (Boto3) コードもあるよ~ をお届けします!

初級って?

ハマグリ式では、下記のようにレベルを設定しています。

  1. 初級者:初めてクラウドサービスを利用する人で、基本的な操作(例:ファイルの保存や、サーバーの起動)をインターフェースを通じて行うことができます。また、シンプルなセキュリティルールの設定や、一部の問題のトラブルシューティングに対応できます。
  2. 中級者:より深い知識を持ち、コードを用いて操作を自動化したり、より複雑なタスク(例:自動でサーバーの数を増減させる)を行います。また、より高度な監視や、全体のシステム設計と実装について理解があります。
  3. 上級者:幅広く深い知識を持ち、大規模で複雑なシステムを設計、実装、維持する能力があります。最先端のテクノロジーを活用し、安全性、耐障害性、効率性を最大化するためのソリューションを提供します。

ハマグリ式って?

貝藤らんまが作成するブログ記事のブランド名です。あまり気にせず読み飛ばしてください。

何を書くの?

以下の通りです。

  • この記事で書くこと
    • AWS EC2 の基本的な設定項目がどういうものか
    • AWS EC2 を作成する AWS SDK for Python (Boto3) コード
  • この記事で書かないこと
    • AWS EC2 のすべての設定項目がどういうものか
    • AWS EC2 設定項目の選び方
    • AWS EC2 設定項目の応用
    • AWS EC2 と AWS 他サービスとの連携
    • python コードの解説

免責事項

  • この記事に書かれていることは弊社の意見を代表するものではありません。
  • この記事に書かれていることには一定の調査と検証を実施しておりますが、間違いが存在しうることはご承知おき下さい。
  • 筆者の専門外の内容については断定を避けておりますが、あらかじめ間違いが存在しうることはご承知おきください。
  • 記事の内容は、記事執筆時点 (2023/10) での情報です。ご承知おきください。

AWS EC2 の設定項目をざっくり解説する

AWS で最も基本的なサービスといえば EC2 だと思います。

いわゆる「サーバー」を作成できるサービスで、Docker などのコンテナ技術が普及するまではまだまだ活用されていくでしょう。

そんな EC2 ですが、ちゃんと設定しようと思うとよくわからない設定があってモヤモヤすることもあるのではないでしょうか。

もちろん AWS 公式のドキュメントはありますが、専門用語 & 固有名詞を使って1から100まで説明されているので「初めてだから基本的なものだけ把握したいのに……」といった思いをする人も多いことでしょう。

この記事では初めに設定したほうがいい項目について、実用的な例を交えて少しだけ踏み込んで解説しています。

ドキュメント読み切れないし、まあ迷ったらデフォルトでいっか~。

という状態から、この記事を読んで脱却しましょう!

※2023年10月20日時点のコンソールを参考にわかりやすくざっくり解説します。
※限定的なケースでしか設定しない項目は説明を割愛しています。

名前とタグ

  • 名前:入力すると、Name タグに設定されます。これはコンソールのインスタンス一覧で分かりやすい位置に表示されます。

以下、「さらにタグを追加」ボタンを押した際の入力項目です。

  • キー:タグのキーを入力します。
  • 値:タグの値を入力します。
  • リソースタイプ:同時に作成される指定したリソースにも同じタグを付与します。

アプリケーションおよび OS イメージ (Amazon マシンイメージ)

  • Amazon マシンイメージ (AMI):OS イメージである AMI を選択します。公開されている最新のものやすでに構築されたもの、指定の過去バージョンなど希望のものを選択します。

  • アーキテクチャ:選択できる場合、アーキテクチャを選択できます。

最新の Ubuntu や Windows、NVIDIA や Minecraft の設定がすでにされているイメージなどがあるので一度探してみるといいぞ。

インスタンスタイプ

  • インスタンスタイプ:インスタンスタイプを選択します。希望する性能のタイプを選択しましょう。

小規模だったり開発用途は t 系、それ以外は CPU や メモリのどちらを重視するかなどで選ぶといいぞ。t 系はクレジットという仕組みがあり、CPU を100%使えるわけではないことに注意!

キーペア (ログイン)

  • キーペア名:インスタンス作成時に設定したキーペアを認証できるよう設定します。AMI に認証情報が含まれている、AMI でセッションマネージャーが利用できるようになっている、ユーザーデータ* で書き込むなどの場合は「キーペアなしで続行」でも問題ありません。

*ユーザーデータ: 起動時に実行してほしいスクリプトを指定できる機能。後述の「高度な詳細」で設定できますが、序盤はあまり使わないのでこの記事では説明を割愛しています。

Ubuntu の新しい OS では暗号方式が古いとログインできない、といった落とし穴もあった。ログインできないときはチェックしてみるといいかもだぞ。

ネットワーク設定

  • ネットワーク:AWS のネットワークである VPC を選択します。VPC の作成方法は今回説明しません。

  • サブネット:VPC 内のサブネットを選択します。公開用途か非公開用途かを確認し、ルートが適切に設定されたサブネットを選択しましょう。

いわゆるプライベートサブネットの場合は、NAT ゲートウェイがあるかどうかを確認しよう! インスタンスから外部へアクセスできなくなるぞ。

  • パブリック IP の自動割り当て:起動時にパブリック IP を自動的に割り当てるかどうかを選択します。

DNS で登録するなど、固定されている必要があるかどうか確認しよう。負荷試験などで、帯域の小さい NAT ゲートウェイに引きずられたくないけど通信流量は必要、といったケースでは有効にすることもあるぞ。

  • Firewall (security groups):作成する場合は、入力した疎通許可設定のセキュリティグループを作成して紐づけます。選択する場合はどれを適用するか選択します。

あまりないけど、もしネットワークインターフェイスごと個別に設定するなら選択しなくていいぞ。 作成するとき、本番用途でなければ自分の利用するパブリック IP だけを許可しよう。特に22ポートや443ポートは公開しておくと普通に攻撃されるぞ。

  • 高度なネットワーク設定:ネットワークインターフェイスについての設定をします。
    • ネットワークインターフェイス:すでに作成してあるネットワークインターフェイスを選択する場合は、選択します。特になければ 「新しいインターフェイス」を選択します。
    • 説明:説明をメモできるので必要なら入力します。
    • セキュリティグループ:ネットワークインターフェイスに紐づけるセキュリティグループを個別に選択する場合は選択します。
    • プライマリ IP:プライマリのプライベート IP を指定する場合は入力します。
    • セカンダリ IP:セカンダリのプライベート IP を入力するかどうか、その方法を選択します。要件がなければ不要でしょう。
    • 終了時に削除:インスタンスを終了 (削除) したときにネットワークインターフェイスも削除するかどうかを選択します。

参考: https://dev.classmethod.jp/articles/consider-ec2-networkinterface/

ストレージを設定

  • GiB:容量を設定します。お金がかかるので必要な容量だけ設定しましょう。
  • 選択:ストレージの種類を設定します。特に要件がなければコストパフォーマンスの高い gp3 で大丈夫でしょう。ちなみにボリュームの容量はいつでも増やせます。
  • 新しいボリュームを追加:ストレージを追加します。他へ付け替える可能性があるなど、別で管理したいストレージがある場合は追加するといいでしょう。

高度な詳細

高度な詳細については、以下の記事が参考になるため一部のみ説明します。

参考: https://dev.classmethod.jp/articles/ec2-advanced-details/

  • スポットインスタンスをリクエスト:急に停止されてもいい代わりに安く利用できるスポットインスタンスを使うかどうかを選択します。開発などで安さを追求するなら選択してもよいかもしれません。詳細な設定方法の説明は割愛します。
  • IAM インスタンスプロフィール:インスタンスに AWS の操作権限を持たせたい場合、インスタンスプロフィールを紐づけます。作成方法の説明は割愛します。

S3 へのアクセスなどはインスタンスの中でアクセスキーを使うのではなく、インスタンスプロフィールで権限付与するといいぞ。

  • インスタンスの自動復旧:ステータスチェックに失敗した場合、自動的に再起動するかを選択します。AWS 基盤側の障害で終了された、メモリが枯渇したなどでステータスチェックが失敗したときに再起動してくれるので有効にしておくといいでしょう。

  • シャットダウン動作:OS からシャットダウン指示をしたときに、停止するのか終了 (削除) してしまうのかを選択します。特に要件がなければ停止でいいでしょう。

AWS SDK for Python (Boto3) コード例

上記で説明した、基本的な設定を仮置きした AWS SDK for Python (Boto3) コードを参考に記載します。

※生成 AI で出力したものを編集しています。

# boto3 ライブラリをインポート。
import boto3

# AWS の認証情報。この情報を使って AWS サービスにアクセスします。
aws_access_key_id = '****'
aws_secret_access_key = '****'

# AWS のリージョン情報。このリージョンで EC2 インスタンスが起動します。
region_name = 'ap-northeast-1'

# EC2 クライアントオブジェクトを作成。
# 認証情報とリージョン情報を引数として渡します。
ec2 = boto3.client(
    'ec2',
    aws_access_key_id=aws_access_key_id,
    aws_secret_access_key=aws_secret_access_key,
    region_name=region_name
)

# EC2 インスタンスを起動するための設定として run_instances メソッドを呼び出します。
response = ec2.run_instances(
    MaxCount=1,  # 起動するインスタンスの最大数。
    MinCount=1,  # 起動するインスタンスの最小数。
    ImageId='ami-0bcf3ca5a6483feba',  # 使用する AMI(Amazon Machine Image)の ID。今回は Amazon Linux 2023 です。
    InstanceType='t3.small',  # インスタンスのタイプ。
    KeyName='iteng-blog-test-key',  # SSH キーペアの名前。
    EbsOptimized=True,  # EBS 最適化オプション。
    # root ボリュームの設定(Amazon Linux 2023 では通常 /dev/xvda)。
    BlockDeviceMappings=[
        {
            'DeviceName': '/dev/xvda',
            'Ebs': {
                'VolumeSize': 30,  # 容量を 30GB に設定。
                'VolumeType': 'gp3'  # ボリュームタイプを gp3 に設定。
            }
        }
    ],
    # ネットワークインターフェースの設定。
    NetworkInterfaces=[
        {
            'SubnetId': 'subnet-****',  # サブネット ID。
            'AssociatePublicIpAddress': False,  # パブリック IP の自動割り当てを行わない。公開サブネットに置く場合は Elastic IP を別途割り当てましょう。
            'DeviceIndex': 0,  # デバイスインデックス(通常は 0)。
            'Groups': [  # セキュリティグループ。
                'sg-****'
            ]
        }
    ],
    # タグの設定。
    TagSpecifications=[
        {
            'ResourceType': 'instance',  # リソースの種類(この場合は「instance」)。

            'Tags': [  # タグのリスト。
                {
                    'Key': 'Name',  # タグのキー。
                    'Value': 'iteng-blog-test-instance'  # タグの値。
                }
            ]
        }
    ]
)

# run_instances メソッドのレスポンスを出力。
print(response)

まとめ

以上、ハマグリ式! EC2 の設定項目をわかりやすくざっくり解説する ~AWS SDK for Python (Boto3) コードもあるよ~ でした!

ぜひ下のボタンから、ハッシュタグ #ハマグリ式 で感想をツイートしてください!

今後ともハマグリ式をどうぞよろしくお願いいたします!

この記事を書いた人

記事一覧
SQUARE ENIXでは一緒に働く仲間を募集しています!
興味をお持ちいただけたら、ぜひ採用情報ページもご覧下さい!