【Pulumi】Pulumi ~ 入門編 / Hello World in AWS ~

■ はじめに

https://dk521123.hatenablog.com/entry/2022/03/07/233752

の続き。

今回は、AWS環境で行う。

目次

【0】「Get Started with AWS」について
 1)目的
 2)実行環境
【1】新規プロジェクトを作成する
 1)ログイン
 2)プロジェクトの作成
【2】出力ファイルの確認
【3】デプロイ(1回目)
【4】プログラムを修正
 1)S3にアップロードするindex.htmlを作成する
 2)index.ts を修正する
【5】デプロイ(2回目)
【6】後片付け

【0】「Get Started with AWS」について

* 以下のサイトを参照。

https://www.pulumi.com/docs/get-started/aws/

1)目的

* Pulumi で S3 バケットを作る
* そのバケットに「index.html」をアップロードする

2)実行環境

https://www.pulumi.com/docs/get-started/aws/begin/

* 実行環境は、以下の通り。
~~~~~~~~~~~
 + OS : Linux
 + Pulumi : v3.26.1
 + Node.js : v16.14.0
~~~~~~~~~~~

* 構築されていない場合は、以下の関連記事を参考に構築してみる

Pulumi ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2022/01/10/155206
Node.js ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/06/000000

* AWS でアクセスできるようにしておく(以下参照)

Linuxの場合

export AWS_REGION=<YOUR_RESGION(e.g. us-west-2)>
export AWS_ACCESS_KEY_ID=<YOUR_ACCESS_KEY_ID>
export AWS_SECRET_ACCESS_KEY=<YOUR_SECRET_ACCESS_KEY>

# 確認1(AWS Accountを表示)
# https://dev.classmethod.jp/articles/get-aws-account-id-with-get-caller-identity/  
aws sts get-caller-identity

# 確認2(s3バケット名を表示)
aws s3 ls

【1】新規プロジェクトを作成する

https://www.pulumi.com/docs/get-started/aws/create-project/

を参考に実行していく

1)ログイン

「Get Started with AWS」にはないのだが、

https://www.pulumi.com/docs/reference/cli/pulumi_login/

に載っている pulumi login を行う。

コマンド例

# 専用ディレクトリ作成および移動
mkdir quickstart && cd quickstart

# MissingRegion対策
export AWS_REGION=us-west-2

$ pulumi login s3://your-s3-for-pulumi/xxxx/quickstart
Logged in to user-xxx as user (s3://your-s3-for-pulumi/xxxx/quickstart)

補足:MissingRegion対策

* エラー「MissingRegion: could not find region configuration」が
 でてきた時の対策。
 => 詳細は、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2022/01/11/105319

2)プロジェクトの作成

* 「pulumi new <project_name>」でプロジェクト作成

コマンド例

# aws-typescript でプロジェクト作成
pulumi new aws-typescript

This command will walk you through creating a new Pulumi project.

Enter a value or leave blank to accept the (default), and press <ENTER>.
Press ^C at any time to quit.

project name: (quickstart)
project description: (A minimal AWS TypeScript Pulumi program) This is a sample.
Created project 'quickstart'

stack name: (dev)
Created stack 'dev'
Enter your passphrase to protect cofig.secrets:<Password>
Re-enter your passphrase to confirm:<Password>

aws:region: The AWS region to deploy into: (us-east-1) ws-west-2
Saved config

Installing dependencies...
--- 省略 ---
Finished installing dependencies

Your new project is ready to go! ✨

To perform an initial deployment, run 'pulumi up'

補足:パスフレーズ省略について

以降、pulumi コマンドを打つごとに、
「Enter your passphrase・・・」って聞いてくる。
うっとしい場合は、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2022/03/14/152258

【2】出力ファイルの確認

https://www.pulumi.com/docs/get-started/aws/review-project/

* 以下のようなファイルがあれば、OK
 + Pulumi.yaml
 + Pulumi.dev.yaml
 + index.ts

index.ts

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as awsx from "@pulumi/awsx";

// Create an AWS resource (S3 Bucket) ★「my-bucket」は変更する
// https://www.pulumi.com/registry/packages/aws/api-docs/s3/bucket/#bucket
const bucket = new aws.s3.Bucket("my-bucket");

// Export the name of the bucket
export const bucketName = bucket.id;

【3】デプロイ(1回目)

* とりあえず、pulumi up でデプロイする

コマンド例

pulumi up
# yes を選択

# 作成したバケット名を表示
pulumi stack output bucketName

【4】プログラムを修正

https://www.pulumi.com/docs/get-started/aws/modify-program/

1)S3にアップロードするindex.htmlを作成する

cat <<EOT > index.html
<html>
    <body>
        <h1>Hello, Pulumi!</h1>
    </body>
</html>
EOT

2)index.ts を修正する

index.ts

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as awsx from "@pulumi/awsx";

// Create an AWS resource (S3 Bucket) ★「my-bucket」は変更する
const bucket = new aws.s3.Bucket("my-bucket");

// ★追加
// https://www.pulumi.com/registry/packages/aws/api-docs/s3/bucketobject/#bucketobject
const bucketObject = new aws.s3.BucketObject("index.html", {
    bucket: bucket,
    key: "xxxx/xxxx/index.html"
    source: new pulumi.asset.FileAsset("index.html")
});

// Export the name of the bucket
export const bucketName = bucket.id;

【5】デプロイ(2回目)

https://www.pulumi.com/docs/get-started/aws/deploy-changes/

コマンド例

# 自信がない場合は、まずは、dry run
$ pulumi preview

$ pulumi up
# yes を選択

$ aws s3 ls $(pulumi stack output bucketName)

【6】後片付け

pulumi destroy

pulumi stack rm dev

関連記事

Pulumi ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/10/23/025230
Pulumi ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2022/01/10/155206
Pulumi ~ 入門編 / Hello World in Local/k8s
https://dk521123.hatenablog.com/entry/2022/03/07/233752
Pulumi ~ 基本編 / CLI
https://dk521123.hatenablog.com/entry/2021/10/25/215508
Pulumi ~ 基本編 / Config ~
https://dk521123.hatenablog.com/entry/2022/03/15/224217
Pulumi ~ 基本編 / Logging ~
https://dk521123.hatenablog.com/entry/2022/03/04/111618
Pulumi ~ 基本編 / Component ~
https://dk521123.hatenablog.com/entry/2022/03/05/100153
Pulumi ~ AWS S3 / KMS のデプロイ ~
https://dk521123.hatenablog.com/entry/2022/03/03/095415
Pulumi ~ AWS Glue のデプロイ ~
https://dk521123.hatenablog.com/entry/2022/03/02/122037
Pulumi ~ AWSリソース情報を取得する ~
https://dk521123.hatenablog.com/entry/2022/03/22/212828
Pulumi ~ パスフレーズ省略を考える ~
https://dk521123.hatenablog.com/entry/2022/03/14/152258
Pulumi に関するトラブル
https://dk521123.hatenablog.com/entry/2022/01/11/105319
KubernetesWindows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/05/01/000000
Kubernetes ~ 基本編 / kubectlコマンド ~
https://dk521123.hatenablog.com/entry/2022/01/12/110555
Node.js ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/06/000000