はじめに
CodeArtifact記事第2弾。第1弾はこちら。
フルマネージドなローカルリポジトリ。セキュアにローカルリポジトリを運営するのが楽になるので、Java開発をしている人には大変助かる。
2020/10/2のAWSプロバイダ3.9.0でようやくTerraformでも対応されたので、さっそく作ってみよう。
IaC
と言っても、特に難しいことはない。
マニュアルに書かれたとおりに実装していけば良いだけだ。
KMS、ドメイン、リポジトリを作れば良い。
追加でドメインポリシを指定したいのであれば aws_codeartifact_domain_permissions_policy
を設定しよう。aws_codeartifact_domain_permissions_policy
の policy_document
は、ヒアドキュメントでも aws_iam_policy_document
リソースを使っても良い。
################################################################################
# CodeArtifact #
################################################################################
resource "aws_kms_key" "codeartifact" {
description = "CodeArtifactテスト用キー"
}
resource "aws_codeartifact_domain" "test" {
domain = local.codeartifact_domain_name
encryption_key = aws_kms_key.codeartifact.arn
}
resource "aws_codeartifact_repository" "test" {
repository = local.codeartifact_domain_repository
domain = aws_codeartifact_domain.test.domain
description = "CodeArtifactテスト用リポジトリ"
}
resource "aws_codeartifact_domain_permissions_policy" "test" {
domain = aws_codeartifact_domain.test.domain
policy_document = data.aws_iam_policy_document.codeartifact.json
}
data "aws_iam_policy_document" "codeartifact" {
statement {
effect = "Allow"
actions = [
"codeartifact:CreateRepository",
]
principals {
type = "AWS"
identifiers = [
"arn:aws:iam::${data.aws_caller_identity.self.account_id}:root",
]
}
resources = [
aws_codeartifact_domain.test.arn,
]
}
}
これでサクッとローカルリポジトリを作って管理できるようになったぞ!
でももうCodeArtifactのリポジトリ手動で作っちゃったよ…
という人も多いと思う。
そこで、今後のことを考えてTerraformにインポートをしておこう。
インポートしたいTerraformのワークスペース(tfstateがある場所)で上記のHCLを作ったら、
$ terraform import aws_kms_key.codeartifact [KMSのキーID]
$ terraform import aws_codeartifact_domain.test [CodeArtifactドメインのARN]
$ terraform import aws_codeartifact_repository.test [CodeArtifactリポジトリのARN]
でインポートして、あとは terraform plan
で差分がなくなるまでパラメータを調整しよう。