JAWS-UG CLI専門支部に参加しています #jawsug

2014.08.31

こんにちは。遅れてきたAWS新人、@yokatsukiです。 今回は、私が参加しているAWS CLIのコミュニティ、JAWS-UG CLIに参加しているレポートと、そこで私がハマった事象についてお伝えします。

JAWS-UG CLI専門支部 概要

JAWS-UG CLI専門支部とは、波田野 裕一(@tcsh)さんが主催されているAWS CLIのコミュニティです。

AWS CLIを使いこなしたいユーザの集まりです。

Unified AWS CLIの他、AWS API、CloudFormationについても対象とします。 (SDKやIDEは対象外とします。) 「運用エンジニアのためのAWS」知識や経験の交換をしていきましょう!

JAWS-UG CLI Facebookページより

会場
コワーキングスペース茅場町 Co-Edo
(東京メトロ東西線、日比谷線茅場町駅から徒歩5分)地図
開催日時
隔週月曜の19:00-21:00
関連ページ
コミュニティページ(Facebookグループ)
募集ページ(DoorKeeper)

私がこのコミュニティに参加するのにはけっかけがありました。私はクラスメソッドに入社して3ヶ月になるのですが、初めてのMacBookで膨大な量のManagement Console操作をしていたところ、慣れないタッチパッド操作で右手の人差指中指から肘にかけての筋を痛めてしまったんです…(「タップでクリック」の設定をもっと早く知っていればと悔やまれます)。 生産性を上げるためにも、ターミナルからAWSの各設定ができるようになれれば嬉しいなと思い、参加しています。

今までのあらすじ

各回いずれのスケジュールも、波田野さんによるAWS CLIの紹介~参加者自己紹介~ハンズオン~質疑応答、意見交換など、という形式でした。実質初回の#0を含め、現在実施の#2までのハンズオンで、以下の構成ができています。

  • AWS CLIコマンドの基本理解
  • 独自ドメインの取得
  • S3上に静的ウェブホスティングを構成
  • 静的ウェブホスティングにアクセスログ設定
  • 別のS3バケットにアクセスログ出力、確認

完成イメージ jaws-ug-cli-1-01

ハンズオンは、前回の結果を引き継いで連続で行う形式になっていますが、手順はQuiitaにまとめられているので、途中参加でも問題ありません。ここまで作りこまれた波田野さんを尊敬します。(ハンズオン詳細は、下記各回のリンクを辿ってください)

第0回:AWS CLIをはじめよう ハイレベルS3コマンドで静的Webホスティング

JAWS-UG CLI専門支部 #0 - AWS CLIをはじめよう ハイレベルS3コマンドで静的Webホスティング

スケジュール
19:00-19:15 勉強会準備
19:15-19:30 AWS CLIの基礎 (AWS CLIが動くまで + 最初のコマンド)
19:30-20:15 ハンズオン (S3にバケット作成、ファイルアップロードなど)
20:15-20:45 AWS CLIに関する雑談 (次回以降やりたいこと、など)
20:45-21:00 撤収
ハンズオン
OSX Mavericks上でAWS CLI環境を整備する
Amazon Linux上でAWS CLI環境を整備する
S3:#1 ハイレベルS3コマンドを使ってみる (バケットの作成から静的Webホスティング、削除まで)

第1回:Route53でドメインホスティング

JAWS-UG CLI専門支部 #1 - Route53でドメインホスティング

スケジュール
19:00-19:15 ハンズオンのための基礎知識
19:15-20:15 ハンズオン
20:15-20:45 AWS CLIに関する雑談 (次回以降やりたいこと、など)
20:45-21:00 撤収
ハンズオン
Route53:#1 独自ドメインをRoute53に委任する
Route53:#2 独自ドメインを取得する (route53domains)
S3:#2 ハイレベルS3コマンドで静的Webホスティング (独自ドメイン)
Route53:#3 静的Webホスティングに独自ドメインを割り当てる
Route53:#4 hosted zoneの削除

第2回:Webサイトホスティングに関連したs3apiコマンド + awsコマンドいろいろ

JAWS-UG CLI専門支部 #2 - Webサイトホスティングに関連したs3apiコマンド + awsコマンドいろいろ

スケジュール
19:00-19:15 ハンズオンのための基礎知識
19:15-20:15 ハンズオン
20:15-20:45 AWS CLIに関する雑談 (次回以降やりたいこと、など)
20:45-21:00 撤収
ハンズオン
S3:#3 静的Webホスティングのアクセスログ設定 (バケットのライフサイクル設定 & バケットのACL設定)
S3:#4 静的Webホスティングのバケットポリシー設定

遭遇したトラブル転じてTips

ハンズオンを実施している際に、いくつか引っ掛かった箇所があったので、備忘録を兼ねて小ネタとして紹介します。

設定したクレデンシャル情報がawsコマンドで参照されない件

AWS CLIでサポートされているサービスのいずれかに接続するには、ユーザが管理するAWSの資格情報(アクセスキーIDとシークレットアクセスキー)を準備しておく必要があります。この情報は環境変数に格納したり、aws configコマンドであらかじめ~/.aws/configに格納して使用するのが一般的だそうで、それに倣って、自前のクレデンシャル情報を~/.aws/configに格納しました。しかしawsコマンドを実行しても下記のエラーが発生してしまいます。

A client error (InvalidAccessKeyId) occurred when calling the ListBuckets operation:
The AWS Access Key Id you provided does not exist in our records.

おかしいなぁ…確かにクレデンシャル情報は~/.aws/configに保存されているのに、と思い、AWSのドキュメントを確認すると、以下の記述がありました。

The CLI will store credentials that are specified with aws configure in a local file, typically ~/.aws/config on Linux, OS X, or Unix and C:\Users\USERNAME\.aws\config on Windows. If a profile is configured in both this file and the AWS credentials file, the profile in the AWS credentials file will take precedence.

Configuring Credentials - AWS Command Line Interface User Guide

要約するとこういうことです。

クレデンシャル情報はローカル以下のconfigcredentialsに保存されるが、両方ある場合はcredentialsが優先される

なるほど…。 実はこのトラブルに遭遇する前日、CloudFormationを楽に記述するためにと、EclipseのAWS Toolkit for Eclipseをとりあえず導入している途中でした。このツールキットのPrefrernceには、クレデンシャル情報を設定する画面があり、その情報は~/.aws/credentialsに保存されていたのでした。(下図)

jaws-ug-cli-1-03

AWS Toolkit for Eclipseは未だ使わないだろうから、と思って適当にクレデンシャル情報を設定してたのが仇になりました。反省。 他にもAWS Elastic Beanstalkのコマンドebでも~/.aws/credentialsへの書き込みが発生するそうなので、該当する方お気をつけ下さい。

【関連】AWSのクレデンシャルを記載するファイルの種類 - Developers.IO

S3操作でIllegalLocationConstraintExceptionが発生する件

ハンズオン中、以下のコマンドでS3バケットの作成を試みます。

$ aws s3api create-bucket --bucket <バケット名>

しかし、ある人は成功するのに対し、別の人は以下のエラーが発生する、という現象が起きました。

A client error (IllegalLocationConstraintException) occurred when calling the CreateBucket operation:
The unspecified location constraint is incompatible for the region specific endpoint this request was sent to.

調べた結果、どうやらus-east-1以外のリージョンにS3バケットを作成する場合、オプションが必要になるということです。

[1.2.10][s3api] IllegalLocationConstraintException when using dots in bucket name - GitHub

確かに、以下のオプション付きのコマンドでバケットを作成することができました。

$ aws s3api create-bucket --create-bucket-configuration LocationConstraint=ap-northeast-1 --bucket <バケット名>

まとめ

JAWS-UG CLIの活動内容についてまとめてご紹介しました。まだ立ち上がったばかりで、これから皆で育つ!育てる!という雰囲気の強いコミュニティです。初心者の方も多く、私のようにAWS不慣れな方も置いてけぼり感なく、楽しく参加することができました。 波田野さんはこれから徐々に別の肩に発表する機会を設けたいというか是非発表してくださいとのことでしたので、我こそは!と思う方も参加してみてはいかがでしょうか?

次回から新シリーズになります。IAMについての基礎的な内容として、IAMグループやIAMユーザの作成、変更、削除を行う予定、とのことです。これもまた楽しみです。2014年9月8日(月) 19:00開始なので、Co-Edoでお会いしましょう!