麦星 - arcturus technologies- 

テクノロジー関連情報と日常的な何かを発信しています

DISCORD(ユーザー登録~招待URLでサーバーへ参加するまで)

ども、最近、何かとAlibabaCloudサポートとやり取りさせて頂いている、うし@tangniuwanです。
connpass などオンラインの勉強会などで「DISCORD」を使用しているのですが、
イマイチ、使い方が分かりづらい。。との声があり、ユーザー登録~招待URLでサーバーへ参加するまでを記事にしてみました。

事前に準備するもの

  • PC
  • メールアドレス(若しくはSMS受信可能なスマホ
  • ブラウザ
     

※ちなみに私の環境は、Windows10Pro(64bit)/ Chrome 最新です。

 

この記事でやってること

  1. DISCORDでユーザー登録(アカウント登録)
  2. DISCORDの(招待)URLでサーバーへ参加

 

誰に向けてこの記事を書いたか?

  1. DISCORDをはじめて使用される方
  2. アカウント登録したけど、なんか良く分からない方

 

よく聞く躓き箇所

  • DISCORDで、アカウント登録したけど、これ以上、どう進めばよいか分からない…
  • そもそもサーバーに参加って何? ​
  • アカウントは作成したつもりだけど、ちゃんと出来てるのかな?など

※上の辺りを図解したいと思います。

 

DISCORDでユーザー登録(アカウント登録)

まず、DISCORDでユーザー登録します。
手順は、以下の様な感じです。
 

1. (招待)URLにアクセスする

まず、ここに入ってね。というURLがあると思いますので、そのURLにアクセスして下さい。
(このURLのことを招待URLと言います。)
以下は、Alibaba Cloud のもくもく会(札幌)で使用している(招待)URLです。
以降はこのURLを例に説明していきます。

discord.gg

招待URL: https://discord.gg/33wekrvUdP

 

ブラウザでURLにアクセスすると以下の画面が表示されるので「Discordで開く」ボタンを押下します。

f:id:tangniu:20210307124716p:plain

2. アカウント登録リンク

画面が切り替わって以下のログイン画面が表示されますが、
今回はユーザー登録なので「登録」リンクを押下します。

f:id:tangniu:20210307124812p:plain

3. アカウント登録

アカウント作成画面に切り替わったら必要な情報を入力し「はい」ボタンを押下します。
f:id:tangniu:20210307124815p:plain

正常に処理されると、reCAPTCHAが表示されるので「私は人間です」にチェックします。

f:id:tangniu:20210307124818p:plain

 

4. メールアドレス認証

以下の画面に切り替わったら、「メールで認証」ボタンを押下します。
「メールで認証」ボタン押下で前の画面で入力頂いたメールアドレスにメールが送付されます。
f:id:tangniu:20210307124821p:plain

 

受信メールを確認します。以下の様なメールが送付されるので、
「メールアドレスを認証する」ボタンを押下します。

f:id:tangniu:20210307132036p:plain

 

すると、再度、reCAPTCHAが表示されるので「私は人間です」にチェックします。 f:id:tangniu:20210307124826p:plain

 

画面が切り替わって、メール認証がされました。と表示されます。 これでアカウント登録は終了になるのですが、続けてサーバーへ入ります。 f:id:tangniu:20210307124830p:plain

 

※よくあるパターン

続けて「Discordで開く」ボタンを押下すると以下のアラートが表示されるので「Discordを開く」ボタンを押下します。

f:id:tangniu:20210307124834p:plain

 
すると以下の様な画面に切り替わるのですが、
ここから先がどう進めばよいのか良く分からない。と言う声が多いです。
f:id:tangniu:20210307133616p:plain

 
でわ、ここから先の「DISCORDの(招待)URLでサーバーへ参加」でサーバーへ参加する手順を説明します。

 

DISCORDの(招待)URLでサーバーへ参加

「DISCORDのURLを入力して「サーバーへ参加」する手順を説明します。  

1. サーバーを追加

以下画面の「+」ボタンを押下します。 f:id:tangniu:20210307135932p:plain

 

すると、以下の画面が表示されるので、画面下部の「もう招待されていますか?サーバーに参加」リンクを押下します。 f:id:tangniu:20210307140144p:plain

2. サーバーに参加(招待URLを入力)

以下の画面が表示されたら招待リンクの箇所へ、
招待URL: https://discord.gg/33wekrvUdPを入力し「参加」ボタンを押下します。 f:id:tangniu:20210307140556p:plain

3. サーバーへ参加後

無事に参加できると、以下の様な画面が表示されます。
初めて入った場合は、ボイスチャンネルか、テキストチャンネルに入り話しかけてみてください。

ボイスチャンネルに入るには、以下の画面の場合「ラウンジ」(画面左側のチャンネル文字列)をダブルクリックします。 また、通話の際は、マイクをONにして話掛けて下さい。

f:id:tangniu:20210307142456p:plain

 

最後に

・分かりづらい部分がありますが、ルームの移動などが楽な部分があります。
・また、テキスト、音声、ビデオでのコミュニケーションが可能というメリットがあり
 シーンによって使い分けが出来るのが良いと思います。

  最後まで読んで頂きありがとうございました。

でわ

Function Compute でOSSのバケットサイズを計測

ども、最近、OSSと戯れる機会が多い、うし@tangniuwanです。

定期的にOSSバケットサイズ(ストレージの容量)が知りたいケースがあったのですが、 サンプルやら、ネットの海やらを探しても、これといった情報が見つからず…

しゃーないので、GitHubSDK(aliyun-oss-php-sdk)を漁り、
サイズ取得メソッドが実装されていたのを発見し、あれやこれやで無事、バケットサイズが計測できましたので
発見までの経緯と、そのソースコードを共有させて頂きます。

経緯

通知の方法として、
「Email + DingTalk (Info)」が使用できるため
当初は、Cloud Monitorのアラームサービスのルール作成から設定できないかな?と思いましが、
Cloud Monitorで設定できる項目をよくよく確認すると、バケットサイズに関連するものが無く、
ファイル数やレイテンシーなどに関するものが多数ありました。

という事で、Cloud Monitorを諦め、自前で作ることにしました。 ちなみに、会社の昼休みと退勤後のオンライン飲み会の時間を使って、以下のコードを書き上げました。

やったこと

最初にやったこと

以下、 URLのドキュメントセンターで、オブジェクト(ファイル)一覧を取得する方法を確認しました。

jp.alibabacloud.com

以下は、オブジェクト(ファイル)一覧を取得するサンプルコードの引用です。
諸々設定して素直に実行すると、指定したバケット内のファイル一覧が表示できます。

<? php
if (is_file( _DIR . '/../ autoload.php')) {
require_once _DIR . '/../ autoload.php';
}
if (is_file( _
DIR__ . '/../ vendor/autoload.php')) {
require_once _
DIR__ . '/../ vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// It is highly risky to log on with AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM account, log on to https://ram.console.aliyun.com.
$accessKeyId = "";
$accessKeySecret = "";
// This example uses endpoint China East 1 (Hangzhou). Specify the actual endpoint based on your requirements.
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
$bucket= "";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

while (true) {
 try {
  $listObjectInfo = $ossClient->listObjects($bucket, $options);
 } catch (OssException $e) {
  printf( __FUNCTION__ . ": FAILED\n");
  printf($e->getMessage() . "\n");
  return;
 }
// Obtain the nextMarker. Obtain the object list from the object next to the last object read by listObjects.
 $nextMarker = $listObjectInfo->getNextMarker();
 $listObject = $listObjectInfo->getObjectList();
 $listPrefix = $listObjectInfo->getPrefixList();
 if (! empty($listObject)) {
  print("objectList:\n");
  foreach ($listObject as $objectInfo) {
   print($objectInfo->getKey() . "\n");   }
 }
 if (! empty($listPrefix)) {
  print("prefixList: \n");
  foreach ($listPrefix as $prefixInfo) {
  print($prefixInfo->getPrefix() . "\n");
  }
 }
 if ($nextMarker === '') {
  break;
 }
}

次にやったこと

上のソースコード上で、

    $listObject = $listObjectInfo->getObjectList();    

という構文があり、ファイルリストを取得し、変数「 $listObject」へ格納しています。
その後、「$listObject 」をforeach でぐるぐるループしているのが分かります。

    foreach ($listObject as $objectInfo) {  
        print($objectInfo->getKey() . "\n");  
    }  

ここで、変数「$objectInfo」は、ファイルを扱っているモジュールなので、
実はファイルのサイズ情報とか持ってるんじゃね?という疑惑がありSDKを調べるに至りました。

結果、案の定、GitHub上の「objectInfo」モデルのソースコードがあり、確認するとサイズ情報を保持していました。  

※確認すると「getSize()」なるメソッドを保持しています。
f:id:tangniu:20210130022551p:plain

以下は、該当クラスのページURL
github.com

という事で、サンプルソースを以下の様に書き換えます。 (太字の部分が上部のソースからの変更点。あとは、不要なコードを削除しています。)

<? php

use OSS\OssClient;
use OSS\Core\OssException;

$accessKeyId = "";
$accessKeySecret = "";
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
$bucket= "";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

$buketSize =0;
while (true) {
 try {
  $listObjectInfo = $ossClient->listObjects($bucket, $options);
 } catch (OssException $e) {
  printf( __FUNCTION__ . ": FAILED\n");
  printf($e->getMessage() . "\n");
  return;
 }
 $nextMarker = $listObjectInfo->getNextMarker();
 $listObject = $listObjectInfo->getObjectList();
 if (! empty($listObject)) {
  print("objectList:\n");
  foreach ($listObject as $objectInfo) {
   print($objectInfo->getSize() . "\n");
   $buketSize += (float)$objectInfo->getSize() / 1024 / 1024;
  }
 }
 if ($nextMarker === '') {
  break;
 }
}

あとは、変数「$buketSize」にファイルサイズを加算すると、バケットのトータルのサイズが取得できます。
という事で、ファイルサイズが取得出来たら、あとは、メールで送付するなり、Slackに通知するなりして、 CRONや、Function Compute のタイマートリガーを設定すれば、定期的にバケットサイズ情報が通知されます。

最後まで見て頂いてありがとうございます。

でわ

サーバーレスなWEBアプリケーション

ども、うし@tangniuwanです。

先日、サーバーレス(Function Compute)でフレームワークを使用したWEBアプリケーションを試しに構築してみたもの
若干、削除に手間取ったので、情報共有がてら削除の手順について記事にしました。

色んな言語とフレームワークが使えるので、調子こいて結構な数のWEBアプリケーションを作ってしまいました。。 (かなり便利なので、使わない手はないです。)ただ、消すのは面倒。。

ちなみに、使用可能な言語と、フレームワークは以下になります。
基本、ボタン1つ2つクリックするとデプロイまで出来ます。

言語 ランタイム フレームワーク 関連URL 備考
Node.JS 6.10 / 8.9.0 / 10.15.3 Express https://expressjs.com/ja/
Nuxt.js https://nextjs.org/
Nuxt.js https://ja.nuxtjs.org/
Egg.js https://eggjs.org/ 中国産
Java Java8 Spring Boot(jar) https://spring.pleiades.io/
Tomcat/Jetty(war) https://github.com/eclipse/jetty.project
Go 不明 Gin https://gin-gonic.com/
Beego https://beego.me/
PHP 7.2.7 Laravel http://laravel.jp/
ThinkPHP https://github.com/top-think 中国産
Python 2.7/3.6 n/a コード(ZIP )をアップロードして起動コマンドとリスナーポートを指定すれば利用可能になります。
.NET Core .NET Core 2.1 n/a コード(ZIP )をアップロードして起動コマンドとリスナーポートを指定すれば利用可能になります。
Container n/a n/a ACR(Alibaba Cloud Container Registry)からコンテナイメージを指定してデプロイするだけで利用可能です。

※参考:https://www.alibabacloud.com/help/doc-detail/74712.htm

こう見ると、今までは、アジア圏以外のフレームワークが主流だったのが、中国産のフレームワークが増えてきたなーという印象です。

フレームワークを使用したWEBアプリケーションの削除

さて、本題の削除方法についてです。

個人的には、
Function Compute に限らず、一つ一つのプロダクトや、コマンドなどを理解するより構成を理解する方が重要だと認識しています。
そして、この「Function Compute」 を利用した「フレームワークを使用したWEBアプリケーション」の構成は以下の様な構成になっています。

構成を理解する

構成は以下のような感じです。(間違ってたらご容赦ください。)

フレームワークを使用したWEBアプリケーション」は、ボタン1つ2つで作成できるのですが
削除は以下の構成図の小さい単位(コード・トリガー||バージョン・エイリアス<関数<サービス||カスタムドメイン)から削除し、
最終的にアプリケーションを削除します。

f:id:tangniu:20210130001147p:plain

削除手順

  1. 前述の通り、まず、トリガーを削除します。
    f:id:tangniu:20210130002719p:plain

  2. バージョンを削除します。
    f:id:tangniu:20210130002722p:plain
    f:id:tangniu:20210130002725p:plain

  3. エイリアスを削除します。
    f:id:tangniu:20210130002728p:plain
    f:id:tangniu:20210130002731p:plain

  4. 関数を削除します。
    f:id:tangniu:20210130002734p:plain
    f:id:tangniu:20210130002737p:plain

  5. サービスを削除します。
    複数のサービスがある場合、上記1~5の手順を繰り返します。
    f:id:tangniu:20210130002739p:plain
    f:id:tangniu:20210130002743p:plain

  6. カスタムドメインを削除します。
    f:id:tangniu:20210130003941p:plain

  7. プロダクトが異なるのですが、Resource Orchestration Service (ROS)に
    スタックが生成されているので削除(リリース)します。
    f:id:tangniu:20210130004416p:plain

以上で綺麗に削除ができました。

作るのは簡単でも削除はなかなか面倒いですね。。

でわ