AWSにもAPIが用意されています。APIを使うことでAWSの運用や構築の自動化を目指しましょう。
Management Console上で行える操作を外部のプログラムからでも操作できるように、AWSにはAPIが提供されています。認証やリクエスト作成などで用いる複雑なAPIを操作するために、コマンドラインツールやSDKも提供されています。これらを用いることでも、AWSのAPIを操作することが可能です。
AWSコマンドラインインターフェース(AWS CLI)とは、AWSのAPIをコマンドラインから操作できるようにするツールです。AWSから無償で提供されており、Windows、Mac、Linux、Unixに対応しています。Windowsの場合はインストーラーが提供されており、Mac、Linux、Unixの場合は、pipやAWS CLI Bundled Installerを用いてインストール可能です。
コマンドラインからAWSを操作するメリットは、シェルスクリプトやバッチファイルにAWSの操作を組み込み、繰り返し作業の大半を自動化できることです。これによって、cronやタスクスケジューラーなどを利用して処理を定時実行し、特定の時間帯だけインスタンスの台数を増やすといったことが可能になります。
APIを活用することで、Zabbixなどの監視システムがインスタンスの異常を検知した際に、監視システムがAWSをAPIで操作してインスタンスを再起動し自動復旧する、といったことも可能です。
今回は、比較的簡単にAPIを操作できるAWS CLIを例にご説明いたします。
AWS CLIを使用してAPIを利用するためには、AWSから発行されたアクセスキー(Access Key ID、Secret Access Key)の設定が必要になります。初期設定は「aws configure」コマンドで行えます。下記は設定例です。
$ aws configure AWS Access Key ID [None]: AKIAxxxxx... AWS Secret Access Key [None]: xxxxxxxxx... Default region name [None]: ap-northeast-1 Default output format [None]:
アクセスキーは複数の方法で指定でき、環境変数、.aws/credentialsファイル、.aws/configファイル、IAM Roleで設定したアクセスキーを用いることができます。
AWS CLIの基本的な構文は下記の通りです。
$ aws [オプション] <サービス名> <アクション> [パラメーター]
オプションには「--region ap-northeast-1」などの各サービス共通のオプションを指定します。サービス名には「ec2」「rds」などを、アクションには「describe-instances run-instances」などを指定します。
例として、東京リージョン(ap-northeast-1)に存在するインスタンスの一覧を取得するコマンドを紹介します。
$ aws --region ap-northeast-1 ec2 describe-instances
各コマンドにはヘルプ(英語)が用意されており、末尾に「help」をつけることで実行可能なアクションや、アクションの詳細を確認することができます。
$ aws help $ aws ec2 help $ aws ec2 describe-instances help
.aws/credentialsファイルに複数のアクセスキーが記入されている場合は「--profile <プロファイル名>」オプションで利用するアクセスキーを選択できます。
$ aws ec2 describe-instances --profile yourprofile
EC2インスタンス上でAWS CLIを利用するために、アクセスキーをインスタンス上に平文テキストで格納するのは好ましくありません。
こういった状況では、IAM RoleでAPIの操作権限を渡すことをお勧めします。IAM Roleで権限を渡すとAWS CLIが一時的なアクセスキーを自動的に取得します。
なお、IAM Roleはインスタンス作成時にしか割り当てできません。割り当て直したい場合はインスタンスの再作成になりますのでご注意ください。
はじめに、インスタンスに割り当てるIAM Roleを作成します。IAMのメニューにあるRolesをクリックし、Create New Roleをクリックします。
次の画面でIAM Roleの名前を入力します。Role Nameに任意のロール名を入力してください。今回はAmazon S3というAWSが提供しているストレージサービスを例に説明します。
次にIAM Roleの種類を選択します。今回はEC2に割り当てるためのロールを作成するので、Amazon EC2を選択します。
ロールに適用するポリシーを選択します。今回は例としてS3への読み取りアクセスのみを許可するAmazon S3 Read Only Accessを選択します。
選択したポリシーの内容がプレビューされます。内容に誤りがないことを確認して次に進みます。
IAM Roleを作成する前に最後の確認を行います。内容に誤りがないことを確認したらページ下部のCreate Roleボタンをクリックします。
これでIAM Roleが作成されましたので、次に作成したロールをインスタンスに割り当てます。
IAM Roleは、Launch Instance画面の3ページ目、Configure Instance Detailsの下部にあるIAM Roleから指定することができます。先ほど作成したロールを指定してください。
IAM Roleを指定した状態でインスタンスを作成すると、IAM Roleに割り当てられたポリシーでAPIにアクセスできるようになります。
今回作成したインスタンスには「S3への読み取りアクセス」のみを許可してあります。試しにインスタンスへ接続し、aws s3 lsコマンドを実行すると、バケットの一覧が表示されます。
__| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2014.03-release-notes/ 9 package(s) needed for security, out of 19 available Run "sudo yum update" to apply all updates. $ aws s3 ls 2014-05-30 18:35:34 test-bucket-1 2014-07-10 04:49:56 test-bucket-2 2014-07-03 09:46:26 test-bucket-3 2014-05-20 10:48:58 test-bucket-4
読み取り専用アクセスですので、バケットの作成はアクセス拒否されます。
$ aws s3 mb s3://test-bucket-5 make_bucket failed: s3://test-bucket-5/ A client error (AccessDenied) occurred when calling the CreateBucket operation: Access Denied
また、インスタンス一覧を表示するコマンドも、S3以外のAPI操作のためアクセス拒否されます。
$ aws --region ap-northeast-1 ec2 describe-instances A client error (UnauthorizedOperation) occurred when calling the DescribeInstances operation: You are not authorized to perform this operation.
このように、インスタンスにアクセスキーを保存することなくAPIへのアクセスを許可することができます。
インスタンスに割り当てるIAM Roleは変更不可ですが、IAM Role自体は変更可能です。IAM Roleを変更すればインスタンスに割り当てられている権限を一度に変更することができます。
APIを利用してプログラムからAWSを操作できることで、運用や構築の自動化が容易になります。一部分だけでも自動化することで、作業の負担を軽減し本来やるべき作業に集中できるようになります。APIを活用した運用、構築の自動化を進めてはいかがでしょうか。
Copyright © ITmedia, Inc. All Rights Reserved.