pythonとyamlでgcpをdeploy!「google cloud deployment manager」
Post on 09-Jan-2017
1.908 Views
Preview:
TRANSCRIPT
PythonとYAMLでGCPをDeploy! 「Google Cloud Deployment Manager」
2
3
Masashi Terui @ marcy_teruiI’m a developer and architect in the operators company (JIG-SAW Inc.)
I'm the organizer on the some of events in sapporo with the theme of "Infrastructure as Code”. I’m a member of JAWS-UG Sapporo and GCPUG Sapporo (Coming soon!)
I develop a IoT application (ServerSide) with Python and more. I’m a husband of my wife. I’m a father of my son and daughter.
ABOUT ME
4
ABOUT US
5
Coming soon!!
6
7
Cloud Deployment Managerは、複雑なクラウドプラットフォームのソリューションを
シンプルな宣言型のテンプレートを使用して、
開発者が容易に設計、共有、展開、管理することを可能とします。
簡単なWebサーバから複雑な高可用性クラスタまで、
Cloud Deployment Managerはチームがインフラの管理に費やす時間を少なくし、
より多くの時間を開発をに向けることができます。
- - 公式ページ(https://cloud.google.com/deployment-manager/) の英文訳(間違ってたらゴメンナサイ) -
”
つまり
8
複雑なクラウドプラットフォームのソリューション
シンプルな宣言型のテンプレート
容易に設計、共有、展開、管理
→ GCPを
→ YAMLで
→ アレコレできちゃうわけです
9
resources: - type: compute.v1.instance name: vm-my-first-deployment properties: zone: us-central1-b machineType: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/zones/us-central1-b/machineTypes/f1-micro disks: - deviceName: boot type: PERSISTENT boot: true autoDelete: true initializeParams: diskName: disk-my-first-deployment sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 networkInterfaces: - network: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/global/networks/default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT
10
いいえ、違います
YAMLとかJSONとかは”Code”ではありません
あくまでデータ(リソース)の表現方法(フォーマット)
別にあ○しぼーをdisってるわけではありません
個人的見解です
11
12
JSON or YAML
CloudFormationはより細かく制御でき、
ほとんどのサービスや機能を網羅しているが表現が冗長
軽く1000行とかのJSONができあがるの、何か間違ってると思うんですよ…
(
Pythonで書ける
13
14
インフラのコード化
自動化
再現可能なインフラ
インフラの世界へ開発のプロセスを持ち込む(TDD, CI etc…)
バズワード・・・?
15
16
17
18
19
resources: - type: compute.v1.instance name: vm-my-first-deployment properties: zone: us-central1-b machineType: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/zones/us-central1-b/machineTypes/f1-micro disks: - deviceName: boot type: PERSISTENT boot: true autoDelete: true initializeParams: diskName: disk-my-first-deployment sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 networkInterfaces: - network: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/global/networks/default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT
20
def GenerateConfig(context): return """ resources: - type: compute.v1.instance name: vm-my-first-deployment properties: zone: us-central1-b machineType: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/zones/us-central1-b/machineTypes/f1-micro <snip> sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20140619 networkInterfaces: - network: https://www.googleapis.com/compute/v1/projects/sunlit-arcade-100913/global/networks/default accessConfigs: - name: External NAT type: ONE_TO_ONE_NAT """
21
import helpers.common
def GenerateConfig(context): return """ resources: - type: compute.v1.instance name: %(name) properties: zone: %(zone) machineType: %(machine_type) disks: - deviceName: boot <snip> sourceImage: %(source_image) networkInterfaces: - network: %(metwork_project)/global/networks/default <snip> """ % {"name": (common.GenerateMachineName("myFrontend", context.env(“environment")), "zone": context.env("zone"),, "machine_type": common.GenerateMachineTypeURI(zone=context.env("zone"), type=context.env("type")), "project": common.GenerateProjectURI(context.env("project")), "source_image": common.GenerateProjectURI("debian-cloud", "ebian-7-wheezy-v20140619"), "metwork_project": common.GenerateProjectURI("sunlit-arcade-100913")}
22
こんな風に
23
よく使う記述をメソッドにまとめる
オブジェクトに属性を与えて、
メソッドコールするだけ的な感じにしたり
使い回しを考えて共通化・部品化
自分(達)のインフラ構築・管理フレームワークを作れる
24
25
26
gcloud deployment-manager deployments create <name> --config <yml>
27
公式ドキュメント(英語ですw)
https://cloud.google.com/deployment-manager/overview
28
29
30
32
33
Pythonでクラウド(特にGCP)を操りたい イケてるクラウドインフラ上でPythonでIoTサーバサイド開発したい方今のところAWSメイン(Kinesis, DynamoDBとか、コアなプロダクト触れます) GCPは具体的に活用計画有り、Azure他もベンダー問わずメリットあるなら使います。もちろんInfra as CodeやChatOps等も実践しています。
top related