AWSにUdonarium v1.17.3を公開して新SkyWay対応したメモ

# 概要
2026年4月30日をもって旧SkyWayがサービス終了する[*][*1]。
今後も惨劇RoopeRのユドナリウムで遊べるように、Udonarium v1.17に更新し、新skyway対応を行う。

[ココフォリア版](https://bakafire.main.jp/rooper/sr_news_250219.htm)の発売おめでとうございます。

[惨劇RoopeR用Udonarium v1.17.3](
https://d3snr6xc5uvnuy.cloudfront.net/rooper-udonarium/udonarium/)

[この時点のソース:バックエンド](https://github.com/hibohiboo/udonarium-backend/blob/6b1aadc6e01559937db6cb668d9115caf855d19a/cdk/lib/lambda-stack.ts)
[この時点のソース:フロントエンド](https://github.com/hibohiboo/udonarium/blob/ed53c3f918f4fddf40e1f82405392b2822c3278d/src/assets/config.yaml)

# SkyWayのアプリケーションキーとシークレットキーの取得
[前回の記事][*4]の手順の通り取得する。

# バックエンドの設定
[readme](https://github.com/TK11235/udonarium-backend/tree/main/packages/backend/aws-lambda)にCDKはHonoを参考にとあったのでやってみる。

cdkフォルダを作り、[cdk init](https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/hello-world.html)で準備する。


```ts:cdk/lib/lambda-stack
import * as core from 'aws-cdk-lib';
import * as iam from 'aws-cdk-lib/aws-iam';
import { NodejsFunction, NodejsFunctionProps } from 'aws-cdk-lib/aws-lambda-nodejs';
import { Construct } from 'constructs';
import { RUNTIME_VERSION } from '../constants/lambda';
import { FunctionUrlAuthType } from 'aws-cdk-lib/aws-lambda';

interface Props extends core.StackProps {
  projectId: string;
  environment: Record<string, string>;
}
const HANDLER_DIR = '../dist/aws-lambda';

export class UdonariumBackendStack extends core.Stack {

  constructor(scope: Construct, id: string, props: Props) {
    super(scope, id, props);

    const defaultLambdaProps = this.createLambdaProps({
      environment: props.environment
    });

    const fn = this.createLambda(
      {
        ...defaultLambdaProps,
        description: 'udonarium key',
        entry: `${HANDLER_DIR}/index.js`,
      },
      'udonarium-backend'
    );
    const fnUrl = fn.addFunctionUrl({
      authType: FunctionUrlAuthType.NONE,
    })
    new core.CfnOutput(this, 'lambdaUrl', {
      value: fnUrl.url!
    })
  }


  private createLambdaProps(props: {
    environment?: Record<string, string>;
    initialPolicy?: iam.PolicyStatement[];
    timeoutSec?: number;
  }) {
    return {
      runtime: RUNTIME_VERSION,
      environment: props.environment,
      initialPolicy: props.initialPolicy,
      timeout: props.timeoutSec ? core.Duration.seconds(props.timeoutSec) : undefined,
    };
  }

  private createLambda(props: NodejsFunctionProps, key: string) {
    const func = new NodejsFunction(this, key, props);
    return func;
  }
}

```

```ts:cdk/bin/lambda.ts
#!/usr/bin/env node

import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import * as dotenv from 'dotenv';
import { UdonariumBackendStack } from '../lib/lambda-stack';

dotenv.config({ path: './.env' });

const envList = [
  'PROJECT_ID',
  'SKYWAY_APP_ID',
  'SKYWAY_SECRET',
  'SKYWAY_UDONARIUM_LOBBY_SIZE',
  'ACCESS_CONTROL_ALLOW_ORIGIN',
] as const;
for (const key of envList) {
  if (!process.env[key]) throw new Error(`please add ${key} to .env`);
}
const processEnv = process.env as Record<(typeof envList)[number], string>;

const app = new cdk.App();
const env = {
  account: process.env.CDK_DEFAULT_ACCOUNT,
  region: process.env.CDK_DEFAULT_REGION,
};

new UdonariumBackendStack(app, `${processEnv.PROJECT_ID}-UdonariumBackendStack`, {
   env,
  projectId: processEnv.PROJECT_ID,
  environment: {
    SKYWAY_APP_ID: processEnv.SKYWAY_APP_ID,
    SKYWAY_SECRET: processEnv.SKYWAY_SECRET,
    SKYWAY_UDONARIUM_LOBBY_SIZE: processEnv.SKYWAY_UDONARIUM_LOBBY_SIZE,
    ACCESS_CONTROL_ALLOW_ORIGIN: processEnv.ACCESS_CONTROL_ALLOW_ORIGIN,
  },
});
```

```properties:cdk/.env
PROJECT_ID=udonarium_backend
SKYWAY_APP_ID=SkyWay2023_Application_ID
SKYWAY_SECRET=SkyWay2023_Secret_key
SKYWAY_UDONARIUM_LOBBY_SIZE=3
ACCESS_CONTROL_ALLOW_ORIGIN=https://hogehoge.cloudfront.net/
```

フロントエンド作成してURLが分かるまでは`ACCESS_CONTROL_ALLOW_ORIGIN`は`*`にしておく。
今回は更新ということで、既知のフロントエンドURLを設定した。

```diff:cdk/package.json
{
  "name": "cdk",
  // 割愛
  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "test": "jest",
    "cdk": "cdk",
+    "predeploy-lambda": "cd .. && npm run aws-lambda:build",
+    "deploy-lambda": "cdk -a \"npx ts-node --prefer-ts-exts bin/lambda.ts\" deploy --all --profile produser"
  },
  // 割愛
}
```

デプロイ用のスクリプトを追加する。
今回はビルドしたものをそのまま lambdaとして公開する。

```
cd cdk && npm run deploy-lambda
```

デプロイするとURLが表示されるので控えておくこと。
この後、フロントエンドの設定で使用する。

```
udonarium_backend-UdonariumBackendStack.lambdaUrl = https://piyopiyo.lambda-url.ap-northeast-1.on.aws/
```

# フロントエンドの設定
[cdk](https://github.com/hibohiboo/udonarium/blob/ed53c3f918f4fddf40e1f82405392b2822c3278d/cdk/bin/cdk.ts)は特別なことをやっていないので割愛。
新SkyWayを使うために下記を書き換えてでｐ。

```diff:src/assets/config.yaml
backend:
  mode: skyway2023 #'skyway2023' or 'skyway'
-  url: https://{your-backend-hostname} #Your Backend API URL
+  url: https://piyopiyo.lambda-url.ap-northeast-1.on.aws/

webrtc: #非推奨（旧SkyWay）
  key: aaaaaaaa-bbbb-ccccc-dddd-eeeeeeeeeeee #[deprecated] Your (old) SkyWay API key
app: #未使用
dice: #未使用
```




# 参考
[旧 SkyWay の Community Edition はいつまで利用できますか？][*1]
[github/hibohiboo udonarium-backend][*2]
[github/hibohiboo udonarium][*3]
[ユドナリウムを CLOUDFLARE の Workers & Pages に設置したメモ][*4]
[ユドナリウム1.17.2をローカルで動かしてみたメモ][*5]


[*1]:https://support.skyway.ntt.com/hc/ja/articles/14944465324057-%E6%97%A7-SkyWay-%E3%81%AE-Community-Edition-%E3%81%AF%E3%81%84%E3%81%A4%E3%81%BE%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B
[*2]:https://github.com/hibohiboo/udonarium-backend/tree/aws-cdk
[*3]:https://github.com/hibohiboo/udonarium/tree/rooper-cdk-v17
[*4]:https://qiita.com/hibohiboo/items/27c19d42ef4d7c069d3c
[*5]:https://qiita.com/hibohiboo/items/38ec8a8beed4429f16a3

https://github.com/LokiMidgard/tragedy-looper-deduction-tool