エンジニアの皆さん、こんにちは。
インフラの世界へようこそ。これまで手動でAWSコンソールをポチポチとクリックし、「あれ、この設定ってどうなってたっけ?」と冷や汗をかいた経験はありませんか?
今日紹介するPulumi(プラミ)は、その悪夢を終わらせるための武器です。Terraformのような宣言的インフラ管理を、使い慣れたプログラミング言語(今回はTypeScript)で記述できる。つまり、「インフラをアプリケーションコードの一部として扱う」という、現代のSREにおける究極の到達点です。
これをマスターすれば、環境構築は「作業」から「確実な設計」へと進化します。さあ、一緒に深淵を覗いてみましょう。
—
1. 前提条件と環境構築
Pulumiは、あなたの書いたコードをAWS APIに翻訳する「翻訳機」のような役割を果たします。まずは道具を揃えましょう。
必要なもの
- AWS CLI: 認証の要です。インストールし、`aws configure`でアクセスキーとシークレットキーを設定しておいてください。
- Node.js: TypeScriptを実行するためのランタイムです。
- Pulumi CLI: [公式サイト](https://www.pulumi.com/docs/get-started/install/)からインストールしてください。
インストールが終わったら、ターミナルで `pulumi version` と打ってみてください。バージョンが表示されれば、戦う準備は完了です。
—
2. プロジェクトの初期化(神殿の基礎を作る)
任意のディレクトリを作成し、以下のコマンドを叩いてください。
mkdir my-pulumi-infra && cd my-pulumi-infra
pulumi new aws-typescript
いくつかの質問が来ますが、デフォルトのままでOKです。すると、ディレクトリ内に `index.ts` という心臓部が生成されます。これが、これからあなたのインフラを定義する「設計図」になります。
—
3. VPCとEC2をコードで構築する
さて、ここからが本番です。`index.ts` を開き、以下のコードを記述してみてください。なぜこの書き方なのか、その理由はコメントで添えています。
import as pulumi from “@pulumi/pulumi”;
import as aws from “@pulumi/aws”;
// 1. VPCの作成
// インフラを「モジュール」として扱うことで、再利用性が飛躍的に高まります
const vpc = new aws.ec2.Vpc(“my-vpc”, {
cidrBlock: “10.0.0.0/16”,
enableDnsHostnames: true,
});
// 2. サブネットの作成
const subnet = new aws.ec2.Subnet(“my-subnet”, {
vpcId: vpc.id,
cidrBlock: “10.0.1.0/24”,
});
// 3. セキュリティグループの定義(インバウンドを許可)
const sg = new aws.ec2.SecurityGroup(“web-sg”, {
vpcId: vpc.id,
ingress: [{ protocol: “tcp”, fromPort: 22, toPort: 22, cidrBlocks: [“0.0.0.0/0”] }],
});
// 4. EC2インスタンスの構築
// 重要なのは「リソース間の依存関係」を明示的に書かなくても、
// Pulumiが変数(vpc.id等)を通じて自動で解決してくれる点です。
const server = new aws.ec2.Instance(“web-server”, {
instanceType: “t2.micro”,
ami: “ami-0c55b159cbfafe1f0”, // Amazon Linux 2 (リージョンによって変更してください)
subnetId: subnet.id,
vpcSecurityGroupIds: [sg.id],
});
// デプロイ後にインスタンスのIPアドレスを表示する
export const publicIp = server.publicIp;
—
4. デプロイと破棄(破壊と創造のサイクル)
コードを書いたら、いよいよAWS上に具現化させます。
デプロイ(pulumi up)
ターミナルで以下のコマンドを実行してください。
pulumi up
すると、Pulumiが「現在と理想(コード)」の差分を計算し、実行計画を表示します。`yes` を選ぶと、魔法のようにAWSリソースが生成されます。
破棄(pulumi destroy)
学習が終わったら、必ずリソースを片付けましょう。これが「課金事故を防ぐ」SREの鉄則です。
pulumi destroy
—
なぜ今、Pulumiなのか?
初心者のうちは、「単にYAMLやHCL(Terraformの言語)を書けばいいのでは?」と思うかもしれません。しかし、大規模なシステムになればなるほど、「条件分岐(if文)」「ループ(for文)」「関数による抽象化」が必要になります。
Pulumiなら、TypeScriptの強力な型システムを使いながら、安全に、そして何より楽しくインフラを構築できます。
今日学んだことは、インフラ自動化のほんの入り口です。このコードをベースに、次は「RDSを立てる」「Lambdaを接続する」と、パズルのピースを組み合わせるように世界を広げていってください。
何か分からないことがあれば、いつでも聞いてください。インフラの深淵で、あなたを待っています。