連載
» 2013年08月06日 17時38分 公開

AWS OpsWorksアプリケーション運用の勘所(3):“ChefがキライでもOpsWorksはキライにならないでくださいっ!!” カスタムAMIとAWS OpsWorksの使い方 (2/3)

[あけり,@IT]

真骨頂! AWS CLIを使ったコマンドラインツールからのOpsWorks

 さて、このような環境が整った現在、AWSの真骨頂は、Management Consoleなんかではありません。SDKとコマンドラインツールです。この2つがあるから、プログラマブルなインフラになり得るんです。3回目にしてやっと、本編開始といったところです。

 AWS CLI(AWS Command Line Interface)は、AWSの各種サービスをコマンドラインから操作するためのCLI実装です。本稿執筆時点ではまだデベロッパプレビュー版と、若いツールですが、利用可能なサービスもどんどん増えて活発に進化しています。

AWS CLIが対応しているAWSサービス(本稿執筆時点)

 今回はこれを使ってOpsWorksを操作し、デプロイの自動化を試してみましょう。AWS CLIはPythonパッケージとして配布されています。動作環境としてはPython 2.6以上が推奨されています。

IAMの作成

 新しくスタックを作るために、Roleが1つ必要になってくるので、IAMで作ります。

 下記ではatmarkitという名前のRoleを用意しています。

$ aws iam create-role --role-name aws-opsworks-service-role --assume-role-policy-document '{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    }
  ]
}'

 RoleができたらOpsWorksの、より大きな論理単位であるStackを作っていきます。

$ aws opsworks create-stack --name created-by-cli --stack-region ap-northeast-1 --service-role-arn "arn:aws:iam::038072554641:role/aws-opsworks-service-role" --default-instance-profile-arn arn:aws:iam::038072554641:instance-profile/aws-opsworks-ec2-role --default-ssh-key-name id_rsa --default-os "Amazon Linux"
{
     "StackId":  "6c03c68c-46d7-4cb6-bc03-b1dc8b9e0010" 
}

 簡単ですね。

 ここで指定すべきパラメータはコマンドラインで-と打ってからタブを押せば出てきますが、AWS Documentation " OpsWorks " API Reference " Actions " CreateStackに載っています。CLIツールの使い方は大体APIに沿っているので、API Referenceを見ると、どんな値が入れるのかが分かります。

 筆者はManagement Consoleのレスポンスの遅さに「イラつく」くらいのせっかちなので、これくらいさくっと動いてくれる方が気持ちがよいです。

Layerの作成

 ではLayerを作って行きます。こちらも非常に簡単です。

 必要なパラメータなどはこちらを参照してください。セキュリティグループを作っておく必要があるので、すでにあるものか、新しく作りましょう。下の例では新しくセキュリティグループを作り、port 22と80を開放しています。

$ aws ec2 create-security-group  --region ap-northeast-1 --group-name opsworks-atmarkit --description "opsworks cli "
{
    "return": "true", 
    "GroupId": "sg-68318203"
}
$ aws ec2 authorize-security-group-ingress -region ap-northeast-1 --group-name opsworks-atmarkit --from-port 22 --ip-protocol tcp --to-port 22 --cidr-ip "0.0.0.0/32"
{
    "return": "true"
}
$ aws ec2 authorize-security-group-ingress -region ap-northeast-1 --group-name opsworks-atmarkit --from-port 80 --ip-protocol tcp --to-port 80 --cidr-ip "0.0.0.0/32"
{
    "return": "true"
}
$ aws opsworks create-layer --stack-id 6c03c68c-46d7-4cb6-bc03-b1dc8b9e0010 --name PHP --shortname php --type php-app    --custom-security-group-ids sg-68318203
{
    "LayerId": "65dcd8f3-f642-473b-bc4d-08449a7c32a9"
}

 作業の履歴が残せる(再現が簡単な)上に簡単なので、もうManagement Consoleはいらないかもしれませんね。

インスタンスの作成

 次にインスタンスを作りましょう。こちらも簡単です。必要なパラメータなどは同様にこちらを参照してください。

$ aws opsworks create-instance  --stack-id 6c03c68c-46d7-4cb6-bc03-b1dc8b9e0010 --layer-ids 65dcd8f3-f642-473b-bc4d-08449a7c32a9 --instance-type t1.micro --architecture x86_64 --root-device-type ebs 
{
    "InstanceId": "8e1340cc-f529-4c89-87c0-eeb24c33b605"
}

アプリケーションの作成

 次にアプリケーションも作ります。アプリケーションも同様に必要パラメータなどはこちらで確認できます。

$ aws opsworks create-app --stack-id 6c03c68c-46d7-4cb6-bc03-b1dc8b9e0010 --name testApplication --shortname test  --app-source type=git,url=http://github.com:tottokug/test.git --type php
{
    "AppId": "c5048f90-f0b5-4fbc-91b4-0afe773ec733"
}

 やっぱり簡単です。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。