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
Taisei Ito
October 14, 2023
Technology
0
820
Cloudflare Meetup Nagano Vol.2
Taisei Ito
October 14, 2023
Tweet
Share
More Decks by Taisei Ito
See All by Taisei Ito
20220214_Future Tech Night
kaedemalu
0
2.1k
20210910_nyle
kaedemalu
0
840
20210827 Future Tech Night
kaedemalu
0
4.1k
CNDO2021 Open Policy Agent
kaedemalu
1
1.2k
20210210 Terraform meetup ONLINE
kaedemalu
0
590
Future Talk Night 20201118
kaedemalu
0
170
20201114 GCPUG Shonan
kaedemalu
0
350
Future New Graduate Session
kaedemalu
0
56
Google Cloud Next '20 Recap Security Section
kaedemalu
1
300
Other Decks in Technology
See All in Technology
20240418_Google ColabにLLMが搭載されたようなのでPython x データ分析の勉強方法を考えてみる
doradora09
0
140
地理空間データ可視化・解析・活用ソリューション Pacific Spatial Solutions (PSS)
pacificspatialsolutions
0
300
GrafanaMeetup_AmazonManagedGrafanaのアクセス制御機能とマルチテナント環境下でのアクセス制御について
daitak
0
280
SIEMを用いて、セキュリティログ分析の可視化と分析を実現し、PDCAサイクルを回してみた
coconala_engineer
0
340
On Your Data を超えていく!
hirotomotaguchi
2
700
VS CodeでAWSを操作しよう
smt7174
8
1.7k
アクセス制御にまつわる改善 / Improving access control
itkq
0
560
Azure Container Apps + Bicep 〜 こんな感じで運用しています
kaz29
3
530
Google Cloud Next '24でブログを10本書いた方法と勉強会を沸かせた方法
yasumuusan
0
310
KubeCon EU 2024 Recap “Kubernetes Policy Time Machine: Where to Next?”
ryysud
0
230
ルーターでプレゼンする
puhitaku
0
580
JAWS-UG Bedrock Claude Night
yamahiro
3
620
Featured
See All Featured
Thoughts on Productivity
jonyablonski
58
3.8k
GraphQLの誤解/rethinking-graphql
sonatard
50
9.2k
Atom: Resistance is Futile
akmur
259
25k
A Philosophy of Restraint
colly
197
16k
Designing the Hi-DPI Web
ddemaree
276
33k
Testing 201, or: Great Expectations
jmmastey
28
6.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
7
1k
Building a Scalable Design System with Sketch
lauravandoore
456
32k
What’s in a name? Adding method to the madness
productmarketing
PRO
16
2.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
345
19k
Building Applications with DynamoDB
mza
88
5.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
17
6.4k
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