了解 Terraform 如何管理 AWS 资源
首先
我是Progaku Advent Calendar 2022的第22天作者。
Terraform是一种用于实现基础设施即服务(IaaS)的工具之一,可以构建AWS、GCP、Azure以及其他资源,如Snowflake和Elasticsearch。
最近我一直在使用Terraform创建一些AWS资源。在这个过程中,我能够通过阅读Terraform的文档获得关于AWS资源的很多知识。因此,在本篇文章中,我想从Terraform的文档中深入探讨一下AWS资源。Progaku是一个编程学习社区,负责这个Advent Calendar的组织工作。所以我想顺便写一篇关于技术学习的重要性的文章。
目标资源
由于AWS资源数量太多,所以我们要精简资源。
本次我们将深入探讨AWS Lambda。
关于Lambda是什么的解释,可能需要写一篇文章来详细说明,所以请参考我们亲爱的Classmethod公司的再入门博客转载。(一直以来都非常感谢你们)
-
- AWS 再入門 AWS Lambda 編
- AWS再入門2018 AWS Lambda編
在我看来,这是一项通过某些事件来触发程序运行的服务。根据我快速的搜索结果,它似乎在FaaS(函数即服务)或无服务器的背景下被提及。选择Lambda的原因是因为Lambda似乎是一个可以写文章的资源。
以下是有关lambda和Terraform的文档。
- Resource: aws_lambda_function
现在让我们一起来看看吧。
看一下
在上面有很多摘要和示例之类的内容,作为文档很不错,但如果不了解Terraform就无法理解,所以我会跳过它们。我想查看的是参数参考(Argument Reference)。
必填项中包括function_name和role,如果您曾经创建过资源,应该会了解它们。
如果你不知道什么是”角色”,请自行了解一下身份和访问管理(IAM)的概念。
-
- Resource: aws_iam_role
- AWS再入門ブログリレー2022 AWS IAM編
回到lambda函数并查看可选参数,有很多选项。尽管全部考虑可能有点困难,但我会尽力按照我想要的方向前进。粗略浏览一下,
s3_bucket – (Optional) S3 bucket location containing the function’s deployment package. Conflicts with filename and image_uri. This bucket must reside in the same AWS region where you are creating the Lambda function.
s3_key – (Optional) S3 key of an object containing the function’s deployment package. Conflicts with filename and image_uri.
有如下记载。
让我们来翻译一下。
s3_bucket – (Optional) 関数のデプロイパッケージを含む S3 バケットの場所。 filename および image_uri と競合します。このバケットは、Lambda 関数を作成しているのと同じ AWS リージョンに存在する必要があります。
s3_key – (Optional) 関数のデプロイ パッケージを含むオブジェクトの S3 キー。 filename および image_uri と競合します。
函数的部署包?可以通过触发S3资源上的CRUD事件来激活Lambda,但与那不同。
-
- S3イベント概要
Amazon S3 イベント通知
チュートリアル: Amazon S3 トリガーを使用して Lambda 関数を呼び出す
3分で作る、S3イベントで実行するLambda
我来查一下,这是什么?
马上找到了。Lambda 部署包
根据文档来看,似乎需要使用 S3 将要部署到 Lambda 上的程序放置在其中。
如果部署包的大小超过50MB,请将函数的代码和依赖关系上传到Amazon S3存储桶中。
您可以创建部署包并将.zip文件上传到在创建Lambda函数的AWS区域的Amazon S3存储桶中。在创建Lambda函数时,可以在Lambda控制台上或使用AWS CLI指定S3存储桶名称和对象键名。
在下方有如此说明,我明白了。
尽管这是我的偏见,但是一提到使用.zip文件上传到lambda,我想到了Go,所以我搜索了”terraform s3 go lambda”这个浅显的词语。
然后我找到了以下的文章。
- GolangのLambda関数をTerraformだけでデプロイする
在上述文章中提到了以下内容,并了解了source_code_hash。
源代码哈希
此属性用于触发函数的重新部署。当该值更新时,将重新部署。
必须设置为包文件的Base64编码的SHA256哈希值。
如果使用本地部署包,可以使用filebase64sha256(“file.zip”)或者base64sha256(file(“file.zip”))等方法。
即使阅读了Terraform的文档,也无济于事。
在中文中,可以这样表达:
需要使用此作为更新的触发器。
需要设置通过filename或s3_key指定的包文件base64编码的SHA256哈希值。
通常的设置方法是
filebase64sha256(“file.zip”)(Terraform 0.11.12及以上版本)
或者
base64sha256(file(“file.zip”))(Terraform 0.11.11及以上版本)
这里的”file.zip”与Lambda函数的源代码存档的本地文件名相同。
文章内容是关于将Terraform的类方法变得更复杂。需要注意的是,Terraform仅仅是一个IaaS平台,所以除了Lambda资源本身以外,还有其他参数。
结束
非常感谢您阅读。
我推荐Terraform作为学习AWS资源的一种方法,但除了Terraform,您也可以从AWS SDK文档中学习。
当我使用AWS时,我会使用Python和Go语言。
-
- boto3
- AWS SDK for Go v2
我会介绍两个。
以上是Progaku Advent Calendar 2022第22天的”与最近发现的AWS资源建立友好关系”。