2021年12月26日日曜日

aws cli を使ってEC2のインスタンスの起動や停止を行う

こんにちは

今日は、awsコマンドを使ってEC2のインスタンスを停止したり起動したりしてみようかと思います。

あれ?以前そんな記事あったよね?と思われる方もいらっしゃると思いますが、その通りです!以前同じようなことを書いていたと思います。前回の記事では、サーバのステータスを取得するあたりで終わっていましたので、その続きです。


ロールの作成と割り当て

こちらの項目の内容は、前回の内容のコピーです。

ロールの作成


1.接続用のIAM(Identity and Access Management)の設定をします。IAMダッシュボードを開いて、「ロール」をクリックします。



2.「ロール」をクリックしたら「ロール作成」ボタンをクリックします。


3.「ロールの作成」をクリックしたらロールを与えるサービスを選択します。今回はEC2を選択します。クリックしたら、「次のステップ:アクセス権限」をクリックします。






4.「次のステップ:アクセス権限」をクリックしたら、現在定義されているアクセス権限の一覧が表示されるので、今回は、「AdministratorAccess」を選択して、「次のステップ:タグ」をクリックします。



5.「次のステップ:タグ」をクリックするとタグ設定の画面表示されます。何かキーワードで検索したりしたい場合は設定しますが、今回は特に設定せずにそのまま「次のステップ:確認」をクリックします。


6.「次のステップ:確認」をクリックすると、設定の確認と、ロールの名を入力する画面が表示されますので、「ロール名」に任意の名称を入力して、「ロールの作成」ボタンをクリックします。今回はロール名を「EC2_AdministratorAccess」としました。





7.「ロールの作成」ボタンをクリックするとIAMコンソールに戻りますのでロールが作成されていることを確認します。


ロールの割り当て

1.作成したロールをEC2のインスタンスに割り当てます。EC2のダッシュボードを開き、割り当てを行うインスタンスチェックして、「アクション」→「セキュリティ」→「IAMロールを変更」を選択します。



2.「IAMロールを変更」を選択すると、IAMロールの選択が表示されますので、先ほど作成した「EC2_AdministratorAccess」を選択して、「保存」ボタンをクリックします。



IAMユーザの作成と、アクセスキーの取得

こちらの項目の内容は、前回の内容のコピーです。

1.IAMダッシュボードを開いて、「ユーザ」をクリックして、「ユーザの作成」ボタンをクリックします。




2.「ユーザの作成」をクリックすると、次のような画面が表示されますので、「ユーザ名」に任意のユーザ名を指定して、「アクセスの種類」を「AWS API ・・・」にして、「次のステップ:アクセス権限」ボタンをクリックします。


3.「次のステップ:アクセス権限」をクリックすると、次のような画面が表示されますので、今回は練習ですので、「既存ポリシーを直接アタッチ」として「AmazonEC2FullAccess」を選択して、「次のステップ:タグ」をクリックします。


4.「次のステップ:タグ」をクリックすると次のような画面が表示されますが、特に何も設定しないで、「次のステップ:確認」ボタンをクリックします。


5.「次のステップ:確認」ボタンをクリックすると、次のような画面が表示されますので、設定の内容を確認して「ユーザの作成」ボタンをクリックします。



6.「ユーザの作成」ボタンをクリックすると次のような画面が表示されますので、「.csvのダウンロード」ボタンをクリックしてキーの情報を保存します(画面上でも確認できます)。保存したら「閉じる」ボタンを押して画面を閉じてしまってください。アクセスキーは作成時に取得できますが、無くしてしまうと再度作成する必要がありますので注意してください。



AWS CLI のインストール


まず、以下のURLからコマンドのパッケージをインストールします。

ダウンロードしたパッケージをダブルクリックすると、次のような画面が表示されますので、「続ける」ボタンを押していきます。


途中でインストール先の浅学がありますが、特に選択する項目もありませんので、最後まで続けてください。

AWS CLI の設定

1.ターミナルを開きます。awsコマンドを実行して以下のようにコマンドラインの説明が表示されれば、インストールされていると思います。


2.aws configure コマンドを実行して設定します。「AWS Access Key ID」「AWS Secret Access Key」は、「IAMユーザの作成と、アクセスキーの取得」でダウンロードした内容を指定します。「Default region name」は、EC2インスタンスを起動しているregionを指定します。


AWSコマンドでインスタンスを操作する

ec2の操作は aws ec2 コマンドで実行するのですが、ものすごい数のコマンドがありますので、詳細はこちらの説明を参照してみてください。

インスタンスのステータスを取得する

aws ec2 describe-instance-status --instance-ids [instance id] [instance id] [instance id] ....

xxxxxxx@xxxxxxx ~ % aws ec2 describe-instance-status --instance-ids i-xxxxxxx

{

    "InstanceStatuses": [

        {

            "AvailabilityZone": "ap-northeast-1a",

            "InstanceId": "i-xxxxxxx",

            "InstanceState": {

                "Code": 16,

                "Name": "running"

            },

            "InstanceStatus": {

                "Details": [

                    {

                        "Name": "reachability",

                        "Status": "passed"

                    }

                ],

                "Status": "ok"

            },

            "SystemStatus": {

                "Details": [

                    {

                        "Name": "reachability",

                        "Status": "passed"

                    }

                ],

                "Status": "ok"

            }

        }

    ]

}


インスタンスが起動していないと、以下のように何も取得できませんでした。Stoppedとか出るわけではないのですね。

xxxxxxx@xxxxxxx ~ % aws ec2 describe-instance-status --instance-ids i-xxxxxxx
{
    "InstanceStatuses": []
}


インスタンスを起動する

aws ec2 start-instances --instance-ids [instance id] [instance id] [instance id] ....



xxxxxxx@xxxxxxx ~ % aws ec2 start-instances --instance-ids i-xxxxxxx
{
    "StartingInstances": [
        {
            "CurrentState": {
                "Code": 0,
                "Name": "pending"
            },
            "InstanceId": "i-xxxxxxx",
            "PreviousState": {
                "Code": 80,
                "Name": "stopped"
            }
        }
    ]
}


インスタンスを停止する

aws ec2 stop-instances --instance-ids [instance id] [instance id] [instance id] ....


xxxxxxx@xxxxxxx ~ % aws ec2 stop-instances --instance-ids i-xxxxxxx
{
    "StoppingInstances": [
        {
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "InstanceId": "i-xxxxxxx",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}
hsasaki@macmini ~ %

うまく動作しているようです。start-instances / stop-instances は --instance-ids の指定がないと実行できませんので、誤って実行してしまっても全部のインスタンスが停止するようなことはないようです。

0 件のコメント:

結局 Kindle にケースを買いました。

 こんばんわ 私、最近ほとんど外出しなくなったのですが、妻の買い物に一緒に行って、ぼけーっと待っていたり、病院に行ってぼけーっと待っていたりする機会が多くなり、なんなら家でもボケーっとしていることが非常に多くなったためか、Kindleの出番が結構ありそうです。 前回、タブレットで...