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
1.7k
Cloudflare Meetup Nagano Vol.2
Taisei Ito
October 14, 2023
Tweet
Share
More Decks by Taisei Ito
See All by Taisei Ito
Grafana Meetup Japan Vol. 6
kaedemalu
1
510
Cloudflare Meetup Nagano Vol.3
kaedemalu
0
79
20220214_Future Tech Night
kaedemalu
0
2.4k
20210910_nyle
kaedemalu
0
1k
20210827 Future Tech Night
kaedemalu
0
4.4k
CNDO2021 Open Policy Agent
kaedemalu
1
1.4k
20210210 Terraform meetup ONLINE
kaedemalu
0
670
Future Talk Night 20201118
kaedemalu
0
220
20201114 GCPUG Shonan
kaedemalu
0
450
Other Decks in Technology
See All in Technology
Railsの話をしよう
yahonda
0
170
AI時代、“平均値”ではいられない
uhyo
5
1.2k
現場データから見える、開発生産性の変化コード生成AI導入・運用のリアル〜 / Changes in Development Productivity and Operational Challenges Following the Introduction of Code Generation AI
nttcom
1
420
Click A, Buy B: Rethinking Conversion Attribution in ECommerce Recommendations
lycorptech_jp
PRO
0
120
Introdução a Service Mesh usando o Istio
aeciopires
1
270
RDS の負荷が高い場合に AWS で取りうる具体策 N 連発/a-series-of-specific-countermeasures-available-on-aws-when-rds-is-under-high-load
emiki
7
4.5k
AI時代におけるデータの重要性 ~データマネジメントの第一歩~
ryoichi_ota
0
710
OAuthからOIDCへ ― 認可の仕組みが認証に拡張されるまで
yamatai1212
0
150
Building a cloud native business on open source
lizrice
0
150
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
8.9k
Okta Identity Governanceで実現する最小権限の原則 / Implementing the Principle of Least Privilege with Okta Identity Governance
tatsumin39
0
150
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
43k
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
GraphQLとの向き合い方2022年版
quramy
49
14k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Building Adaptive Systems
keathley
44
2.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
Balancing Empowerment & Direction
lara
5
700
Testing 201, or: Great Expectations
jmmastey
45
7.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Raft: Consensus for Rubyists
vanstee
140
7.2k
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