理系学生日記

おまえはいつまで学生気分なのか

terraform

AWS SDK + LambdaでAWSの前日コストをSlackに通知する

AWSを使っていると、変な使い方をしてると予算をオーバーしてしまいます。 このため、日次でAWS Cost Explorerを確認しているのですが、これはこれで面倒です。 面倒な行為というのはだいたい能動的な確認が求められるのから面倒であるので、 AWS Lambdaから…

自分のグローバルIPアドレスを知る

Azure Database for MySQLに自分のグローバルIPアドレスから接続したいというとき、グローバルIPをCMANで確認をしていました。 さすがに面倒になって、何か良い方法がないかなと思ったら、グローバルIPアドレスを返却してくれる様々なサービスがあることを知…

azurerm_mysql_databaseのcharset、collation指定は効果があるのか

TerraformでAzure Database for MySQLを構築する場合、必ず利用するであろうリソースがazurerm_mysql_databaseです。 このリソースはcharset、 collationが必須パラメータです。 それぞれ文字セット、照合順序を意味しており、MySQLを利用する方は気にしたこ…

Azureの複数Subscriptionを扱う場合は頻繁にaz logoutすべき

あれ、これ本当なのか、という挙動になったのが複数Subscriptionを扱う場合。 例えば私のアカウント状況が以下のようになっているとします。 $ az account list | jq '.[] | { "env": .name, "mail": .user.name }' { "env": "Staging", "mail": "kiririmode…

Azure上のTerraform Backendに対してAD認証を行う

AzureをTerraformで管理する場合、TerraformのRemote Stateとして Azure Blob Storageを設定することになります。 Backend Type: azurerm - Terraform by HashiCorp ここで問題になるのはAzure Blob Storageに対する認証でしょう。 Azure Blob Storageの認証…

Terraformで学ぶAzure Database for MySQL

Azure Database for MySQLをTerraformで構築してみます。 Terraformの構成 サーバとデータベース ネットワークアクセス制御 ファイアウォールルール VNETサービスエンドポイント 接続確認 インターネットからの接続 VNETからの接続 まとめ Terraformの構成 …

Terraform BackendのあるSubscriptionとは別のSubscriptionへリソースを構築する

SubScriptionによって環境分離を実現しようと考えています。つまり、Subscription1がQA環境、Subscription2がProd環境といった具合に。 このように各環境ごとにSubscriptionを分割し、それぞれをTerraformで管理しようとした場合、Terraform Backendをどの粒…

AzureでTerraform Backendを構成する

AzureをTerraformを使って管理する上で、Terraform BackendもAzure上に構成してみます。 AzureにおけるTerraform Backend Blob Storage ストレージアカウントの作成 実際にTerraformを実行してみる 参考文献 AzureにおけるTerraform Backend TerraformのBack…

TerraformでMSI認証を使うというのはどういうことか

Terraformに関するAzureの認証方法はいくつかあります。これはAzure Providerのページにもまとめられています。 Authenticating to Azure using the Azure CLI Authenticating to Azure using Managed Service Identity Authenticating to Azure using a Ser…

はじめてのAzure+Terraform

TerraformでAzureを触ってみます。 最新版のTerraformのインストール Azure CLIのインストール Azureへのログイン Terraformを実行してみる Azureにログインできていなかった場合はどうなるか まとめ 先週、ついにTerraformの0.15.0がGAになりました。 最新…

Eponaをリリースした

この間ようやくDevOps環境構築キットEponaというものをOSSとしてリリースしました。 DevOps DevOpsという言葉は様々な場所で聞きますが、理解するのがとても難しいです。 ずっと頑張って学んでいますが、まだまだ奥深く、いくらでも掘り下げるところがありま…

Terraform 0.13 系にあげるときの `Failed to decode current backend config`

Terraform 0.12 系から重い腰をあげて 0.13 系にあげる作業を進めていましたが、いくつかエラーが発生したので、その対応の顛末について。 terraform の version constraint でエラーになる terraform init で Failed to decode current backend config エラ…

特定の順序で Terraform を実行したい

Terraform で State を分割すると、たくさんの root module ができます。 ある root module が別 module の remote state 参照を持つとき、module 間に依存関係が生じます。 僕たちはこの依存順に terraform を apply しなければなりませんし、その逆順に de…

ECR への PUSH を行うための最低限のIAM Policy

Cointaner Image の CD 用に ECR へ PUSH するための最低限の IAM Policy がどうなるのかを検証してまいりました。おそらくは以下が最低限の IAM Policy になりそうです。 このうちのどの action を許可しない場合であっても、イメージの PUSH はエラーにな…

CodePipeline 失敗時のトラブルシュートのノウハウ

CodePipeline + CodeDeploy で ECS へのデプロイメントパイプラインを組んでいたんですが、このパイプラインが様々な理由で失敗します。 マネジメントコンソールで確認しても、Internal error 的な文言しか表示されず、とにかくデバッグがしんどいです。 つ…

CodePipeline から別アカウントの ECR ソースを参照する

CodePipeline から別アカウント上の ECR を Source Action から指定したい。 これはそれなりに存在するユースケースではないでしょうか。 この実現にマジで苦しんだので、葛藤の記録を残しておきます。 概観 バケットポリシー CodePipelie からクロスアカウ…

AWSクロスアカウントでTerraformを実行する

以下のエントリで記載したように、AWS 上においてはマルチアカウントで環境を構成することがベストプラクティスとされています。 このエントリでは、Custodian アカウントという概念が登場しました。これは結局 IAM ユーザやグループを 1 つのアカウントにの…

module に対する terraform validate が "The argument "region" is required, but was not set." エラーで失敗する

GitLab CI/CD を使い、自作の AWS 用 terraform モジュールに対して terraform validate をかけようとすると、以下のエラーメッセージが出て失敗しました。 Error: Missing required argument The argument "region" is required, but was not set. 原因 対…

GitLab CI/CD で terraform ファイルに tflint をかける

Terraform のスクリプトにも lint を自動で実行できるようにします。 lint ツール TFlint 設定の渡し方 GitLab CI/CD への組み込み 今後 lint ツール Terraform には terraform validate コマンドがあり、設定上のかなりの問題を検知してくれます。 一方で t…

AWS Organizations を使って AWS アカウントを自動で作成する

AWS においてはマルチアカウント戦略が重要とされています。 たとえば、開発環境/ステージング環境/本番環境といった各環境は、セキュリティ、ガバナンス面で分離すべきです。 メンバーの権限管理がすっきりする 特定の環境の作業が他環境に影響しない この…

Terraform の S3 backend の構築と locking (排他制御) の有効化

前提 その前に state とは何か state の S3 管理 backend となる S3 を Terraform 管理のインフラと一緒に管理して良いのか backend の構築 backend の適用 (locking なし) backend の適用 (locking あり) 前提 Terraform によってインフラをチームで管理し…

Terraform の型と面白そうな Tips

Terraform の型 Primitive Types Complex Types Collection Types Structural Types null 興味深い機能 map の key に参照が使える パスの参照 Python の内包表記的な for splat expression String Template: if 文/for 文 Terraform の型 全部で 7 種類あり…

「実践Terraform AWSにおけるシステム設計とベストプラクティス」を読んだ

ぼくは新しい技術を学ぶときは、たいてい以下の戦略を取ります。 公式ドキュメントを読む 当該技術に対する書籍を読む 仕様があれば、その仕様 (RFC 等)に目を通す。ただし心が折れない程度に。 目的は以下 2 つの要素の獲得です。 体系だった技術知識の獲得…

Terraform + AWS ことはじめ

Terraform については 2 年前に触ってから完全に放置してしまいました。 いろいろあって、まずは AWS 上で色々構築していくことになるので、今日から頑張っていきたいです…。 aws-cli terraform とにかくローカル PC に aws-cli、terraform を入れたくない。…