Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Cloudflare Meetup Nagano Vol.2
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Taisei Ito
October 14, 2023
Technology
2.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cloudflare Meetup Nagano Vol.2
Taisei Ito
October 14, 2023
More Decks by Taisei Ito
See All by Taisei Ito
Grafana Meetup Japan Vol. 6
kaedemalu
1
820
Cloudflare Meetup Nagano Vol.3
kaedemalu
0
110
20220214_Future Tech Night
kaedemalu
0
2.5k
20210910_nyle
kaedemalu
0
1.1k
20210827 Future Tech Night
kaedemalu
0
4.6k
CNDO2021 Open Policy Agent
kaedemalu
1
1.5k
20210210 Terraform meetup ONLINE
kaedemalu
0
700
Future Talk Night 20201118
kaedemalu
0
250
20201114 GCPUG Shonan
kaedemalu
0
510
Other Decks in Technology
See All in Technology
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
0
110
ロボティクスの技術 / Robotics Technology
ks91
PRO
0
100
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
1
130
Chainlitで作るお手軽チャットUI
ynt0485
0
270
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
4
2.5k
2026TECHFRESH畢業分享會 - Lightning Talk - 打造精準高效的 MCP 設計模式與測試實務
line_developers_tw
PRO
0
1.2k
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
240
AIのReact習熟度を測る
uhyo
2
640
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
220
徹底討論!ECS vs EKS!
daitak
0
120
自宅LLMの話
jacopen
1
610
200個のGitHubリポジトリを横断調査したかった
icck
0
130
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.1k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Everyday Curiosity
cassininazir
0
230
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
250
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
RailsConf 2023
tenderlove
30
1.5k
How GitHub (no longer) Works
holman
316
150k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Designing for Timeless Needs
cassininazir
1
260
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Transcript
Cloudflare Meetup Nagano Vol.2 2023.10.14 Sat. Taisei Ito kaedemalu 𝕏
kaedemalu
自己紹介 • 伊藤 太斉(Taisei Ito) ◦ @kaedemalu(X, GitHub) ◦ フューチャー株式会社
▪ Technology Innovation Group ▪ シニアコンサルタント ◦ #Terraform #Google Cloud #AWS • Community ◦ GCPUG Shonan Staff • Like ◦ サウナ・スキー・カメラ・ロードバイク
Agenda • 話そうと思っていること ※詳細については以下ブログを確認してください cf-terraformingで入門するCloudflare
Agenda • 話そうと思っていること ※詳細については以下ブログを確認してください cf-terraformingで入門するCloudflare
Agenda • 話そうと思っていること ◦ Terraformについて ◦ CloudflareとTerraform ◦ TerraformerからみたCloudflare •
話さないこと ◦ CloudflareにおけるTerraformのベストプラクティス
Infrastructure as Code (IaC) • インフラリソースをコードで管理する時代 ◦ 開発の高速化・変化に耐えうる必要が出てきた • クラウドサービスが発展し、より複雑に絡み合うモダンインフラには
「設定の明文化」が必要 • IaCに挙げられるメリットは以下である ◦ Reusability(再利用性) ◦ Portability(可搬性) ◦ Automation(自動化) • IaCのツール例 ◦ Ansible ◦ Cloud Formation ◦ Deployment Manager
Terraformとは • HashiCorp社が開発しているOSS ◦ インフラをソースコードで定義するツール ▪ InfraStructure as Code(IaC)ツールである ◦
HashiCorp Configuration Language(HCL)で記載する ◦ 拡張子は .tf で定義する ◦ 最近、Terraformのv1.6がGAになった
Terraformのコンポーネント • ソースコード ◦ 開発者がHCLで記述するファイル • Provider ◦ ソースコードをクラウドに適用するために必要 ▪
クラウドに向けてリクエストを投げる • State ◦ クラウドリソースの「あるべき」が書かれるファイル ◦ 自分で触ることは基本しない ◦ 管理はストレージサービス (S3, GCS etc…)に配置して管理する
Terraformのコンポーネント ソースコード Provider State 各種クラウド リソース 差分の同期 差分の比較
CloudflareとTerraform • CloudflareもTerraformで管理することが可能 • プロバイダーは現在Cloudflareで開発している ◦ cloudflare/terraform-provider-cloudflare ◦ コミット、リリースも積極的に行われている •
cf-terraformingというツールがCloudflareにて開発されている ◦ cloudflare/cf-terraforming • ストレージサービスでのState管理 ◦ R2で管理は現在できない ▪ Issue: Support Cloudflare r2 for storing Terraform state #33847
Cloudflare内部でTerraformの管理を完結させてみたいと思った
Stateを管理するときの例 • いずれかのストレージサービスでStateを管理するとき、以下のように書く ex.) S3で管理する場合 terraform { backend "s3" {
bucket = "sample-tfstate" # バケット名 key = "state" # オブジェクトのパスを指定 region = "us-east-1" # バケットのリージョン } }
Cloudflareのみで管理を完結するための課題 • Stateの管理をCloudflareに持っていきたい ◦ そうでない場合、S3, GCSなど他のクラウドに管理を委ねることになる
Cloudflareのみで管理を完結するための課題 • 自作 ◦ http backendがあり、Stateの挙動に合わせてAPIを準備すればできる可能性が高い ▪ Backend: http •
あるもの ◦ R2とS3の間でのAPI互換性あり ▪ APIの互換性一覧:S3 API compatibility
Cloudflareのみで管理を完結するための課題 • 自作 ◦ http backendがあり、Stateの挙動に合わせてAPIを準備すればできそう ▪ Backend: http •
あるもの ◦ R2とS3の間でのAPI互換性あり ▪ APIの互換性一覧:S3 API compatibility
調べても出てこないので、やってみた
設定していく • まずは課金の有効化 ◦ Stateのみ保存なので無料の範囲内
設定していく • アカウントIDを控える • APIトークンの作成
設定していく • APIトークンの作成 ◦ 出力された以下を控えておく ▪ アクセス キーID ▪ シークレット
アクセス キー
設定していく • R2バケットを作成する
設定していく • 環境変数の設定を行う ※Terraform側でパラメータを扱わないようにするため No. 環境変数名 値 1 AWS_ACCOUNT_ID CloudflareのアカウントID
2 AWS_ACCESS_KEY_ID APIトークンで払い出したアクセスキー ID 3 AWS_SECRET_ACCESS_KEY APIトークンで払い出したシークレット アクセスキー 4 CLOUDFLARE_ACCOUNT_ID CloudflareのアカウントID 5 CLOUDFLARE_API_KEY ユーザーAPIトークンで確認できる Global API Key 6 CLOUDFLARE_API_TOKEN アクセスキー, シークレットアクセスキーと 共に払い出したトークン
実際に管理する • backendの設定を行う ◦ ① S3と同様の設定を行う →トークン系のエラー(403) terraform { backend
"s3" { bucket = "kaedemalu-tfstate" key = "default.state" region = "us-east-1" } }
実際に管理する • backendの設定を行う ◦ ②トークンのバリデーションをスキップするオプションを追加 →アクセスキーがAWSの形式ではないと怒られる(403) terraform { backend "s3"
{ bucket = "kaedemalu-tfstate" key = "default.state" region = "us-east-1" skip_credentials_validation = true } }
実際に管理する • backendの設定を行う ◦ ③ S3のエンドポイントの向き先を指定 →成功した! terraform { backend
"s3" { bucket = "kaedemalu-tfstate" key = "default.state" region = "us-east-1" endpoint = "https://<CLOUDFLARE_ACCOUNT_ID>.r2.cloudflarestorage.com" skip_credentials_validation = true } }
余談 • us-east-1リージョンはないが、Cloudflare側でautoというリージョンになるようにエ イリアスが貼られている • Terraformのv1.6からはエンドポイントが以下のようにendpointsブロックになる terraform { backend "s3"
{ bucket = "kaedemalu-tfstate" key = "default.state" region = "us-east-1" endpoints = { s3 = "https://<CLOUDFLARE_ACCOUNT_ID>.r2.cloudflarestorage.com" } skip_credentials_validation = true } }
Workersをデプロイしてみる • Workersのスクリプト Terraform部分 • 実際に乗せるスクリプト ◦ 「Hello World」を出力するスクリプトを公式から拝借 ◦
https://developers.cloudflare.com/workers/examples/return-html/ resource "cloudflare_worker_script" "sample_workers" { account_id = "0000000000000000000000" name = "test-cf-workers" content = file("./scripts/workers.js") module = true }
Workersをデプロイしてみる • Terraform経由でデプロイしていることがわかる
Workersをデプロイしてみる • Terraform経由でデプロイしていることがわかる
Workersをデプロイしてみる • ZoneもTerraformで追加(したかった) • 「workers.dev」ドメインはZone IDを持たないことから利用できない ◦ 今回は手動で有効化して以下を確認しました(悔しい resource "cloudflare_worker_route"
"sample_workers" { zone_id = "xxxxxxxxx" pattern = "example.com/*" script_name = cloudflare_worker_script.sample_workers.name }
Terraformから眺めるCloudflare(クラウド) • Terraformからリソースを作成する場合、コンソール上では1つのリソース でも複数から構成する必要がある ◦ Workersを画面で立ち上げた場合、以下の 2つが同時に作成される ▪ Workers本体(スクリプト) ▪
ドメインの紐付け • クラウド側のリソース作成の流れを感じることができる
まとめ • Cloudflare単体でTerraformを利用・管理はできる ◦ State管理の方法として正式なサポートはなくても R2で管理可能
• 大崎にあるITコンサル会社 • 経営戦略から実装、運用までを全てこなす • ベンダーニュートラルの考え方 • 「ないものは作る」 フューチャーについて
• Real World HTTPの著者 • 実用Go言語の著者たち • Vue.jsのコミッター • TomcatのPMCメンバー
• OSS「Vuls」の作成者 こんな人います
ブログも出しています
参考リンク • Amazon S3 と API の互換性がある Cloudflare R2 を
AWS CLI から使ってみる
Cloudflare Meetup Nagano Vol.2 2023.10.14 Sat. Taisei Ito kaedemalu 𝕏
kaedemalu