File: api_op_CreateContainerGroupDefinition.go

package info (click to toggle)
golang-github-aws-aws-sdk-go-v2 1.30.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 662,428 kB
  • sloc: java: 16,875; makefile: 432; sh: 175
file content (242 lines) | stat: -rw-r--r-- 9,529 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
// Code generated by smithy-go-codegen DO NOT EDIT.

package gamelift

import (
	"context"
	"fmt"
	awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
	"github.com/aws/aws-sdk-go-v2/service/gamelift/types"
	"github.com/aws/smithy-go/middleware"
	smithyhttp "github.com/aws/smithy-go/transport/http"
)

//	This operation is used with the Amazon GameLift containers feature, which is
//
// currently in public preview.
//
// Creates a ContainerGroupDefinition resource that describes a set of containers
// for hosting your game server with Amazon GameLift managed EC2 hosting. An Amazon
// GameLift container group is similar to a container "task" and "pod". Each
// container group can have one or more containers.
//
// Use container group definitions when you create a container fleet. Container
// group definitions determine how Amazon GameLift deploys your containers to each
// instance in a container fleet.
//
// You can create two types of container groups, based on scheduling strategy:
//
//   - A replica container group manages the containers that run your game server
//     application and supporting software. Replica container groups might be
//     replicated multiple times on each fleet instance, depending on instance
//     resources.
//
//   - A daemon container group manages containers that run other software, such
//     as background services, logging, or test processes. You might use a daemon
//     container group for processes that need to run only once per fleet instance, or
//     processes that need to persist independently of the replica container group.
//
// To create a container group definition, specify a group name, a list of
// container definitions, and maximum total CPU and memory requirements for the
// container group. Specify an operating system and scheduling strategy or use the
// default values. When using the Amazon Web Services CLI tool, you can pass in
// your container definitions as a JSON file.
//
// This operation requires Identity and Access Management (IAM) permissions to
// access container images in Amazon ECR repositories. See [IAM permissions for Amazon GameLift]for help setting the
// appropriate permissions.
//
// If successful, this operation creates a new ContainerGroupDefinition resource
// with an ARN value assigned. You can't change the properties of a container group
// definition. Instead, create a new one.
//
// # Learn more
//
// [Create a container group definition]
//
// [Container fleet design guide]
//
// [Create a container definition as a JSON file]
//
// [Create a container definition as a JSON file]: https://docs.aws.amazon.com/gamelift/latest/developerguide/containers-definitions.html#containers-definitions-create
// [Create a container group definition]: https://docs.aws.amazon.com/gamelift/latest/developerguide/containers-create-groups.html
// [IAM permissions for Amazon GameLift]: https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-iam-policy-examples.html
// [Container fleet design guide]: https://docs.aws.amazon.com/gamelift/latest/developerguide/containers-design-fleet.html
func (c *Client) CreateContainerGroupDefinition(ctx context.Context, params *CreateContainerGroupDefinitionInput, optFns ...func(*Options)) (*CreateContainerGroupDefinitionOutput, error) {
	if params == nil {
		params = &CreateContainerGroupDefinitionInput{}
	}

	result, metadata, err := c.invokeOperation(ctx, "CreateContainerGroupDefinition", params, optFns, c.addOperationCreateContainerGroupDefinitionMiddlewares)
	if err != nil {
		return nil, err
	}

	out := result.(*CreateContainerGroupDefinitionOutput)
	out.ResultMetadata = metadata
	return out, nil
}

type CreateContainerGroupDefinitionInput struct {

	// Definitions for all containers in this group. Each container definition
	// identifies the container image and specifies configuration settings for the
	// container. See the [Container fleet design guide]for container guidelines.
	//
	// [Container fleet design guide]: https://docs.aws.amazon.com/gamelift/latest/developerguide/containers-design-fleet.html
	//
	// This member is required.
	ContainerDefinitions []types.ContainerDefinitionInput

	// A descriptive identifier for the container group definition. The name value
	// must be unique in an Amazon Web Services Region.
	//
	// This member is required.
	Name *string

	// The platform that is used by containers in the container group definition. All
	// containers in a group must run on the same operating system.
	//
	// This member is required.
	OperatingSystem types.ContainerOperatingSystem

	// The maximum amount of CPU units to allocate to the container group. Set this
	// parameter to an integer value in CPU units (1 vCPU is equal to 1024 CPU units).
	// All containers in the group share this memory. If you specify CPU limits for
	// individual containers, set this parameter based on the following guidelines. The
	// value must be equal to or greater than the sum of the CPU limits for all
	// containers in the group.
	//
	// This member is required.
	TotalCpuLimit *int32

	// The maximum amount of memory (in MiB) to allocate to the container group. All
	// containers in the group share this memory. If you specify memory limits for
	// individual containers, set this parameter based on the following guidelines. The
	// value must be (1) greater than the sum of the soft memory limits for all
	// containers in the group, and (2) greater than any individual container's hard
	// memory limit.
	//
	// This member is required.
	TotalMemoryLimit *int32

	// The method for deploying the container group across fleet instances. A replica
	// container group might have multiple copies on each fleet instance. A daemon
	// container group has one copy per fleet instance. Default value is REPLICA .
	SchedulingStrategy types.ContainerSchedulingStrategy

	// A list of labels to assign to the container group definition resource. Tags are
	// developer-defined key-value pairs. Tagging Amazon Web Services resources are
	// useful for resource management, access management and cost allocation. For more
	// information, see [Tagging Amazon Web Services Resources]in the Amazon Web Services General Reference.
	//
	// [Tagging Amazon Web Services Resources]: https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html
	Tags []types.Tag

	noSmithyDocumentSerde
}

type CreateContainerGroupDefinitionOutput struct {

	// The properties of the newly created container group definition resource. You
	// use this resource to create a container fleet.
	ContainerGroupDefinition *types.ContainerGroupDefinition

	// Metadata pertaining to the operation's result.
	ResultMetadata middleware.Metadata

	noSmithyDocumentSerde
}

func (c *Client) addOperationCreateContainerGroupDefinitionMiddlewares(stack *middleware.Stack, options Options) (err error) {
	if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil {
		return err
	}
	err = stack.Serialize.Add(&awsAwsjson11_serializeOpCreateContainerGroupDefinition{}, middleware.After)
	if err != nil {
		return err
	}
	err = stack.Deserialize.Add(&awsAwsjson11_deserializeOpCreateContainerGroupDefinition{}, middleware.After)
	if err != nil {
		return err
	}
	if err := addProtocolFinalizerMiddlewares(stack, options, "CreateContainerGroupDefinition"); err != nil {
		return fmt.Errorf("add protocol finalizers: %v", err)
	}

	if err = addlegacyEndpointContextSetter(stack, options); err != nil {
		return err
	}
	if err = addSetLoggerMiddleware(stack, options); err != nil {
		return err
	}
	if err = addClientRequestID(stack); err != nil {
		return err
	}
	if err = addComputeContentLength(stack); err != nil {
		return err
	}
	if err = addResolveEndpointMiddleware(stack, options); err != nil {
		return err
	}
	if err = addComputePayloadSHA256(stack); err != nil {
		return err
	}
	if err = addRetry(stack, options); err != nil {
		return err
	}
	if err = addRawResponseToMetadata(stack); err != nil {
		return err
	}
	if err = addRecordResponseTiming(stack); err != nil {
		return err
	}
	if err = addClientUserAgent(stack, options); err != nil {
		return err
	}
	if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
		return err
	}
	if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
		return err
	}
	if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil {
		return err
	}
	if err = addTimeOffsetBuild(stack, c); err != nil {
		return err
	}
	if err = addUserAgentRetryMode(stack, options); err != nil {
		return err
	}
	if err = addOpCreateContainerGroupDefinitionValidationMiddleware(stack); err != nil {
		return err
	}
	if err = stack.Initialize.Add(newServiceMetadataMiddleware_opCreateContainerGroupDefinition(options.Region), middleware.Before); err != nil {
		return err
	}
	if err = addRecursionDetection(stack); err != nil {
		return err
	}
	if err = addRequestIDRetrieverMiddleware(stack); err != nil {
		return err
	}
	if err = addResponseErrorMiddleware(stack); err != nil {
		return err
	}
	if err = addRequestResponseLogging(stack, options); err != nil {
		return err
	}
	if err = addDisableHTTPSMiddleware(stack, options); err != nil {
		return err
	}
	return nil
}

func newServiceMetadataMiddleware_opCreateContainerGroupDefinition(region string) *awsmiddleware.RegisterServiceMetadata {
	return &awsmiddleware.RegisterServiceMetadata{
		Region:        region,
		ServiceID:     ServiceID,
		OperationName: "CreateContainerGroupDefinition",
	}
}