Amazon Chime のミーティングと参加者をJavaで作成する

AWS SDK for Java(以下SDK)を用いて、Amazon Chime(以下Chime)のミーティングと参加者を作成してみたいと思います。

事前準備

credentialsの設定

まず、IAMユーザを作成して「AmazonChimeFullAccess」、「 AmazonChimeSDK」の権限を付与したcredentialsを作成してください。 credentialsをサーバに設定する方法は以下をご参照ください。

https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html

AWS SDK for Javaダウンロード

以下を参照し、SDKをダウンロードして展開してください。

https://docs.aws.amazon.com/ja_jp/sdk-for-java/v1/developer-guide/setup-install.html

実装内容

ディレクトリ構成例

{project}
│  .classpath
│  .project
│
├─.settings
│      org.eclipse.jdt.core.prefs
│
├─bin
│  └─chime
│          createMeeting.class
│
├─lib
│      aws-java-sdk-1.11.884.jar
│
├─src
│  └─chime
│          createMeeting.java
│
└─third-party
    └─lib
          aspectjrt-1.8.2.jar
          aspectjweaver.jar
          aws-swf-build-tools-1.1.jar
          commons-codec-1.11.jar
          commons-logging-1.1.3.jar
          freemarker-2.3.9.jar
          httpclient-4.5.9.jar
          httpcore-4.4.11.jar
          ion-java-1.0.2.jar
          jackson-annotations-2.6.0.jar
          jackson-core-2.6.7.jar
          jackson-databind-2.6.7.3.jar
          jackson-dataformat-cbor-2.6.7.jar
          javax.mail-api-1.4.6.jar
          jmespath-java-1.11.884.jar
          joda-time-2.8.1.jar
          netty-buffer-4.1.48.Final.jar
          netty-codec-4.1.48.Final.jar
          netty-codec-http-4.1.48.Final.jar
          netty-common-4.1.48.Final.jar
          netty-handler-4.1.48.Final.jar
          netty-resolver-4.1.48.Final.jar
          netty-transport-4.1.48.Final.jar
          spring-beans-3.0.7.RELEASE.jar
          spring-context-3.0.7.RELEASE.jar
          spring-core-3.0.7.RELEASE.jar
          spring-test-3.0.7.RELEASE.jar

ダウンロードした「AWS SDK for Java」から持ってきた「{project}/lib」配下と「{project}/third-party/lib」配下のライブラリにはビルド・パスを通してください。

ソース(createMeeting.java)

package chime;

import com.amazonaws.AmazonClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.chime.AmazonChime;
import com.amazonaws.services.chime.AmazonChimeClientBuilder;
import com.amazonaws.services.chime.model.Attendee;
import com.amazonaws.services.chime.model.CreateAttendeeRequest;
import com.amazonaws.services.chime.model.CreateAttendeeResult;
import com.amazonaws.services.chime.model.Meeting;
import com.amazonaws.services.chime.model.CreateMeetingRequest;
import com.amazonaws.services.chime.model.CreateMeetingResult;

public class createMeeting {

    public static void main(String[] args) {
    
        // credentials確認
        ProfileCredentialsProvider credentialsProvider = new ProfileCredentialsProvider();
        try {
            credentialsProvider.getCredentials();
        } catch (Exception e) {
            throw new AmazonClientException(
                    "Cannot load the credentials from the credential profiles file. " +
                    "Please make sure that your credentials file is at the correct " +
                    "location (~/.aws/credentials), and is in valid format.",
                    e
            );
        }
        
        // Chime リージョン設定
        AmazonChime chime = AmazonChimeClientBuilder.standard().withRegion("us-east-1").build();
        
        // Meetingリクエスト作成
        CreateMeetingRequest meetingReq = new CreateMeetingRequest();
        meetingReq.setClientRequestToken("test");
        meetingReq.setMediaRegion("ap-northeast-1");
        // Meeting作成
        CreateMeetingResult meetingRes = chime.createMeeting(meetingReq);
        Meeting meeting = meetingRes.getMeeting();
        // MeetingId取得
        String meetingId = meeting.getMeetingId();
        
        // Attendeeリクエスト作成
        CreateAttendeeRequest attendeeReq = new CreateAttendeeRequest();
        attendeeReq.setExternalUserId("test_user");
        attendeeReq.setMeetingId(meetingId);
        // Attendee作成
        CreateAttendeeResult attendeeRes = chime.createAttendee(attendeeReq);
        Attendee attendee = attendeeRes.getAttendee();
        
        System.out.println(meeting);
        System.out.println(attendee);
    }
}

各クラスやメソッドなどは以下を参照してください。

https://sdk.amazonaws.com/java/api/latest/

動作確認

以下の通り、meeting情報とattendee情報が生成されていることが確認できます。 ※一部マスクしてます

・meeting

{
  MediaPlacement:{
    AudioFallbackUrl: "wss://haxrp.m3.an1.app.chime.aws:443/calls/f02353d3-122c-4c21-9cbb-076e56e2XXXX",
    AudioHostUrl: "XXXXc6f84f16ea0ec5ddbd5bbab101a5.k.m3.an1.app.chime.aws:3478",
    ScreenDataUrl: "wss://bitpw.m3.an1.app.chime.aws:443/v2/screen/f02353d3-122c-4c21-9cbb-076e56e2XXXX",
    ScreenSharingUrl: "wss://bitpw.m3.an1.app.chime.aws:443/v2/screen/f02353d3-122c-4c21-9cbb-076e56e2XXXX",
    ScreenViewingUrl: "wss://bitpw.m3.an1.app.chime.aws:443/ws/connect?passcode=null&viewer_uuid=null&X-BitHub-Call-Id=f02353d3-122c-4c21-9cbb-076e56e2XXXX",
    SignalingUrl: "wss://signal.m3.an1.app.chime.aws/control/f02353d3-122c-4c21-9cbb-076e56e2XXXX",
    TurnControlUrl: "https://ccp.cp.ue1.app.chime.aws/v2/turn_sessions"
  },
  MediaRegion: "ap-northeast-1",
  MeetingId: "f02353d3-122c-4c21-9cbb-076e56e2XXXX"
}

・attendee

{
  Attendee:{
    AttendeeId: "efca3edd-1973-3801-517f-69cc2df3XXXX",
    ExternalUserId: "test_user",
    JoinToken: "ZWZjYTNlZGQtMTk3My0zODAxLTUxN2YtNjljYzJkZjM1YTAyOjA0ODBiN2VmLTcwNTctNGJiNS05NmM0LWI2NmMwOWQ5NDXXXX"
  }
}

サーバサイドの処理については以上となります。ここで生成した情報を利用することで、ミーティングに参加してビデオチャットを行えるようになります。画面の実装については、続きの記事に記載していますので、そちらもご参考ください。

gsol.hatenablog.com