基础设施代码(IAC)とは,コンピューターが解読可能な定义ファイルを介してクラウドとITのリソースを管理およびプロビジョニングするプロセスであり,最新の継続的インテグレーションのパイプラインの一部として利用されています。IaCは最新型のDevOpsツールを通じ,コンピューティングリソースをプロビジョニング,管理,破棄する機能を提供します。IaCを使用すると,目的のリソースを宣言型の静的なコードとして定義し,リソースのデプロイと動的な管理を,コードを介して実行できるようになります。

私は最近,开発者の皆さんとやり取りする中で,ある事実に気付きました。多くの开発者がIACの有用性を认识していない,または认识してはいるものの,准备が烦雑であるという理由で,初めから导入をあきらめてしまっているようなのです。この记事では皆さんのIACの导入が少しでも楽になるよう,IACの利点を说明すると共に,现在利用可能なIACツールについて,具体的なツールの使用例を交えながら简単に绍介したいと思います。今回取り上げるのは,业界内でも特に人気が高い,HashiCorpのTerraformPulumiという2つのIACツールです。

前提条件

事前に以下の手顺を完了しておく必要があります。

谷歌云プロジェクト认证情报の作成

IaCツールを使用して管理操作を行うには,谷歌云の认证情报を作成する必要があります。

  • サービスアカウントキーの作成ページを開きます。
  • 既定のサービスアカウントを选択するか,新たにアカウントを作成したら,キータイプとしてJSONを选択し,[作成]をクリックします。
  • このJSONファイルを~ / config / gcloud /ディレクトリに保存し,ファイル名をcicd_demo_gcp_creds.jsonに変更します。このファイルは,后の行程で谷歌云CLIをコンテナ内で有效化するときに非常に重要になります。

Pulumi APIトークンの作成

プロジェクトのステートをPulumiのバックエンドクラウドに格纳するために,Pulumi APIトークンの取得が必要です。

  • app.pulumi.com/にアクセスします。
  • ページ左上の[选择一个组织(組織を選択する)]をクリックし,使用するアカウントを選択します。
  • [设置(设定)]をクリックします。
  • ページ左側の[访问令牌(アクセストークン)]をクリックします。
  • ページ右侧の[新的访问令牌(新规アクセストークン)]をクリックします。
  • [创建(作成)]をクリックし,作成したAPIトークンを保存します。このトークンは,后でPulumiプロジェクトの初期化に使用します。

IaC101泊坞窗イメージの取得

これですべての前提条件が満たされたので,次はこのワークショップで使用する泊坞イメージを取得しましょう。ターミナルに次のコマンドを入力します。

搬运工人拉ariv3ra / iac101

これで,ariv3ra / iac101码头工人イメージがローカルに取得できたはずです。泊坞窗图片を実行して,結果の一覧にこのイメージが含まれていれば,正常に取得できています。

IaC101泊坞窗コンテナの起动

上記のariv3ra / iac101イメージを基に,新たに泊坞コンテナを作成します。ここには,あらかじめ定义されたIACツールおよびコードがすべて含まれています。

/.config/gcloud/ディレクトリのマウント

新たなコンテナを実行するには,~ / config / gcloud /への绝対パスが必要になります。たとえば,私の的MacOSマシンの场合なら,绝対パスは/Users/angel/.config/gcloud/です。ご自身のローカルマシン上で,gcloudディレクトリの絶対パスを忘れずに確認しておいてください。

マウントによるIaC101コンテナの起动

ターミナルで次のコマンドを実行します。<这里的绝对路径>の部分は,ローカルマシン上の実际のglocud /ディレクトリの絶対パスと置き換えてください。

docker run -it -name iactest -mount type=bind,source=<您这里的绝对路径>.config/gcloud/,target=/root/。配置/ gcloud ariv3ra / iac101

IaC101コンテナの起动后

前述の码头工人运行コマンドを実行すると,IaC101コンテナが作成および起動され,ターミナルシェルは実行中のコンテナにログインした状態になります。これ以降,出口コマンドによって手动でコンテナを停止するまで,ターミナルシェルで実行するコマンドはすべて,この多克尔コンテナ内で実行されます。このコンテナにはTerraformとPulumiのCLIツールがどちらもインストールされており,それぞれのツールを使用してインフラストラクチャを构筑するためのサンプルコードも付属しています。このコンテナのプロジェクトファイルは次のとおりマッピングされます。

项目/ | _ terraform / GCP /计算/#包含Terraform代码文件| _ pulumi / GCP /计算/#包含Pulumi代码文件

HashiCorp Terraform

HashiCorp Terraformは,インフラストラクチャの作成,変更,バージョン管理を安全かつ効果的に行うためのオープンソースツールです。起程拓殖を使用すると、既存のサービスプロバイダーに加え、カスタムの自社ソリューションも管理できます。

Terraformでは,単一のアプリケーションまたはデータセンター全体を运用するために必要なコンポーネントを设定ファイルに定义します。また,目的のステートに达するために実行する内容が记载された実行プランを生成し,これを実行して,记述どおりのインフラストラクチャを构筑します。设定が変更されると,Terraformは変更内容を特定し,适用すべき増分の実行プランを生成します。

起程拓殖で管理できるインフラストラクチャには,コンピューティングインスタンス,ストレージ,ネットワーキングのような低レベルのコンポーネントだけでなく,DNSエントリやSaaS機能のような高レベルのコンポーネントも含まれます。

Terraformによるインフラストラクチャのプロビジョニング

Terraformコードを使用して,GCPにリソースをプロビジョニングしてみましょう。terraform / GCP /计算/内にあるmain.tfは,この例で使用するインフラストラクチャについて定义したコードです。これからこのファイルを使用して,多克尔コンテナにパッケージ化された,Python的烧瓶アプリケーションをインストールして実行するための新しいコンピューティングインスタンスを作成します。このTerraformコードではさらに,ポート5000を介したアプリケーションへのパブリックアクセスを许可するファイアウォールルールも作成されます。

前述の内容でプロビジョニングを行うために,ターミナルで以下のコマンドを実行します。

CD〜/项目/ terraform / GCP /计算/

Terraformの初期化

前述のコマンドで〜/项目/ terraform / GCP /计算/ディレクトリに移動してから,以下のコマンドを実行します。

terrform INIT

以下のような结果が返されるはずです。

根@ d9ce721293e2:〜/项目/ terraform / GCP /计算#terraform初始化初始化后端...初始化提供商插件...  - 检查可用的提供插件...  - 下载插件的提供者“谷歌”(hashicorp /谷歌)3.10.0 ... * provider.google:版本= “〜> 3.10” Terraform已成功初始化!

Terraformでのプレビュー

Terraformには,Terraformコードをドライ実行して,実际には何も実行することなくバリデーションできる起程拓殖计划というコマンドがあります。このコマンドでは,Terraformが既存のインフラストラクチャに対して実行するすべてのアクションと変更をグラフ化することも可能です。ターミナルで以下を実行します。

起程拓殖计划

以下のような结果が返されるはずです。

执行计划已经生成,如下所示。资源操作以表示以下符号:+创建Terraform将执行以下操作:#google_compute_firewall.http-5000将被创建+资源 “google_compute_firewall” 的 “http-5000”{+ creation_timestamp =(称为后应用)+ destination_ranges =(认识的申请)}#google_compute_instance.default将创建+资源 “google_compute_instance”, “默认”{+ can_ip_forward =假+ cpu_platform =(被申请后)+ deletion_protection =假+ guest_accelerator =(俗称后应用)+ ID =(知应用后)+ INSTANCE_ID =(称为后应用)+ label_fingerprint =(称为后应用)+标签= {+ “容器-VM”= “COS-稳定69-10895-62-0”} +计算机类型=“G1-小”}计划:2加,0至变化,0摧毁。

このように,Terraformはmain.tfファイル内のコードに基づいてGCPリソースを新規作成します。

Terraformの适用

インフラストラクチャを新规作成してアプリケーションをデプロイする准备が整ったので,ターミナルで以下のコマンドを実行します。

terraform申请

コマンドを确认するメッセージが表示されたら,是と入力して输入キーを押します。

你要执行这些操作?Terraform将执行上述动作。只有“是”将被接受批准。输入一个值:是

起程拓殖によってGCP上でインフラストラクチャが作成され,その後少ししてから,アプリケーションがセットアップされて起動されます。なお,起程拓殖による処理の完了後,アプリケーションがオンラインになるまでには3 ~ 5分かかります。バックエンドシステムがプロビジョニングを行ってからクラスタをオンラインにするため,瞬時には処理されません。

完了すると,以下のような内容が出力されます。

输出:Public_IP_Address=34.74.75.17

このPublic_IP_Addressの値は,アプリケーションを実行中のIPアドレスを表します。そのため,ブラウザーを开き,この値とポートアドレスの: 5000を入力(34.74.75.17:5000のように入力)すると,GCPで実行中のアプリケーションが表示されます。

Terraformのリソースの破弃

作成した谷歌のコンピューティングインスタンスとアプリケーションが正常に稼働していることを確認できたところで,今度はterraform破坏コマンドを実行して,このチュートリアルで作成したアセットを破弃してみましょう。アセットはそのまま稼働させても构いません。しかし,谷歌云平台上でアセットを実行するにはコストが発生し,そのコストに対する责任も负わなくてはなりません。谷歌から无料トライアルの登录ユーザーに提供されている300ドル分のクレジットは,アセットを実行し続ければあっという间に尽きてしまいます。もちろん,ご事情に合わせて判断していただければと思いますが,terraform破坏を実行すれば実行中のすべてのアセットを破弃できます。

次は,Pulumiを使用したインフラストラクチャのプロビジョニング方法を见ていきましょう。

Pulumi SDK

Pulumi SDKはクラウドアプリケーションとIaCの定義およびデプロイに対応したオープンソースフレームワークです。打印稿やJavaScript、Python去など,開発者が自分で選んだ言語でコードを記述できるという特長があります。YAMLやDSLといった固有の言語を新たに習得しなくても,クラウドベースのアプリケーションやインフラストラクチャを運用できるという点で,Pulumiのアプローチはきわめて画期的です。Pulumiを使用すれば,抽象化やコードの再利用のほか,使い慣れたIDE,リファクタリングツールやテストツールを利用することができます。1つのツールチェーンおよび一連のフレームワークを熟知していれば,任意のクラウド(AWS, Azure, GCPまたはKubernetes)に簡単に移行できるのです。

Pulumiによるインフラストラクチャのプロビジョニング

起程拓殖を記事の前半では,使用してインフラストラクチャを構築したので,今度はPulumiを使用して,新たなインフラストラクチャをプロビジョニングおよびデプロイする方法を学習しましょう。Pulumiのコードとツールを使用して,先ほどと同じGCPリソースを作成する例をお見せします。Pulumiでは,柔軟性の高い汎用的なプログラミング言語でインフラストラクチャを定義できます。今回の例では蟒蛇を使用します。インフラストラクチャの定义は,〜/项目/ pulumi / GCP /计算/ディレクトリ内の__main.py__ファイルで行います。

なお,Pulumi APIトークンを忘れずに准备しておいてください。以降のセクションで必要になります。

Pulumiのサンプルは〜/项目/ pulumi / GCP /计算/ディレクトリ内にあります。次のコマンドを実行し,Pulumiのサンプルディレクトリに移动します。

CD〜/项目/ pulumi / GCP /计算/

Pulumiの依存关系のインストール

この例ではIACの仕様をPython中で定义するため,最初にPulumi的Python SDKの依存关系をインストールする必要があります。ターミナルで以下のコマンドを実行します。

pip安装-r ../requirements.txt

Pulumiによるプレビュー

Pulumiには,pulumi预览というドライ実行のコマンドが用意されています。このコマンドを使用すると、既存のステート ファイルに記載されているステートに基づいて、既存スタックに対する更新内容をプレビューすることが可能です。目的としている最新のステートは、Pulumi プログラムを実行し、オブジェクト グラフの作成結果から全リソースの割り当て情報を抽出することで算定されます。こうした割り当ての情報を既存のステートと比較することにより、目的のステートを実現するためにどのような処理を実行する必要があるかが判断されます。スタックへの実際の変更処理は一切行われません。

ターミナルで以下のコマンドを実行します。

pulumi预览

上记のコマンドを実行すると,以下の结果が表示され,事前に作成しておいたPulumi APIトークンの入力を求められるので,トークンをターミナルにペーストして输入キーを押します。

管理您的Pulumi堆栈登录。运行“pulumi login—help”以获得其他登录选项。从https://app.pulumi.com/account/tokens输入您的访问令牌,或点击< Enter >使用您的浏览器登录:

注:APIトークンをターミナルにペーストしても,実际の値は表示されません。セキュリティの観点から,非表示に设定されています。

場合によっては,ターミナル内でスタックの選択を求められることがあります。その場合は开发オプションを选択し,输入キーを押します。以下のような结果が返されるはずです。

预览更新(DEV):类型名称计划+ pulumi:pulumi:堆栈计算-dev的创建+├─GCP:计算:网络网络创建+├─GCP:计算:地址车间,红外AS-code101创建+├─GCP:计算:实例研讨会 - 红外线作为-code101创建+└─GCP:计算:防火墙防火墙创建资源:+ 5,创建

これで,インフラストラクチャのステートが追迹管理されている,Pulumiのバックエンドクラウドにアクセスできるようになりました。続いて,コードを実行してみましょう。

Pulumiコードの実行

Pulumiコードを実行するには,pulumi了コマンドを使用します。これは,スタック内のリソースを作成または更新するコマンドです。ターゲットスタックで目的とされている最新のステートは,现在のPulumiプログラムを実行し,リソースグラフの作成に使用される全リソースの割り当て情报を确认することで算定されます。さらに,この目的のステートを既存のステートと比较することにより,运用停止を最小限に抑えつつ目的のステートを実现するためにはどのような作成,読み取り,更新,削除の处理を実行する必要があるかが判断されます。その后,このコマンドによって,スタックの新しいステートに关するすべてのトランザクションのスナップショットが记录されるため,以降も引き続き増分のみの変更でスタックの更新を行えます。

ターミナルで以下を実行します。

pulumi了

オプションを选択し,输入キーを押します.Pulumiアプリケーションが実行され,少し経つとGCP上にアプリケーションを実行するサーバーが完成します。以下のような结果が返されるはずです。

更新(DEV):类型名称状态+ pulumi:pulumi:堆栈计算-dev目录下创建+├─GCP:计算:网络网络创建+├─GCP:计算:地址车间,红外AS-code101创建+├─GCP:计算:防火墙防火墙创建+└─GCP:计算:实例研讨会 - 红外线作为-code101创建输出:external_ip: “34.74.75.17” instance_meta_data:{GCE-容器声明:“天赋:\ n容器:\ N  - 名称:研讨会 - 红外线作为-code101 \ n种图像:ariv3ra /研讨会,红外AS-code101:最新\ n标准输入:假\ n TTY:假\ n restartPolicy:始终\ n “} INSTANCE_NAME:” 研讨会 - 红外原样code101" instance_network:[[0]:{accessConfigs:[[0]:{natIp: “34.74.75.17” network_tier: “PREMIUM”}]名称: “nic0”}]的资源:+ 5中,创建时间:58S

表示された结果の中に,external_ipキーが含まれていることにお気付きかと思います。この値はポート5000経由でアクセスできる,アプリケーションのパブリック向けのIPアドレスです。前半のTerraformの例とまったく同様に,ブラウザーを使用してこのアプリケーションにアクセスできます。バックエンドシステムの处理が完了し,スタック全体がオンラインになるまでに,数分かかるのでご注意ください。

Pulumiのリソースの破弃

Pulumiには,すべてのクラウドリソースの运用を终了できるpulumi破坏というコマンドがあります。このコマンドでは,名前を指定することで,既存のスタックを削除できます。现在のスタックのステートは,ワークスペース内の关连付けられたステートファイルから読み込まれています。终了コマンドを実行すると,こうしたスタックのリソースの割り当ておよび关连付けられているステートがすべて解除されます。

ターミナルでpulumi破坏を実行し,オプションの入力を求められたらを选択します。これで,作成したGCPリソースが永久に破弃されます。

まとめ

お疲れさまでした。起程拓殖Pulumiという最新のIACツールを使用し,GCPでのアプリケーションのプロビジョニングとデプロイを経験したことで,皆さんは开発者としてさらにレベルアップしました。さらに详しく知りたい方は以下の资料を参照してください。