---
title: AWS CDK v2 で RSS 配信をしてみる
tags: 
author: [NishimuraWataru](https://www.docswell.com/user/_n13u_)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/GE5Y8YLDE4.jpg?width=480
description: AWS CDK v2 で RSS 配信をしてみる by NishimuraWataru
published: October 21, 23
canonical: https://www.docswell.com/s/_n13u_/KLL81L-2023-10-21-175353
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/GE5Y8YLDE4.jpg)

AWS CDK v2 で RSS 配信をしてみる
#ゆるあさ
n13u ( @_n13u_ )
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 2

![Page Image](https://bcdn.docswell.com/page/972GKG3M7R.jpg)

自己紹介
n13u / 西村航
Sapporo Engineer Base 運営事務局
一般社団法人未完事務局
SocialChangeLab合同会社
2002年生まれ。生まれも育ちも札幌市。
自分で小さい会社の副代表やりつつ、フロントエンドエンジニアとして受託開発や地域の中
小企業向けにプロダクト作っています（しんどい）
エンジニアとしては、Web系を中心に触ることがほとんどですが、趣味でUnityや3DCG周
りも触っています。
Twitter @_n13u_
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 3

![Page Image](https://bcdn.docswell.com/page/DJYVNV1PJM.jpg)

目次
目的と背景
つくたいもの
考えたこと
つくるもの
AWS CDK とは？
中身
改善点
まとめ
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 4

![Page Image](https://bcdn.docswell.com/page/V7NMXM2ME8.jpg)

目的と背景
「Sapporo Engineer Base」という札幌市の取組のウェブサイトたちあげる必要が生まれた。
Connpassからイベントを取得して表示するものをつくりたかったが、現状のAPIだと十分な
情報取得ができなかった。
かつ、今回サイト制作に使用したSTUDIOはRSSで情報を取るためRSS配信サービスをつくる
必要があった。
Connpass API の問題点（？）
複数条件でのOR/AND検索が複雑
エリア指定での検索が難しい
サムネイル画像を取ってこれない
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 5

![Page Image](https://bcdn.docswell.com/page/YJ9N8N1WJ3.jpg)

つくりたいもの
ConnpassのAPIから特定条件に従ったイベント情報を取得する
イベント情報取得後、イベント画像を取ってくる必要がある
イベント情報に従ってRSS(XML) を構築
RSSを配信
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 6

![Page Image](https://bcdn.docswell.com/page/GJ8K8K4RED.jpg)

考えたこと
アクセス過多にならないか
API取得の頻度は週１程度でよい
なるべくリクエスト数を減らす
何で（どこで）APIを叩くか？
Cloudflare？Hono？
AWS Lambda？
言語はホスト環境によるけど書きやすいのは
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 7

![Page Image](https://bcdn.docswell.com/page/LJLZRZ627R.jpg)

考えたこと
RSSをどう配信するか？
リクエストごとに動的に生成するか？
静的なファイルを配信するか？
デプロイやらホストがめんどいので自動化したい（できる限り）
GitHub Actions? CodeDeploy?
公開ドメインどうする？
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 8

![Page Image](https://bcdn.docswell.com/page/47MVRV597W.jpg)

つくるもの
APIはAWS Lambdaで叩く
LambdaでそのままRSS（XML）を生成
AWS EventBridgeで定期実行
生成したファイルをs3に配置
s3に配置したファイルをCloudFrontで配信
Cloudflare Registrar に置かれたドメインに対して、AWSからDNSベースの証明書発行
CloudFrontで rss.sapporo-engineer-base.dev を紐づけ
AWS Cloud 上のものは AWS CDK v2 で構築 ⇐ これの話
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 9

![Page Image](https://bcdn.docswell.com/page/P7R2R239J9.jpg)

構成図
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 10

![Page Image](https://bcdn.docswell.com/page/PJXDRD43EX.jpg)

今日の話
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 11

![Page Image](https://bcdn.docswell.com/page/3JKXRXZNED.jpg)

AWS CDK とは？
AWS CDK を使用すると、プログラミング言語の優れた表現力を活かして、信頼性が高く、スケーラブルで、コスト効率の高いアプリケーションをクラウドで構築でき
ます。このアプローチには、次のような多くのメリットがあります。
AWSリソースに適切で安全なデフォルトを自動的に提供する高レベルの構造を使用して構築し、より少ないコードでより多くのインフラストラクチャを定義できま
す。
パラメーター、条件、ループ、構成、継承などのプログラミングイディオムを使用して、AWSや他の人が提供するビルディングブロックからシステム設計をモデル
化します。
インフラストラクチャ、アプリケーションコード、構成をすべて1か所にまとめることで、すべてのマイルストーンで完全なクラウド導入可能なシステムを確保でき
ます。
コードレビュー、ユニットテスト、ソース管理などのソフトウェアエンジニアリング手法を採用して、インフラストラクチャをより堅牢にします。
シンプルかつインテント指向の API を使用して、AWSリソースを (スタック間でも) Connect し、権限を付与します。
AWS CloudFormation既存のテンプレートをインポートして、リソースに CDK API を提供します。
AWS CloudFormationの機能を活用して、インフラストラクチャのデプロイを予測どおりに繰り返し実行し、エラー発生時にロールバックすることも可能です。
インフラストラクチャの設計パターンを、組織内のチーム間または一般ユーザーと簡単に共有できます。
は TypeScript、、Python JavaScript、Java、C#/.Net、および GoAWS CDK をサポートしています。開発者は、サポートされているこれらのプログラミング言語の
いずれかを使用して、と呼ばれる再利用可能なクラウドコンポーネントを定義できますコンストラクト。スタックアプリケーションこれらを一緒におよびに構成します。
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 12

![Page Image](https://bcdn.docswell.com/page/LE3585DZJ5.jpg)

長い！
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 13

![Page Image](https://bcdn.docswell.com/page/8EDDMDP4EG.jpg)

図解があるぞ？
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 14

![Page Image](https://bcdn.docswell.com/page/V7PXRXNVE8.jpg)

2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 15

![Page Image](https://bcdn.docswell.com/page/2JVLRLKR7Q.jpg)

わからん！
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 16

![Page Image](https://bcdn.docswell.com/page/5EGXMXQ6JL.jpg)

結局なにか？
AWS純正のIaC（Infrastructure as a Code）
身近な言語で、AWS構成をデプロイするプログラムをかける
CLIから cdk deploy コマンドでデプロイ可能
中身はAWSのCloudFormation
勝手にスタックやらテンプレートを作ってくれる
IAMいじったり、クロスリージョンも可能
ランタイム環境を同じレポジトリに含められる
便利〜〜〜〜
TypeScriptのバンドラもあるよ〜
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 17

![Page Image](https://bcdn.docswell.com/page/4JQ8R8K27P.jpg)

どんなことコード書いてるの？
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 18

![Page Image](https://bcdn.docswell.com/page/K74282PPJ1.jpg)

つくりかた
Stackクラスを継承したStackを記述し、この中にアプリケーション構築と手順を記述します
Stack自体は bin/conpass-rss.ts でimportされ、実行されます
export class ConnpassRssStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
}
}
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 19

![Page Image](https://bcdn.docswell.com/page/LJ1M2M9XEG.jpg)

つくりかた
S3バケットとCloudFrontはこんな感じ
const bucket = new s3.Bucket(this, &quot;ConnpassRssBucket&quot;);
new Distribution(this, &#039;Distribution&#039;, {
comment: &#039;RSS Feed&#039;,
defaultRootObject: &#039;rss.xml&#039;,
defaultBehavior: {
allowedMethods: AllowedMethods.ALLOW_GET_HEAD,
cachedMethods: CachedMethods.CACHE_GET_HEAD,
cachePolicy: CachePolicy.CACHING_OPTIMIZED,
viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
origin: new S3Origin(bucket),
},
...//
priceClass: PriceClass.PRICE_CLASS_ALL,
});
省略
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 20

![Page Image](https://bcdn.docswell.com/page/GJW3R3QKJ2.jpg)

つくりかた
AWS Lambda でNodeJS Functionを立てる際はこんな感じでかけます
const xmlExportLambda = new NodejsFunction(this, &quot;ConnpassReturnRss&quot;, {
functionName: &quot;ConnpassReturnRss&quot;,
entry: join(__dirname, &quot;../src/index.ts&quot;).toString() //lambda
runtime: Runtime.NODEJS_18_X // Ver
,
memorySize: 1024,
timeout: Duration.seconds(300) // timeout aws-cdk
,
role: iamRoleForLambda // IAM Role
,
bundling: { // esbuild
minify: true,
sourceMap: true,
externalModules: [&quot;@aws-sdk/*&quot;],
tsconfig: join(__dirname, &quot;../tsconfig.json&quot;),
format: OutputFormat.CJS
},
environment: {
S3_BUCKET_NAME: bucket.bucketName, //
},
});
の実体コード,
指定
も
独自の書式で指定可能
を渡せます
ベースのバンドル（ファイルの絶対パスにスペース含まれるとコケます）
環境変数受け渡し
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 21

![Page Image](https://bcdn.docswell.com/page/4EZVRVWNJ3.jpg)

GitHub レポジトリ
mikan-foundation/connpass-rss
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 22

![Page Image](https://bcdn.docswell.com/page/Y765R5G9EV.jpg)

改善点
メモリの使用量が微妙（300MB〜400MBくらい）
256MBに抑えたい
APIの取得ロジック考えたい
RSSファイルちゃんとつくりたい
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


# Page. 23

![Page Image](https://bcdn.docswell.com/page/G75Y8YVD74.jpg)

宣伝：Sapporo Engineer Base について
札幌でイベントやりたくなったらお声がけください
逆に出張とかもします
2023.10.21@ゆるい勉強会@秋の終わり #ゆるあさ


