翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Terraform を使用した ParallelCluster API のデプロイ
このチュートリアルでは、 ParallelCluster API をデプロイするためのシンプルな Terraform プロジェクトを定義します。
前提条件
Terraform v1.5.7+ がインストールされています。
ParallelCluster API をデプロイするアクセス許可を持つ IAM ロール。必要なアクセス許可 を参照してください。
Terraform プロジェクトを定義する
というディレクトリを作成します
my-pcluster-api
。作成するすべてのファイルは、このディレクトリ内にあります。
ファイルを作成して
provider.tf
、 AWS プロバイダーを設定します。provider "aws" { region = var.region profile = var.profile }
ファイルを作成して
main.tf
、 モジュールを使用して ParallelClusterリソースを定義します。module
"parallelcluster_pcluster_api"
{ source ="aws-tf/parallelcluster/aws//modules/pcluster_api"
version ="1.0.0"
region = var.region api_stack_name = var.api_stack_name api_version = var.api_version deploy_pcluster_api = true parameters = { EnableIamAdminAccess ="true"
} }ファイルを作成して
variables.tf
、このプロジェクトに挿入できる変数を定義します。variable "region" { description = "The region the ParallelCluster API is deployed in." type = string default = "us-east-1" } variable "profile" { type = string description = "The AWS profile used to deploy the clusters." default = null } variable "api_stack_name" { type = string description = "The name of the CloudFormation stack used to deploy the ParallelCluster API." default = "ParallelCluster" } variable "api_version" { type = string description = "The version of the ParallelCluster API." }
ファイルを作成して
terraform.tfvars
、変数の任意の値を設定します。以下のファイルは、スタック名
us-east-1
を使用して ParallelCluster API 3.10.0 を にデプロイしますMyParallelClusterAPI-310
。スタック名を使用して、この ParallelCluster API デプロイを参照できます。region = "us-east-1" api_stack_name = "MyParallelClusterAPI-310" api_version = "3.10.0"
ファイルを作成して
outputs.tf
、このプロジェクトによって返される出力を定義します。output "pcluster_api_stack_outputs" { value = module.parallelcluster_pcluster_api.stack_outputs }
プロジェクトディレクトリは次のとおりです。
my-pcluster-api ├── main.tf - Terraform entrypoint to define the resources using the ParallelCluster module. ├── outputs.tf - Defines the outputs returned by Terraform. ├── providers.tf - Configures the AWS provider. ├── terraform.tfvars - Set the arbitrary values for the variables, i.e. region, PCAPI version, PCAPI stack name └── variables.tf - Defines the variables, e.g. region, PCAPI version, PCAPI stack name.
API をデプロイする
API をデプロイするには、標準の Terraform コマンドを順番に実行します。
プロジェクトを構築します。
terraform init
デプロイプランを定義します。
terraform plan -out tfplan
プランをデプロイします。
terraform apply tfplan
必要なアクセス許可
Terraform で ParallelCluster API をデプロイするには、次のアクセス許可が必要です。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "cloudformation:DescribeStacks", "cloudformation:GetTemplate" ], "Resource": "arn:
PARTITION
:cloudformation:REGION
:ACCOUNT
:stack/*", "Effect": "Allow", "Sid": "CloudFormationRead" }, { "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:CreateChangeSet" ], "Resource": "arn:PARTITION
:cloudformation:REGION
:ACCOUNT
:stack/MyParallelClusterAPI*", "Effect": "Allow", "Sid": "CloudFormationWrite" }, { "Action": [ "cloudformation:CreateChangeSet" ], "Resource": [ "arn:PARTITION
:cloudformation:REGION
:aws:transform/Include", "arn:PARTITION
:cloudformation:REGION
:aws:transform/Serverless-2016-10-31" ], "Effect": "Allow", "Sid": "CloudFormationTransformWrite" }, { "Action": [ "s3:GetObject" ], "Resource": [ "arn:PARTITION
:s3:::*-aws-parallelcluster/parallelcluster/*/api/ParallelCluster.openapi.yaml", "arn:PARTITION
:s3:::*-aws-parallelcluster/parallelcluster/*/layers/aws-parallelcluster/lambda-layer.zip" ], "Effect": "Allow", "Sid": "S3ParallelClusterArtifacts" }, { "Action": [ "iam:CreateRole", "iam:DeleteRole", "iam:GetRole", "iam:CreatePolicy", "iam:DeletePolicy", "iam:GetPolicy", "iam:GetRolePolicy", "iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePolicy", "iam:DeleteRolePolicy", "iam:ListPolicyVersions" ], "Resource": [ "arn:PARTITION
:iam::ACCOUNT
:role/*", "arn:PARTITION
:iam::ACCOUNT
:policy/*" ], "Effect": "Allow", "Sid": "IAM" }, { "Action": [ "iam:PassRole" ], "Resource": [ "arn:PARTITION
:iam::ACCOUNT
:role/ParallelClusterLambdaRole-*", "arn:PARTITION
:iam::ACCOUNT
:role/APIGatewayExecutionRole-*" ], "Effect": "Allow", "Sid": "IAMPassRole" }, { "Action": [ "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:PublishLayerVersion", "lambda:DeleteLayerVersion", "lambda:GetLayerVersion", "lambda:TagResource", "lambda:UntagResource" ], "Resource": [ "arn:PARTITION
:lambda:REGION
:ACCOUNT
:layer:PCLayer-*", "arn:PARTITION
:lambda:REGION
:ACCOUNT
:function:*-ParallelClusterFunction-*" ], "Effect": "Allow", "Sid": "Lambda" }, { "Action": [ "logs:CreateLogGroup", "logs:DeleteLogGroup", "logs:DescribeLogGroups", "logs:PutRetentionPolicy", "logs:TagLogGroup", "logs:UntagLogGroup" ], "Resource": [ "arn:PARTITION
:logs:REGION
:ACCOUNT
:log-group:/aws/lambda/*-ParallelClusterFunction-*" ], "Effect": "Allow", "Sid": "Logs" }, { "Action": [ "apigateway:DELETE", "apigateway:GET", "apigateway:PATCH", "apigateway:POST", "apigateway:PUT", "apigateway:UpdateRestApiPolicy" ], "Resource": [ "arn:PARTITION
:apigateway:REGION
::/restapis", "arn:PARTITION
:apigateway:REGION
::/restapis/*", "arn:PARTITION
:apigateway:REGION
::/tags/*" ], "Effect": "Allow", "Sid": "APIGateway" } ] }