LoginSignup
5
8

More than 5 years have passed since last update.

Arukasハンズオン資料 - サービス連携編

Last updated at Posted at 2016-07-16

はじめに

この記事は、

Arukasハンズオン受講希望者の方を対象とした、サービス連携方法についての説明です!

目標:Arukasで起動したアプリと各種サービスとの連携方法を把握すること!
難易度:中級、上級
所要時間:30~40分

どちらかと言えば上級者向けということで、細かい説明は色々と省いてます!

用語説明

  • APIApplication Program Interface。APIを利用すると、プログラムから各種機能を呼び出せる。
  • 環境変数: システム環境をカスタマイズするための変数。各種設定に利用できる。
  • 公開鍵: 公開鍵暗号方式で使用される一対の鍵のペアのうち、一般に公開されるほうの鍵。

ハンズオン概要

外部サービス連携が必要なアプリを Arukas にデプロイして、各種サービスとの連携方法を理解する!

構成概要図

このハンズオンでは、以下の構成を構築します。

Arukas_intro_and_infra_JTF_private.001.png

利用ユーザーは keychain.io に任意の公開鍵を登録、または取得する等の公開鍵の管理操作することができます。

各サービスの詳細

keychain.io には、下記の機能が実装されてます。

  • ssh公開鍵の登録
  • 登録済みssh公開鍵の照会

SendGrid は、以下の役割を担当します。

  • 公開鍵の登録確認メールを鍵管理者に送信。

Amazon S3 は、以下の役割を担当します。

  • 公開鍵をバケットに格納。

keychain.io 本体に必要とされる設定

AWS_ACCESS_KEY_ID=****      # AWS の API アクセスキー
AWS_SECRET_ACCESS_KEY=****  # AWS の API シークレットアクセスキー
SENDGRID_USERNAME=****      # SendGrid のユーザー名
SENDGRID_PASSWORD=****      # SendGrid のパスワード
KEYCHAIN_BUCKET_NAME=****   # Amazon S3 バケット名

注意事項

  • ハンズオン時間中、このハンズオンについては『任意課題』として非サポートです!エラーと遭遇しても自己解決を心がけましょう!

ハンズオン開始!

AWS 側での作業

keychain.io から Amazon S3 への接続には、API アクセスキーAPI シークレットアクセスキーバケット名 が必要です。

  1. AWS マネジメントコンソール にログインする。
  2. IAM(Identity & Access Management) を開く。
  3. AmazonS3FullAccess 権限を持つ専用グループを IAM で作成する。
  4. 専用グループ配下に専用ユーザーを作成して、API アクセスキーAPI シークレットアクセスキーを新規発行してどこかにメモしておく。
  5. Amazon S3 にバケットを新規作成する。作成した バケット名 をどこかにメモしておく。

ここまでで AWS 側での作業は完了です!

SendGrid 側での作業

keychain.io から SendGrid への接続には、SendGrid の ユーザー名パスワード が必要です。

  1. SendGrid のサインアップページ から Free Plan を選択してサインアップ。
  2. SendGrid の ユーザー名(USERNAME)パスワード(PASSWORD)をメモしておく。
  3. SendGridから確認メールが到着するのでメールを確認してサインアップを完了する。
  4. さらにSendGrid のログインページ にログインして、必要事項を入力してログインを完了する。

ここまでで SendGrid 側での作業は完了です!

Arukas 側での作業

keychain.io をアプリ作成しましょう!

arukas_keychain.png

次の項目を間違えずに入力してください!

APP Name(アプリの名前) keychain.io
Image(Dockerイメージ名) uzyexe/keychain:0.0.1
Endpoint(エンドポイント) お好みで名前を英数字で入力してください。
Port(アプリのポート番号) 5000 tcp
ENV #1(環境変数 #1) PORT = 5000
ENV #2(環境変数 #2) AWS_ACCESS_KEY_ID = AWS の API アクセスキー
ENV #3(環境変数 #3) AWS_SECRET_ACCESS_KEY = AWS の API シークレットアクセスキー
ENV #4(環境変数 #4) SENDGRID_USERNAME = SendGrid のユーザー名
ENV #5(環境変数 #5) SENDGRID_PASSWORD = SendGrid のパスワード
ENV #6(環境変数 #6) KEYCHAIN_BUCKET_NAME = Amazon S3 のバケット名

公開鍵の登録

下記のような curl コマンドを実行すると、keychain.io に公開鍵を渡します。

command
curl -s -X PUT -F key="@$HOME/.ssh/id_rsa.pub" "https://${ARUKAS_ENDPOINT_URL}/${EMAIL}/default

# コマンド例
curl -s -X PUT -F key="@$HOME/.ssh/id_rsa.pub" "https://endpoint.arukascloud.io/foo@example.com/default
  • key="" には、登録したい公開鍵の場所をパスをフルパスで記入。
  • $(ARUKAS_ENDPOINT_URL} には、Arukas で発行したエンドポイントURLを記入。
  • ${EMAIL} には、利用可能なメールアドレスを記入。

※ 公開鍵を作成されていない人は、ssh-keygen コマンドで鍵を作成ください。

上記コマンドの実行に成功すると、以下のメッセージが表示されます。

output
Key received, check email to confirm upload.

すぐに公開鍵を登録したメールアドレス宛に登録確認メールが到着するので、登録確認メール内にある登録確認用のURLをクリックして Action completed と表示されたら公開鍵の登録は完了です。

公開鍵登録時にエラーメッセージが表示された場合

SendGrid 側のSSL証明書の不具合が原因で、以下のような SSL Error が表示されることがあります。

output
SSLError: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:590)

この場合、curlコマンドの再試行を繰り返してください。

公開鍵の取得

下記のような curl コマンドを実行すると、keychain.io から公開鍵を取得できます。

command
curl https://${ARUKAS_ENDPOINT_URL}/${EMAIL}/all

# コマンド例
curl https://endpoint.arukascloud.io/foo@example.com/all
  • $(ARUKAS_ENDPOINT_URL} には、Arukas で発行したエンドポイントURLを記入。
  • ${EMAIL} には、利用可能なメールアドレスを記入。

上記コマンドの実行に成功すると、以下のような公開鍵が表示されます。

output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAB....

公開鍵取得時のエラー

下記のようなトレースバックが表示された場合には、ENV に設定した AWS 関連の設定に誤りがあります。

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/eventlet/wsgi.py", line 382, in handle_one_response
    result = self.application(self.environ, start_response)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1701, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1689, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1687, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1360, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1358, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python2.7/site-packages/flask/app.py", line 1344, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "keychain/app.py", line 153, in all_keys
    keys_ = lookup_keys(email)
  File "keychain/app.py", line 55, in lookup_keys
    keys = s3keys(email)
  File "keychain/app.py", line 41, in s3keys
    b = s3.get_bucket(bucket_name)
  File "/usr/lib/python2.7/site-packages/boto/s3/connection.py", line 389, in get_bucket
    bucket.get_all_keys(headers, maxkeys=0)
  File "/usr/lib/python2.7/site-packages/boto/s3/bucket.py", line 367, in get_all_keys
    '', headers, **params)
  File "/usr/lib/python2.7/site-packages/boto/s3/bucket.py", line 334, in _get_all
    response.status, response.reason, body)
S3ResponseError: S3ResponseError: 403 Forbidden

まとめ

  • Arukas に keychain.io をホストできた!
  • Dockerイメージ側で SendGrid や Amazon S3 に対応している場合は API キーを渡せば連携することができる。
  • API アクセスキーやユーザー名、パスワードは ENV に設定するとアプリの環境変数として渡すことができる。

サービス連携編 - 完

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8