AWSTemplateFormatVersion: 2010-09-09
Description: template.automation.yml
Resources:
Document:
Type: AWS::SSM::Document
Properties:
Name: "${Document name}"
DocumentType: Automation
Attachments:
- Key: "S3FileUrl"
Name: "${ZIP file name}"
Values:
- !Sub "s3://${S3 bucket name}/${ZIP file name}"
Content:
schemaVersion: "0.3"
assumeRole: "${Delegation role ARN}"
mainSteps:
- action: aws:executeScript
name: RunSetupScript
inputs:
Runtime: "${Runtime name}"
Handler: "${Python file name}.${Function name}"
InputPayload:
"${Payload}"
files:
${ZIP file name}:
checksums:
sha256: "${The hash value of the zip file}"
-
속성:
이름
-
값 유형: 문자열
-
설명:
-
Runbook의 이름을 지정합니다.
-
이름을 지정하고 Runbook을 업데이트할 때 대체가 발생하는 경우 동일한 이름으로 다른 Runbook을 만들 수 없으며 이로 인해 오류가 발생합니다.
-
자동으로 생성된 Runbook 이름을 사용하거나 배포할 때마다 고유한 이름을 지정합니다.
-
속성:
첨부 파일
-
유형: 첨부 원본 목록
-
설명: Runbook 실행에 필요한 파일을 지정합니다.
-
속성:
Content
->
assumeRole
-
값 유형: 문자열
-
설명: Runbook을 실행하는 데 필요한 역할을 지정합니다.
-
속성:
Content
->
mainSteps
->
inputs
->
Runtime
-
값 유형: 문자열
-
설명:
-
실행할 스크립트의 런타임을 지정합니다.
-
현재
python3.x
또는
PowerShell Core X.X
만 지정할 수 있습니다.
-
사용 가능한 런타임은 다음을 참조하세요.
-
시스템 관리자 자동화 작업 참조 - AWS 시스템 관리자
-
속성:
Content
->
mainSteps
->
inputs
->
Handler
-
값 유형: 문자열
-
설명:
-
실행할 스크립트의 함수 이름을 지정합니다.
-
예를 들어
runbook.py
에서
main
기능을 실행하려면
main
을 지정합니다.
-
PowerShell의 경우 이 속성이 필요하지 않습니다.
-
속성:
Content
->
mainSteps
->
inputs
->
InputPayload
-
값 유형: 문자열
-
설명:
-
JSON 형식으로 스크립트에 전달할 매개변수를 지정합니다.
-
매개변수는 스크립트에서
sys.argv
로 액세스할 수 있습니다.
-
예를 들어,
InputPayload
에 이하와 같이 지정했을 경우, 스크립트내에서
sys.argv
를 취득하면,
['runbook.py', '{"key1": "value1", "key2": "value2"}']
가 됩니다.
resource "null_resource" "install_requirements" {
triggers = {
always_run = "${timestamp()}"
}
provisioner "local-exec" {
command = "pip install -r ${path.root}/src/requirements.txt -t ${path.root}/src/modules"
}
}
data "archive_file" "file" {
depends_on = [ null_resource.install_requirements ]
type = "zip"
source_dir = "${path.root}/src/modules"
output_path = "${path.root}/src/modules.zip"
}
resource "aws_s3_object" "object" {
bucket = "${S3 bucket name}"
key = "modules.zip"
source = data.archive_file.file.output_path
}
resource "aws_ssm_document" "document" {
depends_on = [ aws_s3_object.object ]
name = "${ドキュメント名}"
document_type = "Automation"
document_format = "JSON"
attachments_source {
key = "S3FileUrl"
name = "modules.zip"
values = [
"https://"${S3 bucket name}".s3.amazonaws.com/modules.zip"
]
}
content = jsonencode({
assumeRole = "${Delegation Roll ARN}"
schemaVersion = "0.3"
mainSteps = [
{
action = "aws:executeScript"
name = "RunSetupScript"
inputs = {
Runtime = "${Runtime name}"
Handler = "${関数名}"
Script = "${file("${path.root}/src/runbook.py")}"
Attachment = "modules.zip"
}
}
]
files = {
"modules.zip" = {
checksums = {
sha256 = filesha256(data.archive_file.file.output_path)
}
}
}
})
}
-
프로퍼티명:
aws_s3_object
->
bucket
,
aws_ssm_document
->
attachments_source
->
values
-
값 유형: 문자열
-
해설:
-
aws_s3_object
의
bucket
은 ZIP 파일을 업로드 할 S3 버킷 이름을 지정합니다.
-
aws_ssm_document
의
attachments_source
의
values
는 ZIP 파일의 URL을 지정합니다.
-
프로퍼티명:
aws_ssm_document
->
name
-
값 유형: 문자열
-
해설:
-
런북의 이름을 지정합니다.
-
런북의 이름은 고유해야 합니다.
-
프로퍼티명:
aws_ssm_document
->
content
->
assumeRole
-
값 유형: 문자열
-
해설:
– 런북을 실행하는 데 필요한 권한이 있는 역할을 지정합니다.
-
프로퍼티명:
aws_ssm_document
->
content
->
mainSteps
->
inputs
->
Runtime
-
값 유형: 문자열
-
해설:
– 실행할 스크립트의 런타임을 지정합니다.
-
현재는
Python3.x
또는
PowerShell Core x.x
만 지정 가능합니다.
-
사용 가능한 런타임은 아래 링크 대상을 참조하십시오.
-
Systems Manager Automation 작업 참조 - AWS Systems Manager
-
프로퍼티명:
aws_ssm_document
->
content
->
mainSteps
->
inputs
->
Handler
-
값 유형: 문자열
-
해설:
– 실행할 스크립트의 함수 이름을 지정합니다.
-
후술하는 스크립트의 정의(Python)의 예에서는,
runbook.py
의
main
함수를 실행하는 경우는
main
라고 지정합니다.
-
PowerShell의 경우 이 속성은 필요하지 않습니다.
-
프로퍼티명:
aws_ssm_document
->
content
->
mainSteps
->
inputs
->
Script
-
값 유형: 문자열
-
해설:
– 실행할 스크립트의 파일 경로를 지정합니다.
-
Terraform 의 경우는,
file()
함수를 이용해 파일 패스를 지정하는 것으로, 파일 내용을 캐릭터 라인으로서 취득하는 것이 가능합니다.
{
"_AWS_XRAY_DAEMON_ADDRESS": "169.254.79.129",
"_AWS_XRAY_DAEMON_PORT": "2000",
"_HANDLER": "FalconPythonWrapper.lambda_handler",
"_X_AMZN_TRACE_ID": "Root=x-xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx;Parent=xxxxxxxxxxxxxxxx;Sampled=1;Lineage=xxxxxxxx:x|xxxxxxxx:x|xxxxxxxx:x",
"AWS_ACCESS_KEY_ID": "xxxxxxxxxx",
"AWS_DEFAULT_REGION": "us-east-2",
"AWS_EXECUTION_ENV": "AWS_Lambda_python3.8",
"AWS_LAMBDA_FUNCTION_MEMORY_SIZE": "512",
"AWS_LAMBDA_FUNCTION_NAME": "Falcon-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AWS_LAMBDA_FUNCTION_VERSION": "$LATEST",
"AWS_LAMBDA_INITIALIZATION_TYPE": "on-demand",
"AWS_LAMBDA_LOG_GROUP_NAME": "/aws/lambda/Falcon-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AWS_LAMBDA_LOG_STREAM_NAME": "2023/12/14/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"AWS_LAMBDA_RUNTIME_API": "127.0.0.1:9001",
"AWS_REGION": "us-east-2",
"AWS_SECRET_ACCESS_KEY": "xxxxxxxxxx",
"AWS_SECURITY_TOKEN": "xxxxxxxxxx",
"AWS_SESSION_TOKEN": "xxxxxxxxxx",
"AWS_XRAY_CONTEXT_MISSING": "LOG_ERROR",
"AWS_XRAY_DAEMON_ADDRESS": "169.254.79.129:2000",
"LAMBDA_RUNTIME_DIR": "/var/runtime",
"LAMBDA_TASK_ROOT": "/var/task",
"LANG": "en_US.UTF-8",
"LD_LIBRARY_PATH": "/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib",
"PATH": "/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin",
"PWD": "/var/task",
"PYTHONPATH": "/var/runtime:/tmp/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-2023-12-14-10-36-37",
"SHLVL": "0",
"TZ": ":UTC"
}